Skip to content

Commit

Permalink
[fix]new layout
Browse files Browse the repository at this point in the history
  • Loading branch information
piupuer committed Oct 8, 2023
1 parent f8fe7a2 commit 6bf3e77
Show file tree
Hide file tree
Showing 8 changed files with 126 additions and 100 deletions.
19 changes: 9 additions & 10 deletions cmd/cinch/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ require (
github.com/AlecAivazis/survey/v2 v2.3.6
github.com/fatih/color v1.15.0
github.com/go-cinch/common/plugins/gorm/filter v1.0.0
github.com/go-cinch/common/utils v1.0.3
github.com/go-cinch/common/utils v1.0.4
github.com/go-gorp/gorp/v3 v3.1.0
github.com/go-sql-driver/mysql v1.7.1
github.com/golang-module/carbon/v2 v2.2.3
Expand All @@ -18,7 +18,7 @@ require (
github.com/spf13/cobra v1.6.1
github.com/spf13/viper v1.16.0
golang.org/x/mod v0.11.0
golang.org/x/text v0.10.0
golang.org/x/text v0.11.0
gopkg.in/yaml.v3 v3.0.1
gorm.io/driver/clickhouse v0.5.1
gorm.io/driver/mysql v1.5.1
Expand All @@ -36,13 +36,13 @@ require (
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/go-cinch/common/log v1.0.3 // indirect
github.com/go-cinch/common/log v1.0.4 // indirect
github.com/go-faster/city v1.0.1 // indirect
github.com/go-faster/errors v0.6.1 // indirect
github.com/go-kratos/kratos/v2 v2.6.2 // indirect
github.com/go-kratos/kratos/v2 v2.7.0 // indirect
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
github.com/golang-sql/sqlexp v0.1.0 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/google/uuid v1.3.1 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.0.1 // indirect
Expand All @@ -64,7 +64,7 @@ require (
github.com/pelletier/go-toml/v2 v2.0.8 // indirect
github.com/pierrec/lz4/v4 v4.1.17 // indirect
github.com/r3labs/diff/v3 v3.0.1 // indirect
github.com/redis/go-redis/v9 v9.0.5 // indirect
github.com/redis/go-redis/v9 v9.2.1 // indirect
github.com/segmentio/asm v1.2.0 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
github.com/spf13/afero v1.9.5 // indirect
Expand All @@ -74,13 +74,12 @@ require (
github.com/subosito/gotenv v1.4.2 // indirect
github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect
github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
go.opentelemetry.io/otel v1.14.0 // indirect
go.opentelemetry.io/otel/trace v1.14.0 // indirect
go.opentelemetry.io/otel v1.16.0 // indirect
go.opentelemetry.io/otel/trace v1.16.0 // indirect
golang.org/x/crypto v0.9.0 // indirect
golang.org/x/sys v0.9.0 // indirect
golang.org/x/sys v0.10.0 // indirect
golang.org/x/term v0.8.0 // indirect
golang.org/x/tools v0.10.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gorm.io/datatypes v1.2.0 // indirect
gorm.io/hints v1.1.2 // indirect
Expand Down
52 changes: 28 additions & 24 deletions cmd/cinch/go.sum

Large diffs are not rendered by default.

45 changes: 21 additions & 24 deletions cmd/cinch/internal/gen/biz/biz.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,8 @@ import (
"github.com/go-cinch/common/constant"
"github.com/go-cinch/common/copierx"
"github.com/go-cinch/common/middleware/i18n"
"github.com/go-cinch/common/page"
"github.com/go-cinch/common/utils"
"%v/api/reason"
"%v/internal/conf"
"github.com/pkg/errors"
)
Expand Down Expand Up @@ -151,59 +149,58 @@ func (uc *%vUseCase) Create(ctx context.Context, item *%v) error {
func (uc *%vUseCase) Get(ctx context.Context, id uint64) (rp *%v, err error) {
rp = &%v{}
action := strings.Join([]string{"get", strconv.FormatUint(id, 10)}, "_")
str, ok := uc.cache.Get(ctx, action, func(ctx context.Context) (string, bool) {
str, err := uc.cache.Get(ctx, action, func(ctx context.Context) (string, error) {
return uc.get(ctx, action, id)
})
if ok {
utils.Json2Struct(&rp, str)
if rp.Id == constant.UI0 {
err = reason.ErrorNotFound("%%s %v.id: %%d", i18n.FromContext(ctx).T(RecordNotFound), id)
}
if err != nil {
return
}
if rp.Id == constant.UI0 {
err = ErrRecordNotFound(ctx)
return
}
err = reason.ErrorTooManyRequests(i18n.FromContext(ctx).T(TooManyRequests))
utils.Json2Struct(&rp, str)
return
}
func (uc *%vUseCase) get(ctx context.Context, action string, id uint64) (res string, ok bool) {
func (uc *%vUseCase) get(ctx context.Context, action string, id uint64) (res string, err error) {
// read data from db and write to cache
rp := &%v{}
item, err := uc.repo.Get(ctx, id)
notFound := errors.Is(err, reason.ErrorNotFound(i18n.FromContext(ctx).T(RecordNotFound)))
notFound := errors.Is(err, ErrRecordNotFound(ctx))
if err != nil && !notFound {
return
}
copierx.Copy(&rp, item)
res = utils.Struct2Json(rp)
uc.cache.Set(ctx, action, res, notFound)
ok = true
return
}
func (uc *%vUseCase) Find(ctx context.Context, condition *Find%v) (rp []%v) {
func (uc *%vUseCase) Find(ctx context.Context, condition *Find%v) (rp []%v, err error) {
// use md5 string as cache replay json str, key is short
action := strings.Join([]string{"find", utils.StructMd5(condition)}, "_")
str, ok := uc.cache.Get(ctx, action, func(ctx context.Context) (string, bool) {
str, err := uc.cache.Get(ctx, action, func(ctx context.Context) (string, error) {
return uc.find(ctx, action, condition)
})
if ok {
var cache Find%vCache
utils.Json2Struct(&cache, str)
condition.Page = cache.Page
rp = cache.List
if err != nil {
return
}
var cache Find%vCache
utils.Json2Struct(&cache, str)
condition.Page = cache.Page
rp = cache.List
return
}
func (uc *%vUseCase) find(ctx context.Context, action string, condition *Find%v) (res string, ok bool) {
func (uc *%vUseCase) find(ctx context.Context, action string, condition *Find%v) (res string, err error) {
// read data from db and write to cache
list := uc.repo.Find(ctx, condition)
var cache Find%vCache
cache.List = list
cache.Page = condition.Page
res = utils.Struct2Json(cache)
uc.cache.Set(ctx, action, res, len(list) == 0)
ok = true
return
}
Expand All @@ -225,7 +222,7 @@ func (uc *%vUseCase) Delete(ctx context.Context, ids ...uint64) error {
})
}
`,
module, module, camelApi, "`", "`",
module, camelApi, "`", "`",
"`", "`", camelApi, "`", "`",

"`", "`", camelApi, "`", "`",
Expand All @@ -235,12 +232,12 @@ func (uc *%vUseCase) Delete(ctx context.Context, ids ...uint64) error {
camelApi, camelApi, camelApi, camelApi, camelApi,

camelApi, camelApi, camelApi, camelApi, camelApi,
api, camelApi, camelApi, camelApi, camelApi,
camelApi, camelApi, camelApi, camelApi, camelApi,

camelApi, camelApi, camelApi, camelApi, camelApi,
camelApi, camelApi, camelApi, camelApi, camelApi,

camelApi, camelApi, camelApi, camelApi,
camelApi, camelApi, camelApi,
)

_, err = f.Write([]byte(content))
Expand Down
35 changes: 16 additions & 19 deletions cmd/cinch/internal/gen/data/data.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,8 @@ import (
"github.com/go-cinch/common/constant"
"github.com/go-cinch/common/copierx"
"github.com/go-cinch/common/middleware/i18n"
"github.com/go-cinch/common/log"
"github.com/go-cinch/common/utils"
"%v/api/reason"
"%v/internal/biz"
"%v/internal/data/model"
"%v/internal/data/query"
Expand All @@ -107,7 +106,7 @@ func New%vRepo(data *Data) biz.%vRepo {
func (ro %vRepo) Create(ctx context.Context, item *biz.%v) (err error) {
err = ro.NameExists(ctx, item.Name)
if err == nil {
err = reason.ErrorIllegalParameter("%%s %vname%v: %%s", i18n.FromContext(ctx).T(biz.DuplicateField), item.Name)
err = biz.ErrDuplicateField(ctx, "name", item.Name)
return
}
var m model.%v
Expand All @@ -125,7 +124,7 @@ func (ro %vRepo) Get(ctx context.Context, id uint64) (item *biz.%v, err error) {
db := p.WithContext(ctx)
m := db.GetByID(id)
if m.ID == constant.UI0 {
err = reason.ErrorNotFound("%%s %v.%vid%v: %%d", i18n.FromContext(ctx).T(biz.RecordNotFound), id)
err = biz.ErrRecordNotFound(ctx)
return
}
copierx.Copy(&item, m)
Expand Down Expand Up @@ -160,19 +159,19 @@ func (ro %vRepo) Update(ctx context.Context, item *biz.Update%v) (err error) {
db := p.WithContext(ctx)
m := db.GetByID(item.Id)
if m.ID == constant.UI0 {
err = reason.ErrorNotFound("%%s %v.%vid%v: %%d", i18n.FromContext(ctx).T(biz.RecordNotFound), item.Id)
err = biz.ErrRecordNotFound(ctx)
return
}
change := make(map[string]interface{})
utils.CompareDiff(m, item, &change)
if len(change) == 0 {
err = reason.ErrorIllegalParameter(i18n.FromContext(ctx).T(biz.DataNotChange))
err = biz.ErrDataNotChange(ctx)
return
}
if item.Name != nil && *item.Name != m.Name {
err = ro.NameExists(ctx, *item.Name)
if err == nil {
err = reason.ErrorIllegalParameter("%%s %vname%v: %%s", i18n.FromContext(ctx).T(biz.DuplicateField), *item.Name)
err = biz.ErrDuplicateField(ctx, "name", *item.Name)
return
}
}
Expand All @@ -198,26 +197,24 @@ func (ro %vRepo) NameExists(ctx context.Context, name string) (err error) {
for _, item := range arr {
res := db.GetByCol("name", item)
if res.ID == constant.UI0 {
err = reason.ErrorNotFound("%%s %v.%vname%v: %%s", i18n.FromContext(ctx).T(biz.RecordNotFound), item)
err = biz.ErrRecordNotFound(ctx)
log.
WithError(err).
Error("invalid %vname%v: %%s", name)
return
}
}
return
}
`,
module, module, module, module, api,
camelApi, camelApi, api, api, camelApi,
module, module, module, api, camelApi,
camelApi, api, api, camelApi, camelApi,

"`", "`", camelApi, camelApi, api,
camelApi, camelApi, camelApi, camelApi,
camelApi, api, camelApi, camelApi, camelApi,
api, camelApi, camelApi, camelApi, camelApi,

"`", "`", api, camelApi, camelApi,
camelApi, camelApi, camelApi, api, camelApi,

camelApi, camelApi, "`", "`", "`",
"`", api, camelApi, api, camelApi,

camelApi, "`", "`",
camelApi, api, camelApi, camelApi, api,
camelApi, api, camelApi, "`", "`",
)

_, err = f.Write([]byte(content))
Expand Down
66 changes: 45 additions & 21 deletions cmd/cinch/internal/gen/gorm/gorm.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,14 @@ type CmdParams struct {
Gen *CmdGenParams `yaml:"gen"`
}

type AssociationType struct {
TableName string
Relation string
FieldName string
RelationshipType string
ForeignKey string
}

// connectDB choose db type for connection to database
func connectDB(t DBType, dsn string) (*gorm.DB, error) {
if dsn == "" {
Expand Down Expand Up @@ -173,36 +181,47 @@ func genModels(cfg *CmdGenParams) (err error) {
g := newGenerator(cfg)
relations := make([]string, 0, len(*cfg.Association))
sources := make([]string, 0, len(*cfg.Association))
//var option gen.ModelOpt
associations := make(map[string][]gen.ModelOpt)
for _, item := range *cfg.Association {
arr := strings.Split(item, "|")
arr2 := strings.Split(arr[4], ":")
source := arr[0]
relation := arr[1]
fieldName := arr[2]
// get gorm tag
tag := field.NewGormTag()
// 创建并保存AssociationType
at := AssociationType{
TableName: arr[0],
Relation: arr[1],
FieldName: arr[2],
RelationshipType: arr[3],
ForeignKey: arr2[1],
}
tag := field.GormTag{}
tag.Set(arr2[0], arr2[1])
// save source and relation
if !utils.Contains[string](relations, relation) {
relations = append(relations, relation)
if !utils.Contains[string](relations, at.Relation) {
relations = append(relations, at.Relation)
}
if !utils.Contains[string](sources, source) {
sources = append(sources, source)
if !utils.Contains[string](sources, at.TableName) {
sources = append(sources, at.TableName)
}

relationNs := needAddStringTag(cfg, relation)
sourceNs := needAddStringTag(cfg, source)
relationNs := needAddStringTag(cfg, at.Relation)
sourceNs := needAddStringTag(cfg, at.TableName)
// generate model with opt
m := g.GenerateModel(
source,
gen.FieldRelate(
field.RelationshipType(arr[3]),
fieldName,
newGenerator(cfg).GenerateModel(relation, gen.FieldJSONTagWithNS(relationNs)),
&field.RelateConfig{GORMTag: tag},
),
gen.FieldJSONTagWithNS(sourceNs),
)
associations[at.TableName] = append(associations[at.TableName], gen.FieldRelate(
field.RelationshipType(at.RelationshipType),
at.FieldName,
newGenerator(cfg).GenerateModel(at.Relation, gen.FieldJSONTagWithNS(relationNs)),
&field.RelateConfig{
GORMTag: tag,
// json tag use camel case
JSONTag: utils.CamelCaseLowerFirst(at.Relation),
},
))
associations[at.TableName] = append(associations[at.TableName], gen.FieldJSONTagWithNS(sourceNs))
}

for tableName, queryStructMetas := range associations {
m := g.GenerateModel(tableName, queryStructMetas...)
models = append(models, m)
}

Expand Down Expand Up @@ -300,6 +319,9 @@ func newGenerator(cfg *CmdGenParams) *gen.Generator {
"datetime": func(columnType gorm.ColumnType) (dataType string) {
return "carbon.DateTime"
},
"date": func(columnType gorm.ColumnType) (dataType string) {
return "carbon.Date"
},
}

g.WithDataTypeMap(dataMap)
Expand All @@ -310,6 +332,8 @@ func newGenerator(cfg *CmdGenParams) *gen.Generator {
}
return utils.CamelCaseLowerFirst(columnName)
})
// support gorm soft delete
g.WithOpts(gen.FieldType("deleted_at", "gorm.DeletedAt"))
return g
}

Expand Down
5 changes: 4 additions & 1 deletion cmd/cinch/internal/gen/service/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,10 @@ func (s *%vService) Find%v(ctx context.Context, req *%v.Find%vRequest) (rp *%v.F
r.Page = page.Page{}
copierx.Copy(&r, req)
copierx.Copy(&r.Page, req.Page)
res := s.%v.Find(ctx, r)
res, err := s.%v.Find(ctx, r)
if err != nil {
return
}
copierx.Copy(&rp.Page, r.Page)
copierx.Copy(&rp.List, res)
return
Expand Down
2 changes: 2 additions & 0 deletions cmd/cinch/internal/project/new.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,10 @@ func (p *Project) customChange(to string) (err error) {
filepath.Join(to, "internal", "db", "migrations", "2022081510-game.sql"),
filepath.Join(to, "internal", "pkg", "task", "task.go"),
filepath.Join(to, "internal", "server", "grpc.go"),
filepath.Join(to, "internal", "server", "health.go"),
filepath.Join(to, "internal", "server", "http.go"),
filepath.Join(to, "internal", "service", "service.go"),
filepath.Join(to, "internal", "service", "health.go"),
}

for _, item := range contents {
Expand Down
2 changes: 1 addition & 1 deletion cmd/cinch/internal/version.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
package internal

const Release = "v1.0.1"
const Release = "v1.0.2"

0 comments on commit 6bf3e77

Please sign in to comment.