Rename content to record on crm/service
This commit is contained in:
committed by
Denis Arh
parent
fffcf7fa08
commit
40d8683ba1
@@ -1,46 +0,0 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/crusttech/crust/crm/types"
|
||||
)
|
||||
|
||||
func (r *content) preloadAll(contents []*types.Record, fields ...string) error {
|
||||
for _, content := range contents {
|
||||
if err := r.preload(content, fields...); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *content) preload(content *types.Record, fields ...string) (err error) {
|
||||
for _, field := range fields {
|
||||
switch field {
|
||||
case "fields":
|
||||
fields, err := r.Fields(content)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
json, err := json.Marshal(fields)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := (&content.Fields).Scan(json); err != nil {
|
||||
return err
|
||||
}
|
||||
case "page":
|
||||
if content.Page, err = r.pageRepo.FindByModuleID(content.ModuleID); err != nil {
|
||||
return
|
||||
}
|
||||
case "user":
|
||||
if content.UserID > 0 {
|
||||
if content.User, err = r.userSvc.FindByID(content.UserID); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -38,7 +38,7 @@ func TestModule(t *testing.T) {
|
||||
{
|
||||
{
|
||||
m, err := repository.Update(module)
|
||||
assert(t, m == nil, "Expected empty return for ivalid update, got %#v", m)
|
||||
assert(t, m == nil, "Expected empty return for invalid update, got %#v", m)
|
||||
assert(t, err != nil, "Expected error when updating invalid content")
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ import (
|
||||
)
|
||||
|
||||
type (
|
||||
content struct {
|
||||
record struct {
|
||||
db *factory.DB
|
||||
ctx context.Context
|
||||
|
||||
@@ -23,31 +23,31 @@ type (
|
||||
userSvc systemService.UserService
|
||||
}
|
||||
|
||||
ContentService interface {
|
||||
With(ctx context.Context) ContentService
|
||||
RecordService interface {
|
||||
With(ctx context.Context) RecordService
|
||||
|
||||
FindByID(contentID uint64) (*types.Record, error)
|
||||
FindByID(recordID uint64) (*types.Record, error)
|
||||
|
||||
Report(moduleID uint64, params *types.RecordReport) (interface{}, error)
|
||||
Find(moduleID uint64, query string, page int, perPage int, sort string) (*repository.FindResponse, error)
|
||||
|
||||
Create(content *types.Record) (*types.Record, error)
|
||||
Update(content *types.Record) (*types.Record, error)
|
||||
DeleteByID(contentID uint64) error
|
||||
Create(record *types.Record) (*types.Record, error)
|
||||
Update(record *types.Record) (*types.Record, error)
|
||||
DeleteByID(recordID uint64) error
|
||||
|
||||
Fields(mod *types.Record) ([]*types.RecordColumn, error)
|
||||
}
|
||||
)
|
||||
|
||||
func Content() ContentService {
|
||||
return (&content{
|
||||
func Record() RecordService {
|
||||
return (&record{
|
||||
userSvc: systemService.DefaultUser,
|
||||
}).With(context.Background())
|
||||
}
|
||||
|
||||
func (s *content) With(ctx context.Context) ContentService {
|
||||
func (s *record) With(ctx context.Context) RecordService {
|
||||
db := repository.DB(ctx)
|
||||
return &content{
|
||||
return &record{
|
||||
db: db,
|
||||
ctx: ctx,
|
||||
repository: repository.Content(ctx, db),
|
||||
@@ -56,7 +56,7 @@ func (s *content) With(ctx context.Context) ContentService {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *content) FindByID(id uint64) (*types.Record, error) {
|
||||
func (s *record) FindByID(id uint64) (*types.Record, error) {
|
||||
response, err := s.repository.FindByID(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -64,11 +64,11 @@ func (s *content) FindByID(id uint64) (*types.Record, error) {
|
||||
return response, s.preload(response, "page", "user", "fields")
|
||||
}
|
||||
|
||||
func (s *content) Report(moduleID uint64, params *types.RecordReport) (interface{}, error) {
|
||||
func (s *record) Report(moduleID uint64, params *types.RecordReport) (interface{}, error) {
|
||||
return s.repository.Report(moduleID, params)
|
||||
}
|
||||
|
||||
func (s *content) Find(moduleID uint64, query string, page int, perPage int, sort string) (*repository.FindResponse, error) {
|
||||
func (s *record) Find(moduleID uint64, query string, page int, perPage int, sort string) (*repository.FindResponse, error) {
|
||||
response, err := s.repository.Find(moduleID, query, page, perPage, sort)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -79,7 +79,7 @@ func (s *content) Find(moduleID uint64, query string, page int, perPage int, sor
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (s *content) Create(mod *types.Record) (*types.Record, error) {
|
||||
func (s *record) Create(mod *types.Record) (*types.Record, error) {
|
||||
response, err := s.repository.Create(mod)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -87,14 +87,14 @@ func (s *content) Create(mod *types.Record) (*types.Record, error) {
|
||||
return response, s.preload(response, "user", "fields")
|
||||
}
|
||||
|
||||
func (s *content) Update(content *types.Record) (c *types.Record, err error) {
|
||||
func (s *record) Update(record *types.Record) (c *types.Record, err error) {
|
||||
validate := func() error {
|
||||
if content.ID == 0 {
|
||||
return errors.New("Error updating content: invalid ID")
|
||||
} else if c, err = s.repository.FindByID(content.ID); err != nil {
|
||||
return errors.Wrap(err, "Error while loading content for update")
|
||||
if record.ID == 0 {
|
||||
return errors.New("Error updating record: invalid ID")
|
||||
} else if c, err = s.repository.FindByID(record.ID); err != nil {
|
||||
return errors.Wrap(err, "Error while loading record for update")
|
||||
} else {
|
||||
content.CreatedAt = c.CreatedAt
|
||||
record.CreatedAt = c.CreatedAt
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -105,15 +105,15 @@ func (s *content) Update(content *types.Record) (c *types.Record, err error) {
|
||||
}
|
||||
|
||||
return c, s.db.Transaction(func() (err error) {
|
||||
c, err = s.repository.Update(content)
|
||||
c, err = s.repository.Update(record)
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
func (s *content) Fields(mod *types.Record) ([]*types.RecordColumn, error) {
|
||||
func (s *record) Fields(mod *types.Record) ([]*types.RecordColumn, error) {
|
||||
return s.repository.Fields(mod)
|
||||
}
|
||||
|
||||
func (s *content) DeleteByID(id uint64) error {
|
||||
func (s *record) DeleteByID(id uint64) error {
|
||||
return s.repository.DeleteByID(id)
|
||||
}
|
||||
@@ -14,7 +14,7 @@ import (
|
||||
systemTypes "github.com/crusttech/crust/system/types"
|
||||
)
|
||||
|
||||
func TestContent(t *testing.T) {
|
||||
func TestRecord(t *testing.T) {
|
||||
user := &systemTypes.User{
|
||||
ID: 1337,
|
||||
Username: "TestUser",
|
||||
@@ -31,7 +31,7 @@ func TestContent(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := auth.SetIdentityToContext(context.Background(), auth.NewIdentity(user.Identity()))
|
||||
repository := Content().With(ctx)
|
||||
repository := Record().With(ctx)
|
||||
|
||||
module := &types.Module{
|
||||
Name: "Test",
|
||||
@@ -81,10 +81,10 @@ func TestContent(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
content1 := &types.Record{
|
||||
record1 := &types.Record{
|
||||
ModuleID: module.ID,
|
||||
}
|
||||
(&content1.Fields).Scan(func() []byte {
|
||||
(&record1.Fields).Scan(func() []byte {
|
||||
b, _ := json.Marshal(columns)
|
||||
return b
|
||||
}())
|
||||
@@ -108,46 +108,46 @@ func TestContent(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
content2 := &types.Record{
|
||||
record2 := &types.Record{
|
||||
ModuleID: module.ID,
|
||||
}
|
||||
(&content2.Fields).Scan(func() []byte {
|
||||
(&record2.Fields).Scan(func() []byte {
|
||||
b, _ := json.Marshal(columns2)
|
||||
return b
|
||||
}())
|
||||
|
||||
// now work with content
|
||||
// now work with records
|
||||
{
|
||||
{
|
||||
m, err := repository.Update(content1)
|
||||
m, err := repository.Update(record1)
|
||||
assert(t, m == nil, "Expected empty return for invalid update, got %#v", m)
|
||||
assert(t, err != nil, "Expected error when updating invalid content")
|
||||
assert(t, err != nil, "Expected error when updating invalid record")
|
||||
}
|
||||
|
||||
// create content
|
||||
m1, err := repository.Create(content1)
|
||||
assert(t, err == nil, "Error when creating content: %+v", err)
|
||||
// create record
|
||||
m1, err := repository.Create(record1)
|
||||
assert(t, err == nil, "Error when creating record: %+v", err)
|
||||
assert(t, m1.ID > 0, "Expected auto generated ID")
|
||||
assert(t, m1.User != nil, "Expected non-nil user when creating content")
|
||||
assert(t, m1.User != nil, "Expected non-nil user when creating record")
|
||||
assert(t, m1.User.Username == "TestUser", "Expected 'TestUser' as username, got '%s'", m1.User.Username)
|
||||
|
||||
// create content
|
||||
m2, err := repository.Create(content2)
|
||||
assert(t, err == nil, "Error when creating content: %+v", err)
|
||||
// create record
|
||||
m2, err := repository.Create(record2)
|
||||
assert(t, err == nil, "Error when creating record: %+v", err)
|
||||
assert(t, m2.ID > 0, "Expected auto generated ID")
|
||||
assert(t, m2.User != nil, "Expected non-nil user when creating content")
|
||||
assert(t, m2.User != nil, "Expected non-nil user when creating record")
|
||||
assert(t, m2.User.Username == "TestUser", "Expected 'TestUser' as username, got '%s'", m2.User.Username)
|
||||
|
||||
// fetch created content
|
||||
// fetch created record
|
||||
{
|
||||
ms, err := repository.FindByID(m1.ID)
|
||||
assert(t, err == nil, "Error when retrieving content by id: %+v", err)
|
||||
assert(t, err == nil, "Error when retrieving record by id: %+v", err)
|
||||
assert(t, ms.ID == m1.ID, "Expected ID from database to match, %d != %d", m1.ID, ms.ID)
|
||||
assert(t, ms.ModuleID == m1.ModuleID, "Expected Module ID from database to match, %d != %d", m1.ModuleID, ms.ModuleID)
|
||||
|
||||
{
|
||||
fields, err := repository.Fields(ms)
|
||||
// fields := make([]testContentRow, 0)
|
||||
// fields := make([]testRecordRow, 0)
|
||||
// err = json.Unmarshal(ms.Fields, &fields)
|
||||
assert(t, err == nil, "%+v", errors.Wrap(err, "Didn't expect error when unmarshalling"))
|
||||
assert(t, len(fields) == len(columns), "Expected different field count: %d != %d", 2, len(fields))
|
||||
@@ -166,58 +166,58 @@ func TestContent(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// update created content
|
||||
// update created record
|
||||
{
|
||||
_, err := repository.Update(m1)
|
||||
assert(t, err == nil, "Error when updating content, %+v", err)
|
||||
assert(t, err == nil, "Error when updating record, %+v", err)
|
||||
}
|
||||
|
||||
// re-fetch content
|
||||
// re-fetch record
|
||||
{
|
||||
ms, err := repository.FindByID(m1.ID)
|
||||
assert(t, err == nil, "Error when retrieving content by id: %+v", err)
|
||||
assert(t, err == nil, "Error when retrieving record by id: %+v", err)
|
||||
assert(t, ms.ID == m1.ID, "Expected ID from database to match, %d != %d", m1.ID, ms.ID)
|
||||
assert(t, ms.ModuleID == m1.ModuleID, "Expected ID from database to match, %d != %d", m1.ModuleID, ms.ModuleID)
|
||||
}
|
||||
|
||||
// fetch all contents
|
||||
// fetch all records
|
||||
{
|
||||
mr, err := repository.Find(module.ID, "", 0, 20, "id desc")
|
||||
assert(t, err == nil, "Error when retrieving contents: %+v", err)
|
||||
assert(t, len(mr.Contents) == 2, "Expected two content, got %d", len(mr.Contents))
|
||||
assert(t, err == nil, "Error when retrieving records: %+v", err)
|
||||
assert(t, len(mr.Contents) == 2, "Expected two record, got %d", len(mr.Contents))
|
||||
assert(t, mr.Meta.Count == 2, "Expected Meta.Count == 2, got %d", mr.Meta.Count)
|
||||
assert(t, mr.Meta.Sort == "id desc", "Expected Meta.Sort == id desc, got '%s'", mr.Meta.Sort)
|
||||
assert(t, mr.Contents[0].ModuleID == m1.ModuleID, "Expected content module to match, %d != %d", m1.ModuleID, mr.Contents[0].ModuleID)
|
||||
assert(t, mr.Contents[0].ModuleID == m1.ModuleID, "Expected record module to match, %d != %d", m1.ModuleID, mr.Contents[0].ModuleID)
|
||||
assert(t, mr.Contents[0].ID > mr.Contents[1].ID, "Expected order to be descending")
|
||||
}
|
||||
|
||||
// fetch all contents
|
||||
// fetch all records
|
||||
{
|
||||
mr, err := repository.Find(module.ID, "", 0, 20, "name asc, email desc")
|
||||
assert(t, err == nil, "Error when retrieving contents: %+v", err)
|
||||
assert(t, len(mr.Contents) == 2, "Expected two content, got %d", len(mr.Contents))
|
||||
assert(t, err == nil, "Error when retrieving records: %+v", err)
|
||||
assert(t, len(mr.Contents) == 2, "Expected two record, got %d", len(mr.Contents))
|
||||
assert(t, mr.Meta.Count == 2, "Expected Meta.Count == 2, got %d", mr.Meta.Count)
|
||||
assert(t, mr.Meta.Sort == "name asc, email desc", "Expected Meta.Sort == 'name asc, email desc' '%s'", mr.Meta.Sort)
|
||||
assert(t, mr.Contents[0].ModuleID == m1.ModuleID, "Expected content module to match, %d != %d", m1.ModuleID, mr.Contents[0].ModuleID)
|
||||
assert(t, mr.Contents[0].ModuleID == m1.ModuleID, "Expected record module to match, %d != %d", m1.ModuleID, mr.Contents[0].ModuleID)
|
||||
assert(t, mr.Contents[0].ID > mr.Contents[1].ID, "Expected order to be ascending")
|
||||
}
|
||||
|
||||
// fetch all contents
|
||||
// fetch all records
|
||||
{
|
||||
mr, err := repository.Find(module.ID, "", 0, 20, "created_at desc")
|
||||
assert(t, err == nil, "Error when retrieving contents: %+v", err)
|
||||
assert(t, len(mr.Contents) == 2, "Expected two content, got %d", len(mr.Contents))
|
||||
assert(t, err == nil, "Error when retrieving records: %+v", err)
|
||||
assert(t, len(mr.Contents) == 2, "Expected two record, got %d", len(mr.Contents))
|
||||
assert(t, mr.Meta.Count == 2, "Expected Meta.Count == 2, got %d", mr.Meta.Count)
|
||||
assert(t, mr.Meta.Sort == "created_at desc", "Expected Meta.Sort == created_at desc, got '%s'", mr.Meta.Sort)
|
||||
assert(t, mr.Contents[0].ModuleID == m1.ModuleID, "Expected content module to match, %d != %d", m1.ModuleID, mr.Contents[0].ModuleID)
|
||||
assert(t, mr.Contents[0].ModuleID == m1.ModuleID, "Expected record module to match, %d != %d", m1.ModuleID, mr.Contents[0].ModuleID)
|
||||
assert(t, mr.Contents[0].ID > mr.Contents[1].ID, "Expected order to be ascending")
|
||||
}
|
||||
|
||||
// fetch all contents by query
|
||||
// fetch all records by query
|
||||
{
|
||||
mr, err := repository.Find(module.ID, "petric", 0, 20, "id desc")
|
||||
assert(t, err == nil, "Error when retrieving contents: %+v", err)
|
||||
assert(t, len(mr.Contents) == 1, "Expected one content, got %d", len(mr.Contents))
|
||||
assert(t, err == nil, "Error when retrieving records: %+v", err)
|
||||
assert(t, len(mr.Contents) == 1, "Expected one record, got %d", len(mr.Contents))
|
||||
assert(t, mr.Meta.Count == 1, "Expected Meta.Count == 1, got %d", mr.Meta.Count)
|
||||
assert(t, mr.Meta.Page == 0, "Expected Meta.Page == 0, got %d", mr.Meta.Page)
|
||||
assert(t, mr.Meta.PerPage == 20, "Expected Meta.PerPage == 20, got %d", mr.Meta.PerPage)
|
||||
@@ -225,27 +225,27 @@ func TestContent(t *testing.T) {
|
||||
assert(t, mr.Meta.Sort == "id desc", "Expected Meta.Sort == id desc, got '%s'", mr.Meta.Sort)
|
||||
}
|
||||
|
||||
// fetch all contents by query
|
||||
// fetch all records by query
|
||||
{
|
||||
mr, err := repository.Find(module.ID, "niall", 0, 20, "id asc")
|
||||
assert(t, err == nil, "Error when retrieving contents: %+v", err)
|
||||
assert(t, len(mr.Contents) == 0, "Expected no contents, got %d", len(mr.Contents))
|
||||
assert(t, err == nil, "Error when retrieving records: %+v", err)
|
||||
assert(t, len(mr.Contents) == 0, "Expected no records, got %d", len(mr.Contents))
|
||||
}
|
||||
|
||||
// delete content
|
||||
// delete record
|
||||
{
|
||||
err := repository.DeleteByID(m1.ID)
|
||||
assert(t, err == nil, "Error when retrieving content by id: %+v", err)
|
||||
assert(t, err == nil, "Error when retrieving record by id: %+v", err)
|
||||
|
||||
err = repository.DeleteByID(m2.ID)
|
||||
assert(t, err == nil, "Error when retrieving content by id: %+v", err)
|
||||
assert(t, err == nil, "Error when retrieving record by id: %+v", err)
|
||||
}
|
||||
|
||||
// fetch all contents
|
||||
// fetch all records
|
||||
{
|
||||
mr, err := repository.Find(module.ID, "", 0, 20, "")
|
||||
assert(t, err == nil, "Error when retrieving contents: %+v", err)
|
||||
assert(t, len(mr.Contents) == 0, "Expected no content, got %d", len(mr.Contents))
|
||||
assert(t, err == nil, "Error when retrieving records: %+v", err)
|
||||
assert(t, len(mr.Contents) == 0, "Expected no record, got %d", len(mr.Contents))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/crusttech/crust/crm/types"
|
||||
)
|
||||
|
||||
func (r *record) preloadAll(records []*types.Record, fields ...string) error {
|
||||
for _, record := range records {
|
||||
if err := r.preload(record, fields...); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *record) preload(record *types.Record, fields ...string) (err error) {
|
||||
for _, field := range fields {
|
||||
switch field {
|
||||
case "fields":
|
||||
fields, err := r.Fields(record)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
json, err := json.Marshal(fields)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := (&record.Fields).Scan(json); err != nil {
|
||||
return err
|
||||
}
|
||||
case "page":
|
||||
if record.Page, err = r.pageRepo.FindByModuleID(record.ModuleID); err != nil {
|
||||
return
|
||||
}
|
||||
case "user":
|
||||
if record.UserID > 0 {
|
||||
if record.User, err = r.userSvc.FindByID(record.UserID); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
|
||||
var (
|
||||
o sync.Once
|
||||
DefaultContent ContentService
|
||||
DefaultRecord RecordService
|
||||
DefaultField FieldService
|
||||
DefaultModule ModuleService
|
||||
DefaultChart ChartService
|
||||
@@ -17,7 +17,7 @@ var (
|
||||
|
||||
func Init() {
|
||||
o.Do(func() {
|
||||
DefaultContent = Content()
|
||||
DefaultRecord = Record()
|
||||
DefaultField = Field()
|
||||
DefaultModule = Module()
|
||||
DefaultPage = Page()
|
||||
|
||||
Reference in New Issue
Block a user