3
0

Rename content to record on crm/repository

This commit is contained in:
Mitja Zivkovic
2018-12-23 18:00:33 +01:00
committed by Denis Arh
parent 40d8683ba1
commit 94215b0db0
6 changed files with 52 additions and 52 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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 {

View File

@@ -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

View File

@@ -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

View File

@@ -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))
}
}
}