Rename content to record on crm/repository
This commit is contained in:
committed by
Denis Arh
parent
40d8683ba1
commit
94215b0db0
@@ -98,7 +98,7 @@ func (r *module) Fields(mod *types.Module) ([]*types.ModuleField, error) {
|
||||
return fields, r.db().Select(&fields, "select * from crm_module_form where module_id=? order by place asc", mod.ID)
|
||||
}
|
||||
|
||||
// FieldNames returns a slice of field names, used for ordering content row columns
|
||||
// FieldNames returns a slice of field names, used for ordering record row columns
|
||||
func (r *module) FieldNames(mod *types.Module) ([]string, error) {
|
||||
if fields, err := r.Fields(mod); err != nil {
|
||||
return []string{}, err
|
||||
|
||||
@@ -14,8 +14,8 @@ import (
|
||||
)
|
||||
|
||||
type (
|
||||
ContentRepository interface {
|
||||
With(ctx context.Context, db *factory.DB) ContentRepository
|
||||
RecordRepository interface {
|
||||
With(ctx context.Context, db *factory.DB) RecordRepository
|
||||
|
||||
FindByID(id uint64) (*types.Record, error)
|
||||
|
||||
@@ -38,28 +38,28 @@ type (
|
||||
}
|
||||
|
||||
FindResponse struct {
|
||||
Meta FindResponseMeta `json:"meta"`
|
||||
Contents []*types.Record `json:"contents"`
|
||||
Meta FindResponseMeta `json:"meta"`
|
||||
Records []*types.Record `json:"contents"`
|
||||
}
|
||||
|
||||
content struct {
|
||||
record struct {
|
||||
*repository
|
||||
}
|
||||
)
|
||||
|
||||
func Content(ctx context.Context, db *factory.DB) ContentRepository {
|
||||
return (&content{}).With(ctx, db)
|
||||
func Record(ctx context.Context, db *factory.DB) RecordRepository {
|
||||
return (&record{}).With(ctx, db)
|
||||
}
|
||||
|
||||
func (r *content) With(ctx context.Context, db *factory.DB) ContentRepository {
|
||||
return &content{
|
||||
func (r *record) With(ctx context.Context, db *factory.DB) RecordRepository {
|
||||
return &record{
|
||||
repository: r.repository.With(ctx, db),
|
||||
}
|
||||
}
|
||||
|
||||
// @todo: update to accepted DeletedAt column semantics from SAM
|
||||
|
||||
func (r *content) FindByID(id uint64) (*types.Record, error) {
|
||||
func (r *record) FindByID(id uint64) (*types.Record, error) {
|
||||
mod := &types.Record{}
|
||||
if err := r.db().Get(mod, "SELECT * FROM crm_record WHERE id=? and deleted_at IS NULL", id); err != nil {
|
||||
return nil, err
|
||||
@@ -67,8 +67,8 @@ func (r *content) FindByID(id uint64) (*types.Record, error) {
|
||||
return mod, nil
|
||||
}
|
||||
|
||||
func (r *content) Report(moduleID uint64, params *types.RecordReport) (results interface{}, err error) {
|
||||
crb := NewContentReportBuilder(moduleID, params)
|
||||
func (r *record) Report(moduleID uint64, params *types.RecordReport) (results interface{}, err error) {
|
||||
crb := NewRecordReportBuilder(moduleID, params)
|
||||
|
||||
var result = make([]map[string]interface{}, 0)
|
||||
|
||||
@@ -85,7 +85,7 @@ func (r *content) Report(moduleID uint64, params *types.RecordReport) (results i
|
||||
}
|
||||
}
|
||||
|
||||
func (r *content) Find(moduleID uint64, query string, page int, perPage int, sort string) (*FindResponse, error) {
|
||||
func (r *record) Find(moduleID uint64, query string, page int, perPage int, sort string) (*FindResponse, error) {
|
||||
if page < 0 {
|
||||
page = 0
|
||||
}
|
||||
@@ -105,7 +105,7 @@ func (r *content) Find(moduleID uint64, query string, page int, perPage int, sor
|
||||
Query: query,
|
||||
Sort: sort,
|
||||
},
|
||||
Contents: make([]*types.Record, 0),
|
||||
Records: make([]*types.Record, 0),
|
||||
}
|
||||
|
||||
query = "%" + query + "%"
|
||||
@@ -200,14 +200,14 @@ func (r *content) Find(moduleID uint64, query string, page int, perPage int, sor
|
||||
if err := r.db().Get(&response.Meta.Count, sqlCount+" "+sqlWhere, moduleID, query); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := r.db().Select(&response.Contents, sqlSelect+" "+sqlWhere+" "+sqlOrder+" "+sqlLimit, moduleID, query); err != nil {
|
||||
if err := r.db().Select(&response.Records, sqlSelect+" "+sqlWhere+" "+sqlOrder+" "+sqlLimit, moduleID, query); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
default:
|
||||
if err := r.db().Get(&response.Meta.Count, sqlCount+" "+sqlWhere, moduleID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := r.db().Select(&response.Contents, sqlSelect+" "+sqlWhere+" "+sqlOrder+" "+sqlLimit, moduleID); err != nil {
|
||||
if err := r.db().Select(&response.Records, sqlSelect+" "+sqlWhere+" "+sqlOrder+" "+sqlLimit, moduleID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
@@ -215,7 +215,7 @@ func (r *content) Find(moduleID uint64, query string, page int, perPage int, sor
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (r *content) Create(mod *types.Record) (*types.Record, error) {
|
||||
func (r *record) Create(mod *types.Record) (*types.Record, error) {
|
||||
mod.ID = factory.Sonyflake.NextID()
|
||||
mod.CreatedAt = time.Now()
|
||||
mod.UserID = Identity(r.Context())
|
||||
@@ -249,13 +249,13 @@ func (r *content) Create(mod *types.Record) (*types.Record, error) {
|
||||
return mod, nil
|
||||
}
|
||||
|
||||
func (r *content) Update(mod *types.Record) (*types.Record, error) {
|
||||
func (r *record) Update(mod *types.Record) (*types.Record, error) {
|
||||
now := time.Now()
|
||||
mod.UpdatedAt = &now
|
||||
|
||||
fields := make([]types.RecordColumn, 0)
|
||||
if err := json.Unmarshal(mod.Fields, &fields); err != nil {
|
||||
return nil, errors.Wrap(err, "Error when saving content, no content")
|
||||
return nil, errors.Wrap(err, "Error when saving record, no content")
|
||||
}
|
||||
|
||||
r.db().Exec("delete from crm_record_links where record_id=?", mod.ID)
|
||||
@@ -279,16 +279,16 @@ func (r *content) Update(mod *types.Record) (*types.Record, error) {
|
||||
return mod, r.db().Replace("crm_record", mod)
|
||||
}
|
||||
|
||||
func (r *content) DeleteByID(id uint64) error {
|
||||
func (r *record) DeleteByID(id uint64) error {
|
||||
_, err := r.db().Exec("update crm_record set deleted_at=? where id=?", time.Now(), id)
|
||||
return err
|
||||
}
|
||||
|
||||
func (r *content) Fields(content *types.Record) ([]*types.RecordColumn, error) {
|
||||
func (r *record) Fields(record *types.Record) ([]*types.RecordColumn, error) {
|
||||
result := make([]*types.RecordColumn, 0)
|
||||
module := Module(r.ctx, r.db())
|
||||
|
||||
mod, err := module.FindByID(content.ModuleID)
|
||||
mod, err := module.FindByID(record.ModuleID)
|
||||
if err != nil {
|
||||
return result, err
|
||||
}
|
||||
@@ -303,7 +303,7 @@ func (r *content) Fields(content *types.Record) ([]*types.RecordColumn, error) {
|
||||
|
||||
order := "FIELD(column_name" + strings.Repeat(",?", len(fieldNames)) + ")"
|
||||
args := []interface{}{
|
||||
content.ID,
|
||||
record.ID,
|
||||
}
|
||||
for _, v := range fieldNames {
|
||||
args = append(args, v)
|
||||
@@ -14,7 +14,7 @@ import (
|
||||
)
|
||||
|
||||
type (
|
||||
contentReportBuilder struct {
|
||||
recordReportBuilder struct {
|
||||
jsonField string
|
||||
|
||||
moduleID uint64
|
||||
@@ -23,18 +23,18 @@ type (
|
||||
)
|
||||
|
||||
var (
|
||||
contentReportExprMatch = regexp.MustCompile(`^\s*(\w+)\((.+)\)\s*$`)
|
||||
recordReportExprMatch = regexp.MustCompile(`^\s*(\w+)\((.+)\)\s*$`)
|
||||
)
|
||||
|
||||
func NewContentReportBuilder(moduleID uint64, params *types.RecordReport) *contentReportBuilder {
|
||||
return &contentReportBuilder{
|
||||
func NewRecordReportBuilder(moduleID uint64, params *types.RecordReport) *recordReportBuilder {
|
||||
return &recordReportBuilder{
|
||||
moduleID: moduleID,
|
||||
params: params,
|
||||
jsonField: `JSON_UNQUOTE(JSON_EXTRACT(json, REPLACE(JSON_UNQUOTE(JSON_SEARCH(json, 'one', ?)), '.name', '.value')))`,
|
||||
}
|
||||
}
|
||||
|
||||
func (b contentReportBuilder) field(name string) squirrel.Sqlizer {
|
||||
func (b recordReportBuilder) field(name string) squirrel.Sqlizer {
|
||||
switch name {
|
||||
case "created_at", "updated_at":
|
||||
return squirrel.Expr(name)
|
||||
@@ -43,7 +43,7 @@ func (b contentReportBuilder) field(name string) squirrel.Sqlizer {
|
||||
}
|
||||
}
|
||||
|
||||
func (b contentReportBuilder) alias(col squirrel.Sqlizer, alias, fallback string) (squirrel.Sqlizer, string) {
|
||||
func (b recordReportBuilder) alias(col squirrel.Sqlizer, alias, fallback string) (squirrel.Sqlizer, string) {
|
||||
if alias != "" {
|
||||
return squirrel.Alias(col, alias), alias
|
||||
}
|
||||
@@ -51,7 +51,7 @@ func (b contentReportBuilder) alias(col squirrel.Sqlizer, alias, fallback string
|
||||
return squirrel.Alias(col, fallback), fallback
|
||||
}
|
||||
|
||||
func (b contentReportBuilder) wrapInModifiers(col squirrel.Sqlizer, mm ...string) squirrel.Sqlizer {
|
||||
func (b recordReportBuilder) wrapInModifiers(col squirrel.Sqlizer, mm ...string) squirrel.Sqlizer {
|
||||
for _, m := range mm {
|
||||
switch strings.ToUpper(m) {
|
||||
case "WEEKDAY":
|
||||
@@ -72,8 +72,8 @@ func (b contentReportBuilder) wrapInModifiers(col squirrel.Sqlizer, mm ...string
|
||||
return col
|
||||
}
|
||||
|
||||
func (b contentReportBuilder) parseExpression(exp string) squirrel.Sqlizer {
|
||||
res := contentReportExprMatch.FindStringSubmatch(exp)
|
||||
func (b recordReportBuilder) parseExpression(exp string) squirrel.Sqlizer {
|
||||
res := recordReportExprMatch.FindStringSubmatch(exp)
|
||||
if len(res) > 0 {
|
||||
aggrFuncName := strings.ToUpper(res[1])
|
||||
aggrFuncArgs := b.parseExpression(res[2])
|
||||
@@ -92,7 +92,7 @@ func (b contentReportBuilder) parseExpression(exp string) squirrel.Sqlizer {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *contentReportBuilder) Build() (sql string, args []interface{}, err error) {
|
||||
func (b *recordReportBuilder) Build() (sql string, args []interface{}, err error) {
|
||||
report := squirrel.
|
||||
Select().
|
||||
Column(squirrel.Alias(squirrel.Expr("COUNT(*)"), "count")).
|
||||
@@ -129,7 +129,7 @@ func (b *contentReportBuilder) Build() (sql string, args []interface{}, err erro
|
||||
return report.ToSql()
|
||||
}
|
||||
|
||||
func (b contentReportBuilder) Cast(row sqlx.ColScanner) map[string]interface{} {
|
||||
func (b recordReportBuilder) Cast(row sqlx.ColScanner) map[string]interface{} {
|
||||
out := map[string]interface{}{}
|
||||
sqlx.MapScan(row, out)
|
||||
for k, v := range out {
|
||||
@@ -4,8 +4,8 @@ import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestContentReportBuilder_parseExpression(t *testing.T) {
|
||||
b := contentReportBuilder{jsonField: "JSONFIELD"}
|
||||
func TestRecordReportBuilder_parseExpression(t *testing.T) {
|
||||
b := recordReportBuilder{jsonField: "JSONFIELD"}
|
||||
|
||||
tc := []struct {
|
||||
exp string
|
||||
@@ -17,7 +17,7 @@ type (
|
||||
db *factory.DB
|
||||
ctx context.Context
|
||||
|
||||
repository repository.ContentRepository
|
||||
repository repository.RecordRepository
|
||||
pageRepo repository.PageRepository
|
||||
|
||||
userSvc systemService.UserService
|
||||
@@ -50,7 +50,7 @@ func (s *record) With(ctx context.Context) RecordService {
|
||||
return &record{
|
||||
db: db,
|
||||
ctx: ctx,
|
||||
repository: repository.Content(ctx, db),
|
||||
repository: repository.Record(ctx, db),
|
||||
pageRepo: repository.Page(ctx, db),
|
||||
userSvc: s.userSvc.With(ctx),
|
||||
}
|
||||
@@ -73,7 +73,7 @@ func (s *record) Find(moduleID uint64, query string, page int, perPage int, sort
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := s.preloadAll(response.Contents, "user", "fields"); err != nil {
|
||||
if err := s.preloadAll(response.Records, "user", "fields"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return response, nil
|
||||
|
||||
@@ -184,40 +184,40 @@ func TestRecord(t *testing.T) {
|
||||
{
|
||||
mr, err := repository.Find(module.ID, "", 0, 20, "id desc")
|
||||
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, len(mr.Records) == 2, "Expected two record, got %d", len(mr.Records))
|
||||
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 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")
|
||||
assert(t, mr.Records[0].ModuleID == m1.ModuleID, "Expected record module to match, %d != %d", m1.ModuleID, mr.Records[0].ModuleID)
|
||||
assert(t, mr.Records[0].ID > mr.Records[1].ID, "Expected order to be descending")
|
||||
}
|
||||
|
||||
// fetch all records
|
||||
{
|
||||
mr, err := repository.Find(module.ID, "", 0, 20, "name asc, email desc")
|
||||
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, len(mr.Records) == 2, "Expected two record, got %d", len(mr.Records))
|
||||
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 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")
|
||||
assert(t, mr.Records[0].ModuleID == m1.ModuleID, "Expected record module to match, %d != %d", m1.ModuleID, mr.Records[0].ModuleID)
|
||||
assert(t, mr.Records[0].ID > mr.Records[1].ID, "Expected order to be ascending")
|
||||
}
|
||||
|
||||
// fetch all records
|
||||
{
|
||||
mr, err := repository.Find(module.ID, "", 0, 20, "created_at desc")
|
||||
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, len(mr.Records) == 2, "Expected two record, got %d", len(mr.Records))
|
||||
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 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")
|
||||
assert(t, mr.Records[0].ModuleID == m1.ModuleID, "Expected record module to match, %d != %d", m1.ModuleID, mr.Records[0].ModuleID)
|
||||
assert(t, mr.Records[0].ID > mr.Records[1].ID, "Expected order to be ascending")
|
||||
}
|
||||
|
||||
// fetch all records by query
|
||||
{
|
||||
mr, err := repository.Find(module.ID, "petric", 0, 20, "id desc")
|
||||
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, len(mr.Records) == 1, "Expected one record, got %d", len(mr.Records))
|
||||
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)
|
||||
@@ -229,7 +229,7 @@ func TestRecord(t *testing.T) {
|
||||
{
|
||||
mr, err := repository.Find(module.ID, "niall", 0, 20, "id asc")
|
||||
assert(t, err == nil, "Error when retrieving records: %+v", err)
|
||||
assert(t, len(mr.Contents) == 0, "Expected no records, got %d", len(mr.Contents))
|
||||
assert(t, len(mr.Records) == 0, "Expected no records, got %d", len(mr.Records))
|
||||
}
|
||||
|
||||
// delete record
|
||||
@@ -245,7 +245,7 @@ func TestRecord(t *testing.T) {
|
||||
{
|
||||
mr, err := repository.Find(module.ID, "", 0, 20, "")
|
||||
assert(t, err == nil, "Error when retrieving records: %+v", err)
|
||||
assert(t, len(mr.Contents) == 0, "Expected no record, got %d", len(mr.Contents))
|
||||
assert(t, len(mr.Records) == 0, "Expected no record, got %d", len(mr.Records))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user