作者 yangfu

更新: godevp user repository query

@@ -8,6 +8,7 @@ import ( @@ -8,6 +8,7 @@ import (
8 "github.com/tiptok/godevp/pkg/application/clientVersion/query" 8 "github.com/tiptok/godevp/pkg/application/clientVersion/query"
9 "github.com/tiptok/godevp/pkg/application/factory" 9 "github.com/tiptok/godevp/pkg/application/factory"
10 "github.com/tiptok/godevp/pkg/domain" 10 "github.com/tiptok/godevp/pkg/domain"
  11 + "time"
11 ) 12 )
12 13
13 // 客户端版本服务 14 // 客户端版本服务
@@ -36,6 +37,7 @@ func (clientVersionService *ClientVersionService) CreateClientVersion(createClie @@ -36,6 +37,7 @@ func (clientVersionService *ClientVersionService) CreateClientVersion(createClie
36 Title: createClientVersionCommand.Title, 37 Title: createClientVersionCommand.Title,
37 Remark: createClientVersionCommand.Remark, 38 Remark: createClientVersionCommand.Remark,
38 ClientPackageInfo: createClientVersionCommand.ClientPackageInfo, 39 ClientPackageInfo: createClientVersionCommand.ClientPackageInfo,
  40 + CreateTime: time.Now(),
39 } 41 }
40 var clientVersionRepository domain.ClientVersionRepository 42 var clientVersionRepository domain.ClientVersionRepository
41 if value, err := factory.CreateClientVersionRepository(map[string]interface{}{ 43 if value, err := factory.CreateClientVersionRepository(map[string]interface{}{
@@ -12,7 +12,7 @@ type UpdateUsersCommand struct { @@ -12,7 +12,7 @@ type UpdateUsersCommand struct {
12 } 12 }
13 13
14 func (updateUsersCommand *UpdateUsersCommand) Valid(validation *validation.Validation) { 14 func (updateUsersCommand *UpdateUsersCommand) Valid(validation *validation.Validation) {
15 - validation.SetError("CustomValid", "未实现的自定义认证") 15 + //validation.SetError("CustomValid", "未实现的自定义认证")
16 } 16 }
17 17
18 func (updateUsersCommand *UpdateUsersCommand) ValidateCommand() error { 18 func (updateUsersCommand *UpdateUsersCommand) ValidateCommand() error {
@@ -2,6 +2,8 @@ package repository @@ -2,6 +2,8 @@ package repository
2 2
3 import ( 3 import (
4 "fmt" 4 "fmt"
  5 + "github.com/linmadan/egglib-go/persistent/pg/ormx"
  6 + "strings"
5 7
6 "github.com/go-pg/pg/v10" 8 "github.com/go-pg/pg/v10"
7 pgTransaction "github.com/linmadan/egglib-go/transaction/pg" 9 pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
@@ -10,6 +12,15 @@ import ( @@ -10,6 +12,15 @@ import (
10 "github.com/tiptok/godevp/pkg/infrastructure/pg/models" 12 "github.com/tiptok/godevp/pkg/infrastructure/pg/models"
11 ) 13 )
12 14
  15 +var (
  16 + usersFields = ormx.FieldNames((*models.Users)(nil))
  17 + usersRowString = strings.Join(usersFields, ",")
  18 + usersRowInsertFields = ormx.Remove(usersFields, "id")
  19 + usersRowInsertString = strings.Join(usersRowInsertFields, ",")
  20 + usersRowsInsertPlaceHolder = ormx.ParamPlaceHolder(len(usersRowInsertFields))
  21 + usersRowsUpdate = strings.Join(ormx.Remove(usersFields, "id"), "=?,") + "=?"
  22 +)
  23 +
13 type UsersRepository struct { 24 type UsersRepository struct {
14 transactionContext *pgTransaction.TransactionContext 25 transactionContext *pgTransaction.TransactionContext
15 } 26 }
@@ -26,14 +37,14 @@ func (repository *UsersRepository) Save(users *users.Users) (*users.Users, error @@ -26,14 +37,14 @@ func (repository *UsersRepository) Save(users *users.Users) (*users.Users, error
26 } 37 }
27 if _, err := tx.QueryOne( 38 if _, err := tx.QueryOne(
28 pg.Scan(&users.Id, &users.Name, &users.Phone, &users.Passwd, pg.Array(&users.Roles), &users.Status, &users.AdminType, &users.CreateTime, &users.UpdateTime), 39 pg.Scan(&users.Id, &users.Name, &users.Phone, &users.Passwd, pg.Array(&users.Roles), &users.Status, &users.AdminType, &users.CreateTime, &users.UpdateTime),
29 - "INSERT INTO users (name, phone, passwd, roles, status, admin_type, create_time, update_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING id, name, phone, passwd, roles, status, admin_type, create_time, update_time", 40 + "INSERT INTO users ("+usersRowInsertString+") VALUES ("+usersRowsInsertPlaceHolder+") RETURNING "+usersRowString,
30 users.Name, users.Phone, users.Passwd, pg.Array(users.Roles), users.Status, users.AdminType, users.CreateTime, users.UpdateTime); err != nil { 41 users.Name, users.Phone, users.Passwd, pg.Array(users.Roles), users.Status, users.AdminType, users.CreateTime, users.UpdateTime); err != nil {
31 return users, err 42 return users, err
32 } 43 }
33 } else { 44 } else {
34 if _, err := tx.QueryOne( 45 if _, err := tx.QueryOne(
35 pg.Scan(&users.Id, &users.Name, &users.Phone, &users.Passwd, pg.Array(&users.Roles), &users.Status, &users.AdminType, &users.CreateTime, &users.UpdateTime), 46 pg.Scan(&users.Id, &users.Name, &users.Phone, &users.Passwd, pg.Array(&users.Roles), &users.Status, &users.AdminType, &users.CreateTime, &users.UpdateTime),
36 - "UPDATE users SET name=?, phone=?, passwd=?, roles=?, status=?, admin_type=?, create_time=?, update_time=? WHERE id=? RETURNING id, name, phone, passwd, roles, status, admin_type, create_time, update_time", 47 + "UPDATE users SET "+usersRowsUpdate+" WHERE id=? RETURNING "+usersRowString,
37 users.Name, users.Phone, users.Passwd, pg.Array(users.Roles), users.Status, users.AdminType, users.CreateTime, users.UpdateTime, users.Identify()); err != nil { 48 users.Name, users.Phone, users.Passwd, pg.Array(users.Roles), users.Status, users.AdminType, users.CreateTime, users.UpdateTime, users.Identify()); err != nil {
38 return users, err 49 return users, err
39 } 50 }
@@ -52,12 +63,12 @@ func (repository *UsersRepository) Remove(users *users.Users) (*users.Users, err @@ -52,12 +63,12 @@ func (repository *UsersRepository) Remove(users *users.Users) (*users.Users, err
52 func (repository *UsersRepository) FindOne(queryOptions map[string]interface{}) (*users.Users, error) { 63 func (repository *UsersRepository) FindOne(queryOptions map[string]interface{}) (*users.Users, error) {
53 tx := repository.transactionContext.PgTx 64 tx := repository.transactionContext.PgTx
54 usersModel := new(models.Users) 65 usersModel := new(models.Users)
55 - query := tx.Model(usersModel) 66 + query := ormx.NewQuery(tx.Model(usersModel), queryOptions)
56 if usersId, ok := queryOptions["usersId"]; ok { 67 if usersId, ok := queryOptions["usersId"]; ok {
57 - query = query.Where("users.id = ?", usersId) 68 + query.Where("users.id = ?", usersId)
58 } 69 }
59 if phone, ok := queryOptions["phone"]; ok { 70 if phone, ok := queryOptions["phone"]; ok {
60 - query = query.Where("users.phone = ?", phone) 71 + query.Where("users.phone = ?", phone)
61 } 72 }
62 if err := query.First(); err != nil { 73 if err := query.First(); err != nil {
63 if err.Error() == "pg: no rows in result set" { 74 if err.Error() == "pg: no rows in result set" {
@@ -76,23 +87,8 @@ func (repository *UsersRepository) Find(queryOptions map[string]interface{}) (in @@ -76,23 +87,8 @@ func (repository *UsersRepository) Find(queryOptions map[string]interface{}) (in
76 tx := repository.transactionContext.PgTx 87 tx := repository.transactionContext.PgTx
77 var usersModels []*models.Users 88 var usersModels []*models.Users
78 userss := make([]*users.Users, 0) 89 userss := make([]*users.Users, 0)
79 - query := tx.Model(&usersModels)  
80 - if offset, ok := queryOptions["offset"]; ok {  
81 - offset := offset.(int)  
82 - if offset > -1 {  
83 - query = query.Offset(offset)  
84 - }  
85 - } else {  
86 - query = query.Offset(0)  
87 - }  
88 - if limit, ok := queryOptions["limit"]; ok {  
89 - limit := limit.(int)  
90 - if limit > -1 {  
91 - query = query.Limit(limit)  
92 - }  
93 - } else {  
94 - query = query.Limit(20)  
95 - } 90 + query := ormx.NewQuery(tx.Model(&usersModels), queryOptions)
  91 + query.SetLimit()
96 if count, err := query.Order("id DESC").SelectAndCount(); err != nil { 92 if count, err := query.Order("id DESC").SelectAndCount(); err != nil {
97 return 0, userss, err 93 return 0, userss, err
98 } else { 94 } else {
@@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
2 schema: 2 schema:
3 - graph/*.graphqls 3 - graph/*.graphqls
4 - graph/access/*.graphqls 4 - graph/access/*.graphqls
  5 + - graph/schema/*.graphqls
5 6
6 # Where should the generated server code go? 7 # Where should the generated server code go?
7 exec: 8 exec:
@@ -19,13 +20,14 @@ model: @@ -19,13 +20,14 @@ model:
19 package: model 20 package: model
20 21
21 # Where should the resolver implementations go? 22 # Where should the resolver implementations go?
  23 +#resolver:
  24 +# layout: follow-schema
  25 +# dir: graph
  26 +# package: graph
22 resolver: 27 resolver:
23 layout: follow-schema 28 layout: follow-schema
24 - dir: graph  
25 - package: graph  
26 -#resolver:  
27 -# filename: resolver.go  
28 -# type: Resolver 29 + dir: graph/resolvers
  30 + package: resolvers
29 31
30 # Optional: turn on use `gqlgen:"fieldName"` tags in your models 32 # Optional: turn on use `gqlgen:"fieldName"` tags in your models
31 # struct_tag: json 33 # struct_tag: json
  1 +package resolvers
  2 +
  3 +// This file will be automatically regenerated based on the schema, any resolver implementations
  4 +// will be copied through when generating and any unknown code will be moved to the end.
  5 +
  6 +import (
  7 + "context"
  8 + "fmt"
  9 +
  10 + "github.com/tiptok/godevp/pkg/port/graphql/graph/generated"
  11 + "github.com/tiptok/godevp/pkg/port/graphql/graph/model"
  12 +)
  13 +
  14 +func (r *accessResolver) User(ctx context.Context, obj *model.Access) (*model.Users, error) {
  15 + panic(fmt.Errorf("not implemented"))
  16 +}
  17 +
  18 +func (r *mutationResolver) CreateMenu(ctx context.Context, input *model.MenuAccessInput) ([]*model.Access, error) {
  19 + panic(fmt.Errorf("not implemented"))
  20 +}
  21 +
  22 +func (r *queryResolver) Menu(ctx context.Context, input *model.MenuAccessInput) ([]*model.Access, error) {
  23 + panic(fmt.Errorf("not implemented"))
  24 +}
  25 +
  26 +// Access returns generated.AccessResolver implementation.
  27 +func (r *Resolver) Access() generated.AccessResolver { return &accessResolver{r} }
  28 +
  29 +type accessResolver struct{ *Resolver }
  1 +package resolvers
  2 +
  3 +// This file will not be regenerated automatically.
  4 +//
  5 +// It serves as dependency injection for your app, add any dependencies you require here.
  6 +
  7 +type Resolver struct{}
  1 +package resolvers
  2 +
  3 +// This file will be automatically regenerated based on the schema, any resolver implementations
  4 +// will be copied through when generating and any unknown code will be moved to the end.
  5 +
  6 +import (
  7 + "context"
  8 + "fmt"
  9 +
  10 + "github.com/tiptok/godevp/pkg/domain"
  11 + "github.com/tiptok/godevp/pkg/port/graphql/graph/generated"
  12 + "github.com/tiptok/godevp/pkg/port/graphql/graph/libs"
  13 + "github.com/tiptok/godevp/pkg/port/graphql/graph/model"
  14 +)
  15 +
  16 +func (r *clientVersionResolver) CreateTime(ctx context.Context, obj *domain.ClientVersion) (*libs.Datetime, error) {
  17 + panic(fmt.Errorf("not implemented"))
  18 +}
  19 +
  20 +func (r *mutationResolver) CreateUsers(ctx context.Context, input model.CreateUsersInput) (*model.Users, error) {
  21 + panic(fmt.Errorf("not implemented"))
  22 +}
  23 +
  24 +func (r *mutationResolver) RemoveUsers(ctx context.Context, input model.RemoveUsersInput) (*model.Users, error) {
  25 + panic(fmt.Errorf("not implemented"))
  26 +}
  27 +
  28 +func (r *mutationResolver) UpdateUsers(ctx context.Context, input model.UpdateUsersInput) (*model.Users, error) {
  29 + panic(fmt.Errorf("not implemented"))
  30 +}
  31 +
  32 +func (r *queryResolver) User(ctx context.Context, input model.GetUsersInput) (*model.Users, error) {
  33 + panic(fmt.Errorf("not implemented"))
  34 +}
  35 +
  36 +func (r *queryResolver) Users(ctx context.Context, input model.ListUsersInput) ([]*model.Users, error) {
  37 + panic(fmt.Errorf("not implemented"))
  38 +}
  39 +
  40 +func (r *queryResolver) Menus(ctx context.Context, input *model.MenuAccessInput) ([]*model.Access, error) {
  41 + panic(fmt.Errorf("not implemented"))
  42 +}
  43 +
  44 +func (r *queryResolver) ClientVersion(ctx context.Context, id *int) (*domain.ClientVersion, error) {
  45 + panic(fmt.Errorf("not implemented"))
  46 +}
  47 +
  48 +func (r *roleResolver) Access(ctx context.Context, obj *model.Role) ([]*model.Access, error) {
  49 + panic(fmt.Errorf("not implemented"))
  50 +}
  51 +
  52 +func (r *usersResolver) Roles(ctx context.Context, obj *model.Users) ([]*model.Role, error) {
  53 + panic(fmt.Errorf("not implemented"))
  54 +}
  55 +
  56 +// ClientVersion returns generated.ClientVersionResolver implementation.
  57 +func (r *Resolver) ClientVersion() generated.ClientVersionResolver { return &clientVersionResolver{r} }
  58 +
  59 +// Mutation returns generated.MutationResolver implementation.
  60 +func (r *Resolver) Mutation() generated.MutationResolver { return &mutationResolver{r} }
  61 +
  62 +// Query returns generated.QueryResolver implementation.
  63 +func (r *Resolver) Query() generated.QueryResolver { return &queryResolver{r} }
  64 +
  65 +// Role returns generated.RoleResolver implementation.
  66 +func (r *Resolver) Role() generated.RoleResolver { return &roleResolver{r} }
  67 +
  68 +// Users returns generated.UsersResolver implementation.
  69 +func (r *Resolver) Users() generated.UsersResolver { return &usersResolver{r} }
  70 +
  71 +type clientVersionResolver struct{ *Resolver }
  72 +type mutationResolver struct{ *Resolver }
  73 +type queryResolver struct{ *Resolver }
  74 +type roleResolver struct{ *Resolver }
  75 +type usersResolver struct{ *Resolver }