add(crm): implement content service/repository
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/crusttech/crust/crm/types"
|
||||
"github.com/titpetric/factory"
|
||||
)
|
||||
|
||||
type (
|
||||
Content interface {
|
||||
With(ctx context.Context) Content
|
||||
|
||||
FindByID(id uint64) (*types.Content, error)
|
||||
Find() ([]*types.Content, error)
|
||||
Create(mod *types.Content) (*types.Content, error)
|
||||
Update(mod *types.Content) (*types.Content, error)
|
||||
DeleteByID(id uint64) error
|
||||
}
|
||||
|
||||
content struct {
|
||||
*repository
|
||||
}
|
||||
)
|
||||
|
||||
func NewContent(ctx context.Context) Content {
|
||||
return &content{
|
||||
repository: &repository{
|
||||
ctx: ctx,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (r *content) With(ctx context.Context) Content {
|
||||
return &content{
|
||||
repository: r.repository.With(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func (r *content) FindByID(id uint64) (*types.Content, error) {
|
||||
mod := &types.Content{}
|
||||
if err := r.db().Get(mod, "SELECT * FROM crm_content WHERE id = ?", id); err != nil {
|
||||
println(err.Error())
|
||||
return nil, ErrDatabaseError
|
||||
} else {
|
||||
return mod, nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r *content) Find() ([]*types.Content, error) {
|
||||
mod := make([]*types.Content, 0)
|
||||
if err := r.db().Select(&mod, "SELECT * FROM crm_content ORDER BY name ASC"); err != nil {
|
||||
println(err.Error())
|
||||
return nil, ErrDatabaseError
|
||||
} else {
|
||||
return mod, nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r *content) Create(mod *types.Content) (*types.Content, error) {
|
||||
mod.ID = factory.Sonyflake.NextID()
|
||||
return mod, r.db().Insert("crm_content", mod)
|
||||
}
|
||||
|
||||
func (r *content) Update(mod *types.Content) (*types.Content, error) {
|
||||
return mod, r.db().Replace("crm_content", mod)
|
||||
|
||||
}
|
||||
|
||||
func (r *content) DeleteByID(id uint64) error {
|
||||
if _, err := r.db().Exec("DELETE FROM crm_content WHERE ID = ?", id); err != nil {
|
||||
return ErrDatabaseError
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
@@ -74,34 +74,3 @@ func (r *module) DeleteByID(id uint64) error {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
//func (r *module) Edit(r *moduleEditRequest) (interface{}, error) {
|
||||
// db := factory.Database.MustGet()
|
||||
// m := module{}.New()
|
||||
// m.SetID(r.id).SetName(r.name)
|
||||
// if m.GetID() > 0 {
|
||||
// return m, db.With(ctx).Replace("crm_module", m)
|
||||
// }
|
||||
// m.SetID(factory.Sonyflake.NextID())
|
||||
// return m, db.With(ctx).Insert("crm_module", m)
|
||||
//}
|
||||
//
|
||||
//func (r *module) ContentList(r *moduleContentListRequest) (interface{}, error) {
|
||||
// db := factory.Database.MustGet()
|
||||
// if r.id > 0 {
|
||||
// m := ModuleContentRow{}.New()
|
||||
// return m, db.Get(m, "select * from crm_module id=?", r.id)
|
||||
// }
|
||||
//
|
||||
// res := make([]ModuleContentRow, 0)
|
||||
// err = db.With(ctx).Select(&res, "select * from crm_module order by name asc")
|
||||
// return res, err
|
||||
//}
|
||||
//
|
||||
//func (r *module) ContentEdit(r *moduleContentEditRequest) (interface{}, error) {
|
||||
// return nil, errors.New("Not implemented: module.content/edit")
|
||||
//}
|
||||
//
|
||||
//func (r *module) ContentDelete(r *moduleContentDeleteRequest) (interface{}, error) {
|
||||
// return nil, errors.New("Not implemented: module.content/delete")
|
||||
//}
|
||||
|
||||
+1
-1
@@ -5,8 +5,8 @@ import (
|
||||
|
||||
"context"
|
||||
"github.com/crusttech/crust/crm/rest/server"
|
||||
"github.com/crusttech/crust/crm/types"
|
||||
"github.com/crusttech/crust/crm/service"
|
||||
"github.com/crusttech/crust/crm/types"
|
||||
)
|
||||
|
||||
var _ = errors.Wrap
|
||||
|
||||
+36
-17
@@ -7,21 +7,23 @@ import (
|
||||
|
||||
"context"
|
||||
"github.com/crusttech/crust/crm/rest/server"
|
||||
"github.com/crusttech/crust/crm/types"
|
||||
"github.com/crusttech/crust/crm/service"
|
||||
"github.com/crusttech/crust/crm/types"
|
||||
)
|
||||
|
||||
var _ = errors.Wrap
|
||||
|
||||
type (
|
||||
Module struct {
|
||||
module service.ModuleService
|
||||
module service.ModuleService
|
||||
content service.ContentService
|
||||
}
|
||||
)
|
||||
|
||||
func (Module) New() server.ModuleAPI {
|
||||
return &Module{
|
||||
module: service.Module(),
|
||||
module: service.Module(),
|
||||
content: service.Content(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,31 +40,48 @@ func (s *Module) Delete(ctx context.Context, r *server.ModuleDeleteRequest) (int
|
||||
}
|
||||
|
||||
func (s *Module) Create(ctx context.Context, r *server.ModuleCreateRequest) (interface{}, error) {
|
||||
m := &types.Module{Name: r.Name}
|
||||
return s.module.With(ctx).Create(m)
|
||||
return s.module.With(ctx).Create(
|
||||
&types.Module{Name: r.Name},
|
||||
)
|
||||
}
|
||||
|
||||
func (s *Module) Edit(ctx context.Context, r *server.ModuleEditRequest) (interface{}, error) {
|
||||
m := &types.Module{ID: r.ID, Name: r.Name}
|
||||
return s.module.With(ctx).Update(m)
|
||||
return s.module.With(ctx).Update(
|
||||
&types.Module{ID: r.ID, Name: r.Name},
|
||||
)
|
||||
}
|
||||
|
||||
func (*Module) ContentList(ctx context.Context, r *server.ModuleContentListRequest) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Module.content/edit")
|
||||
func (s *Module) ContentList(ctx context.Context, r *server.ModuleContentListRequest) (interface{}, error) {
|
||||
return s.content.With(ctx).Find()
|
||||
}
|
||||
|
||||
func (*Module) ContentRead(ctx context.Context, r *server.ModuleContentReadRequest) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Module.content/edit")
|
||||
func (s *Module) ContentRead(ctx context.Context, r *server.ModuleContentReadRequest) (interface{}, error) {
|
||||
return s.content.With(ctx).FindByID(r.ID)
|
||||
}
|
||||
|
||||
func (*Module) ContentCreate(ctx context.Context, r *server.ModuleContentCreateRequest) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Module.content/edit")
|
||||
func (s *Module) ContentCreate(ctx context.Context, r *server.ModuleContentCreateRequest) (interface{}, error) {
|
||||
item := &types.Content{
|
||||
ModuleID: r.Module,
|
||||
}
|
||||
fields := &item.Fields
|
||||
if err := fields.Scan(r.Payload); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s.content.With(ctx).Create(item)
|
||||
}
|
||||
|
||||
func (*Module) ContentEdit(ctx context.Context, r *server.ModuleContentEditRequest) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Module.content/edit")
|
||||
func (s *Module) ContentEdit(ctx context.Context, r *server.ModuleContentEditRequest) (interface{}, error) {
|
||||
item := &types.Content{
|
||||
ID: r.ID,
|
||||
ModuleID: r.Module,
|
||||
}
|
||||
fields := &item.Fields
|
||||
if err := fields.Scan(r.Payload); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s.content.With(ctx).Update(item)
|
||||
}
|
||||
|
||||
func (*Module) ContentDelete(ctx context.Context, r *server.ModuleContentDeleteRequest) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Module.content/delete")
|
||||
func (s *Module) ContentDelete(ctx context.Context, r *server.ModuleContentDeleteRequest) (interface{}, error) {
|
||||
return resputil.OK(), s.content.With(ctx).DeleteByID(r.ID)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/crusttech/crust/crm/repository"
|
||||
"github.com/crusttech/crust/crm/types"
|
||||
)
|
||||
|
||||
type (
|
||||
content struct {
|
||||
repository repository.Content
|
||||
}
|
||||
|
||||
ContentService interface {
|
||||
With(ctx context.Context) ContentService
|
||||
|
||||
FindByID(contentID uint64) (*types.Content, error)
|
||||
Find() ([]*types.Content, error)
|
||||
|
||||
Create(content *types.Content) (*types.Content, error)
|
||||
Update(content *types.Content) (*types.Content, error)
|
||||
DeleteByID(contentID uint64) error
|
||||
}
|
||||
)
|
||||
|
||||
func Content() ContentService {
|
||||
return &content{
|
||||
repository: repository.NewContent(context.Background()),
|
||||
}
|
||||
}
|
||||
|
||||
func (s *content) With(ctx context.Context) ContentService {
|
||||
return &content{
|
||||
repository: s.repository.With(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
func (s *content) FindByID(id uint64) (*types.Content, error) {
|
||||
return s.repository.FindByID(id)
|
||||
}
|
||||
|
||||
func (s *content) Find() ([]*types.Content, error) {
|
||||
return s.repository.Find()
|
||||
}
|
||||
|
||||
func (s *content) Create(mod *types.Content) (*types.Content, error) {
|
||||
return s.repository.Create(mod)
|
||||
}
|
||||
|
||||
func (s *content) Update(mod *types.Content) (*types.Content, error) {
|
||||
return s.repository.Update(mod)
|
||||
}
|
||||
|
||||
func (s *content) DeleteByID(id uint64) error {
|
||||
return s.repository.DeleteByID(id)
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package types
|
||||
|
||||
/* If you want to edit this file by hand, remove codegen/[project]/types/index.php */
|
||||
|
||||
type (
|
||||
// Fields - CRM input field definitions
|
||||
Field struct {
|
||||
|
||||
+4
-2
@@ -1,5 +1,7 @@
|
||||
package types
|
||||
|
||||
/* If you want to edit this file by hand, remove codegen/[project]/types/index.php */
|
||||
|
||||
import (
|
||||
"github.com/jmoiron/sqlx/types"
|
||||
)
|
||||
@@ -12,9 +14,9 @@ type (
|
||||
}
|
||||
|
||||
// Modules - CRM module definitions
|
||||
ModuleContentRow struct {
|
||||
Content struct {
|
||||
ID uint64 `db:"id"`
|
||||
ModuleID uint64 `db:"module_id"`
|
||||
Fields types.JSONText `db:"fields"`
|
||||
Fields types.JSONText `db:"json"`
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user