3
0

add(crm): implement content service/repository

This commit is contained in:
Tit Petric
2018-08-15 18:04:34 +02:00
parent 4f64d77b6a
commit 1a8b9dc6ba
7 changed files with 175 additions and 51 deletions
+76
View File
@@ -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
}
}
-31
View File
@@ -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
View File
@@ -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
View File
@@ -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)
}
+56
View File
@@ -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)
}
+2
View File
@@ -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
View File
@@ -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"`
}
)