正在显示
17 个修改的文件
包含
145 行增加
和
169 行删除
| @@ -14,7 +14,7 @@ type ConvertUserStatusCommand struct { | @@ -14,7 +14,7 @@ type ConvertUserStatusCommand struct { | ||
| 14 | } | 14 | } |
| 15 | 15 | ||
| 16 | func (convertUserStatusCommand *ConvertUserStatusCommand) Valid(validation *validation.Validation) { | 16 | func (convertUserStatusCommand *ConvertUserStatusCommand) Valid(validation *validation.Validation) { |
| 17 | - validation.SetError("CustomValid", "未实现的自定义认证") | 17 | + //validation.SetError("CustomValid", "未实现的自定义认证") |
| 18 | } | 18 | } |
| 19 | 19 | ||
| 20 | func (convertUserStatusCommand *ConvertUserStatusCommand) ValidateCommand() error { | 20 | func (convertUserStatusCommand *ConvertUserStatusCommand) ValidateCommand() error { |
| @@ -29,7 +29,7 @@ type CreateUserCommand struct { | @@ -29,7 +29,7 @@ type CreateUserCommand struct { | ||
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | func (createUserCommand *CreateUserCommand) Valid(validation *validation.Validation) { | 31 | func (createUserCommand *CreateUserCommand) Valid(validation *validation.Validation) { |
| 32 | - validation.SetError("CustomValid", "未实现的自定义认证") | 32 | + //validation.SetError("CustomValid", "未实现的自定义认证") |
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | func (createUserCommand *CreateUserCommand) ValidateCommand() error { | 35 | func (createUserCommand *CreateUserCommand) ValidateCommand() error { |
| @@ -12,7 +12,7 @@ type RemoveUserCommand struct { | @@ -12,7 +12,7 @@ type RemoveUserCommand struct { | ||
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | func (removeUserCommand *RemoveUserCommand) Valid(validation *validation.Validation) { | 14 | func (removeUserCommand *RemoveUserCommand) Valid(validation *validation.Validation) { |
| 15 | - validation.SetError("CustomValid", "未实现的自定义认证") | 15 | + //validation.SetError("CustomValid", "未实现的自定义认证") |
| 16 | } | 16 | } |
| 17 | 17 | ||
| 18 | func (removeUserCommand *RemoveUserCommand) ValidateCommand() error { | 18 | func (removeUserCommand *RemoveUserCommand) ValidateCommand() error { |
| @@ -14,7 +14,7 @@ type SetPermissionCommand struct { | @@ -14,7 +14,7 @@ type SetPermissionCommand struct { | ||
| 14 | } | 14 | } |
| 15 | 15 | ||
| 16 | func (setPermissionCommand *SetPermissionCommand) Valid(validation *validation.Validation) { | 16 | func (setPermissionCommand *SetPermissionCommand) Valid(validation *validation.Validation) { |
| 17 | - validation.SetError("CustomValid", "未实现的自定义认证") | 17 | + //validation.SetError("CustomValid", "未实现的自定义认证") |
| 18 | } | 18 | } |
| 19 | 19 | ||
| 20 | func (setPermissionCommand *SetPermissionCommand) ValidateCommand() error { | 20 | func (setPermissionCommand *SetPermissionCommand) ValidateCommand() error { |
| @@ -2,10 +2,8 @@ package command | @@ -2,10 +2,8 @@ package command | ||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "fmt" | 4 | "fmt" |
| 5 | - "gitlab.fjmaimaimai.com/mmm-go-pp/partner01/pkg/domain" | ||
| 6 | - "time" | ||
| 7 | - | ||
| 8 | "github.com/beego/beego/v2/core/validation" | 5 | "github.com/beego/beego/v2/core/validation" |
| 6 | + "gitlab.fjmaimaimai.com/mmm-go-pp/partner01/pkg/domain" | ||
| 9 | ) | 7 | ) |
| 10 | 8 | ||
| 11 | type UpdateUserCommand struct { | 9 | type UpdateUserCommand struct { |
| @@ -16,39 +14,9 @@ type UpdateUserCommand struct { | @@ -16,39 +14,9 @@ type UpdateUserCommand struct { | ||
| 16 | // 管理员类型 1.超级管理员 10:企业管理员 100:普通用户 | 14 | // 管理员类型 1.超级管理员 10:企业管理员 100:普通用户 |
| 17 | AdminType int `json:"adminType,omitempty"` | 15 | AdminType int `json:"adminType,omitempty"` |
| 18 | // 状态 1正常 2禁用 | 16 | // 状态 1正常 2禁用 |
| 19 | - Status int64 `json:"status" valid:"Required"` | 17 | + Status int64 `json:"status,omitempty"` |
| 20 | // 是否是公司负责人 | 18 | // 是否是公司负责人 |
| 21 | - IsPrincipal bool `json:"isPrincipal" valid:"Required"` | ||
| 22 | - // 统一用户id | ||
| 23 | - Uid int64 `json:"uid" valid:"Required"` | ||
| 24 | - // 用户账号 | ||
| 25 | - UserAccount string `json:"userAccount" valid:"Required"` | ||
| 26 | - // 用户头像URL | ||
| 27 | - UserAvatarUrl string `json:"userAvatarUrl" valid:"Required"` | ||
| 28 | - // 用户名称 | ||
| 29 | - UserName string `json:"userName" valid:"Required"` | ||
| 30 | - // 邮件地址 | ||
| 31 | - Email string `json:"email" valid:"Required"` | ||
| 32 | - // 性别 | ||
| 33 | - Gender int `json:"gender" valid:"Required"` | ||
| 34 | - // 入职时间 | ||
| 35 | - EntryTime time.Time `json:"entryTime" valid:"Required"` | ||
| 36 | - // 分机 | ||
| 37 | - Extension string `json:"extension" valid:"Required"` | ||
| 38 | - // 工作地 | ||
| 39 | - Workplace string `json:"workplace" valid:"Required"` | ||
| 40 | - // 私人电话 | ||
| 41 | - PrivateNumber string `json:"privateNumber" valid:"Required"` | ||
| 42 | - // 工号 | ||
| 43 | - JobNumber string `json:"jobNumber" valid:"Required"` | ||
| 44 | - // 合伙人账号 | ||
| 45 | - PartnerAccount string `json:"partnerAccount" valid:"Required"` | ||
| 46 | - // 合伙人姓名 | ||
| 47 | - PartnerName string `json:"partnerName" valid:"Required"` | ||
| 48 | - // 区域名称 eg:华南地区 | ||
| 49 | - RegionName string `json:"regionName,omitempty"` | ||
| 50 | - // 合伙时间 | ||
| 51 | - CooperateTime time.Time `json:"cooperateTime" valid:"Required"` | 19 | + UserInfo *domain.UserInfo `json:"userInfo,omitempty"` |
| 52 | // 业务员 | 20 | // 业务员 |
| 53 | Salesmans []*domain.Salesman `json:"salesmans,omitempty"` | 21 | Salesmans []*domain.Salesman `json:"salesmans,omitempty"` |
| 54 | // 合伙人类型 | 22 | // 合伙人类型 |
| @@ -58,7 +26,7 @@ type UpdateUserCommand struct { | @@ -58,7 +26,7 @@ type UpdateUserCommand struct { | ||
| 58 | } | 26 | } |
| 59 | 27 | ||
| 60 | func (updateUserCommand *UpdateUserCommand) Valid(validation *validation.Validation) { | 28 | func (updateUserCommand *UpdateUserCommand) Valid(validation *validation.Validation) { |
| 61 | - validation.SetError("CustomValid", "未实现的自定义认证") | 29 | + //validation.SetError("CustomValid", "未实现的自定义认证") |
| 62 | } | 30 | } |
| 63 | 31 | ||
| 64 | func (updateUserCommand *UpdateUserCommand) ValidateCommand() error { | 32 | func (updateUserCommand *UpdateUserCommand) ValidateCommand() error { |
| @@ -12,7 +12,7 @@ type GetUserQuery struct { | @@ -12,7 +12,7 @@ type GetUserQuery struct { | ||
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | func (getUserQuery *GetUserQuery) Valid(validation *validation.Validation) { | 14 | func (getUserQuery *GetUserQuery) Valid(validation *validation.Validation) { |
| 15 | - validation.SetError("CustomValid", "未实现的自定义认证") | 15 | + //validation.SetError("CustomValid", "未实现的自定义认证") |
| 16 | } | 16 | } |
| 17 | 17 | ||
| 18 | func (getUserQuery *GetUserQuery) ValidateQuery() error { | 18 | func (getUserQuery *GetUserQuery) ValidateQuery() error { |
| @@ -8,13 +8,13 @@ import ( | @@ -8,13 +8,13 @@ import ( | ||
| 8 | 8 | ||
| 9 | type ListUserQuery struct { | 9 | type ListUserQuery struct { |
| 10 | // 查询偏离量 | 10 | // 查询偏离量 |
| 11 | - Offset int `json:"offset" valid:"Required"` | 11 | + Offset int `json:"offset"` |
| 12 | // 查询限制 | 12 | // 查询限制 |
| 13 | Limit int `json:"limit" valid:"Required"` | 13 | Limit int `json:"limit" valid:"Required"` |
| 14 | } | 14 | } |
| 15 | 15 | ||
| 16 | func (listUserQuery *ListUserQuery) Valid(validation *validation.Validation) { | 16 | func (listUserQuery *ListUserQuery) Valid(validation *validation.Validation) { |
| 17 | - validation.SetError("CustomValid", "未实现的自定义认证") | 17 | + //validation.SetError("CustomValid", "未实现的自定义认证") |
| 18 | } | 18 | } |
| 19 | 19 | ||
| 20 | func (listUserQuery *ListUserQuery) ValidateQuery() error { | 20 | func (listUserQuery *ListUserQuery) ValidateQuery() error { |
| @@ -30,6 +30,29 @@ func (userService *UserService) ConvertUserStatus(convertUserStatusCommand *comm | @@ -30,6 +30,29 @@ func (userService *UserService) ConvertUserStatus(convertUserStatusCommand *comm | ||
| 30 | defer func() { | 30 | defer func() { |
| 31 | transactionContext.RollbackTransaction() | 31 | transactionContext.RollbackTransaction() |
| 32 | }() | 32 | }() |
| 33 | + | ||
| 34 | + var userRepository domain.UserRepository | ||
| 35 | + if value, err := factory.CreateUserRepository(map[string]interface{}{ | ||
| 36 | + "transactionContext": transactionContext, | ||
| 37 | + }); err != nil { | ||
| 38 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 39 | + } else { | ||
| 40 | + userRepository = value | ||
| 41 | + } | ||
| 42 | + user, err := userRepository.FindOne(map[string]interface{}{"userId": convertUserStatusCommand.UserId}) | ||
| 43 | + if err != nil { | ||
| 44 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 45 | + } | ||
| 46 | + if user == nil { | ||
| 47 | + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(convertUserStatusCommand.UserId))) | ||
| 48 | + } | ||
| 49 | + if err := user.CovertUserStatus(convertUserStatusCommand.Status); err != nil { | ||
| 50 | + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) | ||
| 51 | + } | ||
| 52 | + if _, err := userRepository.Save(user); err != nil { | ||
| 53 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 54 | + } | ||
| 55 | + | ||
| 33 | if err := transactionContext.CommitTransaction(); err != nil { | 56 | if err := transactionContext.CommitTransaction(); err != nil { |
| 34 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 57 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| 35 | } | 58 | } |
| @@ -60,8 +83,8 @@ func (userService *UserService) CreateUser(createUserCommand *command.CreateUser | @@ -60,8 +83,8 @@ func (userService *UserService) CreateUser(createUserCommand *command.CreateUser | ||
| 60 | PartnerInfo: createUserCommand.PartnerInfo, | 83 | PartnerInfo: createUserCommand.PartnerInfo, |
| 61 | AccessPartners: createUserCommand.AccessPartners, | 84 | AccessPartners: createUserCommand.AccessPartners, |
| 62 | } | 85 | } |
| 63 | - var addUserService service.AddUserService | ||
| 64 | - if value, err := factory.CreateAddUserService(map[string]interface{}{ | 86 | + var addUserService service.UserCreateService |
| 87 | + if value, err := factory.CreateUserCreateService(map[string]interface{}{ | ||
| 65 | "transactionContext": transactionContext, | 88 | "transactionContext": transactionContext, |
| 66 | }); err != nil { | 89 | }); err != nil { |
| 67 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 90 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| @@ -69,7 +92,7 @@ func (userService *UserService) CreateUser(createUserCommand *command.CreateUser | @@ -69,7 +92,7 @@ func (userService *UserService) CreateUser(createUserCommand *command.CreateUser | ||
| 69 | addUserService = value | 92 | addUserService = value |
| 70 | } | 93 | } |
| 71 | 94 | ||
| 72 | - if user, err := addUserService.AddUser(newUser); err != nil { | 95 | + if user, err := addUserService.CreateUser(0, newUser); err != nil { |
| 73 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 96 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 74 | } else { | 97 | } else { |
| 75 | if err := transactionContext.CommitTransaction(); err != nil { | 98 | if err := transactionContext.CommitTransaction(); err != nil { |
| @@ -207,6 +230,29 @@ func (userService *UserService) SetPermission(setPermissionCommand *command.SetP | @@ -207,6 +230,29 @@ func (userService *UserService) SetPermission(setPermissionCommand *command.SetP | ||
| 207 | defer func() { | 230 | defer func() { |
| 208 | transactionContext.RollbackTransaction() | 231 | transactionContext.RollbackTransaction() |
| 209 | }() | 232 | }() |
| 233 | + | ||
| 234 | + var userRepository domain.UserRepository | ||
| 235 | + if value, err := factory.CreateUserRepository(map[string]interface{}{ | ||
| 236 | + "transactionContext": transactionContext, | ||
| 237 | + }); err != nil { | ||
| 238 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 239 | + } else { | ||
| 240 | + userRepository = value | ||
| 241 | + } | ||
| 242 | + user, err := userRepository.FindOne(map[string]interface{}{"userId": setPermissionCommand.UserId}) | ||
| 243 | + if err != nil { | ||
| 244 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 245 | + } | ||
| 246 | + if user == nil { | ||
| 247 | + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(setPermissionCommand.UserId))) | ||
| 248 | + } | ||
| 249 | + if err := user.SetPermission(setPermissionCommand.Permissons); err != nil { | ||
| 250 | + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) | ||
| 251 | + } | ||
| 252 | + if _, err := userRepository.Save(user); err != nil { | ||
| 253 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 254 | + } | ||
| 255 | + | ||
| 210 | if err := transactionContext.CommitTransaction(); err != nil { | 256 | if err := transactionContext.CommitTransaction(); err != nil { |
| 211 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 257 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| 212 | } | 258 | } |
| @@ -68,6 +68,19 @@ func (user *User) Identify() interface{} { | @@ -68,6 +68,19 @@ func (user *User) Identify() interface{} { | ||
| 68 | return user.UserId | 68 | return user.UserId |
| 69 | } | 69 | } |
| 70 | 70 | ||
| 71 | +func (user *User) SetPermission(permissions []int) error { | ||
| 72 | + user.Permissions = permissions | ||
| 73 | + return nil | ||
| 74 | +} | ||
| 75 | + | ||
| 76 | +func (user *User) CovertUserStatus(status int64) error { | ||
| 77 | + if !(status == StatusEnable || status == StatusDisable) { | ||
| 78 | + return fmt.Errorf("status options value (%v,%v) , invalid %v", StatusEnable, StatusDisable, status) | ||
| 79 | + } | ||
| 80 | + user.Status = status | ||
| 81 | + return nil | ||
| 82 | +} | ||
| 83 | + | ||
| 71 | func (user *User) Update(data map[string]interface{}) error { | 84 | func (user *User) Update(data map[string]interface{}) error { |
| 72 | if userType, ok := data["userType"]; ok { | 85 | if userType, ok := data["userType"]; ok { |
| 73 | user.UserType = userType.(int) | 86 | user.UserType = userType.(int) |
| @@ -75,44 +88,8 @@ func (user *User) Update(data map[string]interface{}) error { | @@ -75,44 +88,8 @@ func (user *User) Update(data map[string]interface{}) error { | ||
| 75 | if permissions, ok := data["permissions"]; ok { | 88 | if permissions, ok := data["permissions"]; ok { |
| 76 | user.Permissions = permissions.([]int) | 89 | user.Permissions = permissions.([]int) |
| 77 | } | 90 | } |
| 78 | - if companyId, ok := data["companyId"]; ok { | ||
| 79 | - user.CompanyId = companyId.(int64) | ||
| 80 | - } | ||
| 81 | - if isPrincipal, ok := data["isPrincipal"]; ok { | ||
| 82 | - user.UserInfo.IsPrincipal = isPrincipal.(bool) | ||
| 83 | - } | ||
| 84 | - if uid, ok := data["uid"]; ok { | ||
| 85 | - user.UserInfo.Uid = uid.(int64) | ||
| 86 | - } | ||
| 87 | - if userAccount, ok := data["userAccount"]; ok { | ||
| 88 | - user.UserInfo.UserAccount = userAccount.(string) | ||
| 89 | - } | ||
| 90 | - if userAvatarUrl, ok := data["userAvatarUrl"]; ok { | ||
| 91 | - user.UserInfo.UserAvatarUrl = userAvatarUrl.(string) | ||
| 92 | - } | ||
| 93 | - if userName, ok := data["userName"]; ok { | ||
| 94 | - user.UserInfo.UserName = userName.(string) | ||
| 95 | - } | ||
| 96 | - if email, ok := data["email"]; ok { | ||
| 97 | - user.UserInfo.Email = email.(string) | ||
| 98 | - } | ||
| 99 | - if gender, ok := data["gender"]; ok { | ||
| 100 | - user.UserInfo.Gender = gender.(int) | ||
| 101 | - } | ||
| 102 | - if entryTime, ok := data["entryTime"]; ok { | ||
| 103 | - user.UserInfo.EntryTime = entryTime.(time.Time) | ||
| 104 | - } | ||
| 105 | - if extension, ok := data["extension"]; ok { | ||
| 106 | - user.UserInfo.Extension = extension.(string) | ||
| 107 | - } | ||
| 108 | - if workplace, ok := data["workplace"]; ok { | ||
| 109 | - user.UserInfo.Workplace = workplace.(string) | ||
| 110 | - } | ||
| 111 | - if privateNumber, ok := data["privateNumber"]; ok { | ||
| 112 | - user.UserInfo.PrivateNumber = privateNumber.(string) | ||
| 113 | - } | ||
| 114 | - if jobNumber, ok := data["jobNumber"]; ok { | ||
| 115 | - user.UserInfo.JobNumber = jobNumber.(string) | 91 | + if userInfo, ok := data["userInfo"]; ok { |
| 92 | + user.UserInfo = userInfo.(*UserInfo) | ||
| 116 | } | 93 | } |
| 117 | if partnerAccount, ok := data["partnerAccount"]; ok { | 94 | if partnerAccount, ok := data["partnerAccount"]; ok { |
| 118 | user.PartnerInfo.PartnerAccount = partnerAccount.(string) | 95 | user.PartnerInfo.PartnerAccount = partnerAccount.(string) |
| @@ -126,6 +103,7 @@ func (user *User) Update(data map[string]interface{}) error { | @@ -126,6 +103,7 @@ func (user *User) Update(data map[string]interface{}) error { | ||
| 126 | if status, ok := data["status"]; ok { | 103 | if status, ok := data["status"]; ok { |
| 127 | user.PartnerInfo.Status = status.(int64) | 104 | user.PartnerInfo.Status = status.(int64) |
| 128 | } | 105 | } |
| 106 | + user.UpdateAt = time.Now() | ||
| 129 | return nil | 107 | return nil |
| 130 | } | 108 | } |
| 131 | 109 |
| @@ -43,7 +43,7 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error) | @@ -43,7 +43,7 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error) | ||
| 43 | insertFieldsSnippet := sqlbuilder.SqlFieldsSnippet(sqlBuildFields) | 43 | insertFieldsSnippet := sqlbuilder.SqlFieldsSnippet(sqlBuildFields) |
| 44 | insertPlaceHoldersSnippet := sqlbuilder.SqlPlaceHoldersSnippet(sqlBuildFields) | 44 | insertPlaceHoldersSnippet := sqlbuilder.SqlPlaceHoldersSnippet(sqlBuildFields) |
| 45 | returningFieldsSnippet := sqlbuilder.SqlFieldsSnippet(sqlBuildFields) | 45 | returningFieldsSnippet := sqlbuilder.SqlFieldsSnippet(sqlBuildFields) |
| 46 | - updateFields := sqlbuilder.RemoveSqlFields(sqlBuildFields, "user_id") | 46 | + updateFields := sqlbuilder.RemoveSqlFields(sqlBuildFields, "user_id", "delete_at", "create_at") |
| 47 | updateFieldsSnippet := sqlbuilder.SqlUpdateFieldsSnippet(updateFields) | 47 | updateFieldsSnippet := sqlbuilder.SqlUpdateFieldsSnippet(updateFields) |
| 48 | tx := repository.transactionContext.PgTx | 48 | tx := repository.transactionContext.PgTx |
| 49 | if user.Identify() == nil { | 49 | if user.Identify() == nil { |
| @@ -104,7 +104,6 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error) | @@ -104,7 +104,6 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error) | ||
| 104 | &user.DeleteAt, | 104 | &user.DeleteAt, |
| 105 | ), | 105 | ), |
| 106 | fmt.Sprintf("UPDATE users SET %s WHERE user_id=? RETURNING %s", updateFieldsSnippet, returningFieldsSnippet), | 106 | fmt.Sprintf("UPDATE users SET %s WHERE user_id=? RETURNING %s", updateFieldsSnippet, returningFieldsSnippet), |
| 107 | - user.UserId, | ||
| 108 | user.UserType, | 107 | user.UserType, |
| 109 | pg.Array(user.Permissions), | 108 | pg.Array(user.Permissions), |
| 110 | user.CompanyId, | 109 | user.CompanyId, |
| @@ -114,9 +113,7 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error) | @@ -114,9 +113,7 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error) | ||
| 114 | user.Status, | 113 | user.Status, |
| 115 | user.AdminType, | 114 | user.AdminType, |
| 116 | pg.Array(user.AccessPartners), | 115 | pg.Array(user.AccessPartners), |
| 117 | - user.CreateAt, | ||
| 118 | user.UpdateAt, | 116 | user.UpdateAt, |
| 119 | - user.DeleteAt, | ||
| 120 | user.Identify(), | 117 | user.Identify(), |
| 121 | ); err != nil { | 118 | ); err != nil { |
| 122 | return user, err | 119 | return user, err |
| @@ -11,13 +11,12 @@ import ( | @@ -11,13 +11,12 @@ import ( | ||
| 11 | ) | 11 | ) |
| 12 | 12 | ||
| 13 | var _ = Describe("用户状态转换(禁用、启用)", func() { | 13 | var _ = Describe("用户状态转换(禁用、启用)", func() { |
| 14 | - return | ||
| 15 | var userId int64 | 14 | var userId int64 |
| 16 | BeforeEach(func() { | 15 | BeforeEach(func() { |
| 17 | _, err := pG.DB.QueryOne( | 16 | _, err := pG.DB.QueryOne( |
| 18 | pg.Scan(&userId), | 17 | pg.Scan(&userId), |
| 19 | - "INSERT INTO users (user_id, user_type, permissions, company_id, user_info, partner_info, status, admin_type, access_partners, create_at, update_at, delete_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING user_id", | ||
| 20 | - "testUserId", "testUserType", "testPermissions", "testCompanyId", "testUserInfo", "testPartnerInfo", "testStatus", "testAdminType", "testAccessPartners", "testCreateAt", "testUpdateAt", "testDeleteAt") | 18 | + "INSERT INTO users (user_id, user_type, permissions, company_id, user_info, partner_info, status, admin_type) VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING user_id", |
| 19 | + 1, 1, pg.Array([]int{}), 1, `{}`, `{}`, 1, 1) | ||
| 21 | Expect(err).NotTo(HaveOccurred()) | 20 | Expect(err).NotTo(HaveOccurred()) |
| 22 | }) | 21 | }) |
| 23 | Describe("用户状态转换(禁用、启用)", func() { | 22 | Describe("用户状态转换(禁用、启用)", func() { |
| @@ -25,23 +24,23 @@ var _ = Describe("用户状态转换(禁用、启用)", func() { | @@ -25,23 +24,23 @@ var _ = Describe("用户状态转换(禁用、启用)", func() { | ||
| 25 | It("", func() { | 24 | It("", func() { |
| 26 | httpExpect := httpexpect.New(GinkgoT(), server.URL) | 25 | httpExpect := httpexpect.New(GinkgoT(), server.URL) |
| 27 | body := map[string]interface{}{ | 26 | body := map[string]interface{}{ |
| 28 | - "userId": "int64", | ||
| 29 | - "status": "int64", | 27 | + "userId": 1, |
| 28 | + "status": 2, | ||
| 30 | } | 29 | } |
| 31 | - httpExpect.POST("/users/convertUserStatus"). | 30 | + httpExpect.POST("/users/convert-user-status"). |
| 32 | WithJSON(body). | 31 | WithJSON(body). |
| 33 | Expect(). | 32 | Expect(). |
| 34 | Status(http.StatusOK). | 33 | Status(http.StatusOK). |
| 35 | JSON(). | 34 | JSON(). |
| 36 | Object(). | 35 | Object(). |
| 37 | ContainsKey("code").ValueEqual("code", 0). | 36 | ContainsKey("code").ValueEqual("code", 0). |
| 38 | - ContainsKey("msg").ValueEqual("msg", "ok"). | ||
| 39 | - ContainsKey("data").Value("data").Object() | 37 | + ContainsKey("msg").ValueEqual("msg", "ok") |
| 38 | + //ContainsKey("data").Value("data").Object() | ||
| 40 | }) | 39 | }) |
| 41 | }) | 40 | }) |
| 42 | }) | 41 | }) |
| 43 | AfterEach(func() { | 42 | AfterEach(func() { |
| 44 | - //_, err := pG.DB.Exec("DELETE FROM users WHERE true") | ||
| 45 | - //Expect(err).NotTo(HaveOccurred()) | 43 | + _, err := pG.DB.Exec("DELETE FROM users WHERE true") |
| 44 | + Expect(err).NotTo(HaveOccurred()) | ||
| 46 | }) | 45 | }) |
| 47 | }) | 46 | }) |
| 1 | package user | 1 | package user |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | + pG "gitlab.fjmaimaimai.com/mmm-go-pp/partner01/pkg/infrastructure/pg" | ||
| 4 | "net/http" | 5 | "net/http" |
| 5 | 6 | ||
| 6 | "github.com/gavv/httpexpect" | 7 | "github.com/gavv/httpexpect" |
| @@ -14,24 +15,23 @@ var _ = Describe("创建", func() { | @@ -14,24 +15,23 @@ var _ = Describe("创建", func() { | ||
| 14 | It("返回用户实体数据", func() { | 15 | It("返回用户实体数据", func() { |
| 15 | httpExpect := httpexpect.New(GinkgoT(), server.URL) | 16 | httpExpect := httpexpect.New(GinkgoT(), server.URL) |
| 16 | body := map[string]interface{}{ | 17 | body := map[string]interface{}{ |
| 17 | - "userType": 1, | ||
| 18 | - "adminType": 1, | ||
| 19 | - "status": 1, | ||
| 20 | - "isPrincipal": false, | ||
| 21 | - "uid": 5678664411598702, | ||
| 22 | - "userAccount": "13800000000", | ||
| 23 | - "userAvatarUrl": "www.baidu.com", | ||
| 24 | - "userName": "彭于晏", | ||
| 25 | - "email": "gfghf@qq.com", | ||
| 26 | - "gender": 1, | ||
| 27 | - "extension": "1", | ||
| 28 | - "workplace": "2", | ||
| 29 | - "privateNumber": "3", | ||
| 30 | - "jobNumber": "4", | ||
| 31 | - "partnerAccount": "5", | ||
| 32 | - "partnerName": "6", | ||
| 33 | - "regionName": "7", | ||
| 34 | - "salesmans": "[1,2]", | 18 | + "userType": 1, |
| 19 | + "adminType": 1, | ||
| 20 | + "status": 1, | ||
| 21 | + "userAccount": "13800000000", | ||
| 22 | + "userInfo": map[string]interface{}{ | ||
| 23 | + "isPrincipal": false, | ||
| 24 | + "uid": 5678664411598702, | ||
| 25 | + "userAccount": "13800000000", | ||
| 26 | + "userAvatarUrl": "www.baidu.com", | ||
| 27 | + "userName": "彭于晏", | ||
| 28 | + "email": "gfghf@qq.com", | ||
| 29 | + "gender": 1, | ||
| 30 | + "extension": "1", | ||
| 31 | + "workplace": "2", | ||
| 32 | + "privateNumber": "3", | ||
| 33 | + "jobNumber": "4", | ||
| 34 | + }, | ||
| 35 | "partnerCategorys": "[]", | 35 | "partnerCategorys": "[]", |
| 36 | "accessPartners": "[]", | 36 | "accessPartners": "[]", |
| 37 | } | 37 | } |
| @@ -49,7 +49,8 @@ var _ = Describe("创建", func() { | @@ -49,7 +49,8 @@ var _ = Describe("创建", func() { | ||
| 49 | }) | 49 | }) |
| 50 | }) | 50 | }) |
| 51 | AfterEach(func() { | 51 | AfterEach(func() { |
| 52 | - //_, err := pG.DB.Exec("DELETE FROM users WHERE true") | ||
| 53 | - //Expect(err).NotTo(HaveOccurred()) | 52 | + _, err := pG.DB.Exec("DELETE FROM users WHERE true") |
| 53 | + _, err = pG.DB.Exec("DELETE FROM user_auth WHERE true") | ||
| 54 | + Expect(err).NotTo(HaveOccurred()) | ||
| 54 | }) | 55 | }) |
| 55 | }) | 56 | }) |
| @@ -11,20 +11,19 @@ import ( | @@ -11,20 +11,19 @@ import ( | ||
| 11 | ) | 11 | ) |
| 12 | 12 | ||
| 13 | var _ = Describe("返回", func() { | 13 | var _ = Describe("返回", func() { |
| 14 | - return | ||
| 15 | var userId int64 | 14 | var userId int64 |
| 16 | BeforeEach(func() { | 15 | BeforeEach(func() { |
| 17 | _, err := pG.DB.QueryOne( | 16 | _, err := pG.DB.QueryOne( |
| 18 | pg.Scan(&userId), | 17 | pg.Scan(&userId), |
| 19 | - "INSERT INTO users (user_id, user_type, permissions, company_id, user_info, partner_info, status, admin_type, access_partners, create_at, update_at, delete_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING user_id", | ||
| 20 | - "testUserId", "testUserType", "testPermissions", "testCompanyId", "testUserInfo", "testPartnerInfo", "testStatus", "testAdminType", "testAccessPartners", "testCreateAt", "testUpdateAt", "testDeleteAt") | 18 | + "INSERT INTO users (user_id, user_type, permissions, company_id, user_info, partner_info, status, admin_type) VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING user_id", |
| 19 | + 1, 1, pg.Array([]int{}), 1, `{}`, `{}`, 1, 1) | ||
| 21 | Expect(err).NotTo(HaveOccurred()) | 20 | Expect(err).NotTo(HaveOccurred()) |
| 22 | }) | 21 | }) |
| 23 | Describe("根据userId参数返回用户实体", func() { | 22 | Describe("根据userId参数返回用户实体", func() { |
| 24 | Context("传入有效的userId", func() { | 23 | Context("传入有效的userId", func() { |
| 25 | It("返回用户实体数据", func() { | 24 | It("返回用户实体数据", func() { |
| 26 | httpExpect := httpexpect.New(GinkgoT(), server.URL) | 25 | httpExpect := httpexpect.New(GinkgoT(), server.URL) |
| 27 | - httpExpect.GET("/users/{userId}"). | 26 | + httpExpect.GET("/users/1"). |
| 28 | Expect(). | 27 | Expect(). |
| 29 | Status(http.StatusOK). | 28 | Status(http.StatusOK). |
| 30 | JSON(). | 29 | JSON(). |
| @@ -36,7 +35,7 @@ var _ = Describe("返回", func() { | @@ -36,7 +35,7 @@ var _ = Describe("返回", func() { | ||
| 36 | }) | 35 | }) |
| 37 | }) | 36 | }) |
| 38 | AfterEach(func() { | 37 | AfterEach(func() { |
| 39 | - //_, err := pG.DB.Exec("DELETE FROM users WHERE true") | ||
| 40 | - //Expect(err).NotTo(HaveOccurred()) | 38 | + _, err := pG.DB.Exec("DELETE FROM users WHERE true") |
| 39 | + Expect(err).NotTo(HaveOccurred()) | ||
| 41 | }) | 40 | }) |
| 42 | }) | 41 | }) |
| @@ -11,13 +11,12 @@ import ( | @@ -11,13 +11,12 @@ import ( | ||
| 11 | ) | 11 | ) |
| 12 | 12 | ||
| 13 | var _ = Describe("返回列表", func() { | 13 | var _ = Describe("返回列表", func() { |
| 14 | - return | ||
| 15 | var userId int64 | 14 | var userId int64 |
| 16 | BeforeEach(func() { | 15 | BeforeEach(func() { |
| 17 | _, err := pG.DB.QueryOne( | 16 | _, err := pG.DB.QueryOne( |
| 18 | pg.Scan(&userId), | 17 | pg.Scan(&userId), |
| 19 | - "INSERT INTO users (user_id, user_type, permissions, company_id, user_info, partner_info, status, admin_type, access_partners, create_at, update_at, delete_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING user_id", | ||
| 20 | - "testUserId", "testUserType", "testPermissions", "testCompanyId", "testUserInfo", "testPartnerInfo", "testStatus", "testAdminType", "testAccessPartners", "testCreateAt", "testUpdateAt", "testDeleteAt") | 18 | + "INSERT INTO users (user_id, user_type, permissions, company_id, user_info, partner_info, status, admin_type) VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING user_id", |
| 19 | + 1, 1, pg.Array([]int{}), 1, `{}`, `{}`, 1, 1) | ||
| 21 | Expect(err).NotTo(HaveOccurred()) | 20 | Expect(err).NotTo(HaveOccurred()) |
| 22 | }) | 21 | }) |
| 23 | Describe("根据参数返回用户实体列表", func() { | 22 | Describe("根据参数返回用户实体列表", func() { |
| @@ -25,8 +24,8 @@ var _ = Describe("返回列表", func() { | @@ -25,8 +24,8 @@ var _ = Describe("返回列表", func() { | ||
| 25 | It("返回用户实体数据列表", func() { | 24 | It("返回用户实体数据列表", func() { |
| 26 | httpExpect := httpexpect.New(GinkgoT(), server.URL) | 25 | httpExpect := httpexpect.New(GinkgoT(), server.URL) |
| 27 | httpExpect.GET("/users/"). | 26 | httpExpect.GET("/users/"). |
| 28 | - WithQuery("offset", "int"). | ||
| 29 | - WithQuery("limit", "int"). | 27 | + WithQuery("offset", 0). |
| 28 | + WithQuery("limit", 10). | ||
| 30 | Expect(). | 29 | Expect(). |
| 31 | Status(http.StatusOK). | 30 | Status(http.StatusOK). |
| 32 | JSON(). | 31 | JSON(). |
| @@ -40,7 +39,7 @@ var _ = Describe("返回列表", func() { | @@ -40,7 +39,7 @@ var _ = Describe("返回列表", func() { | ||
| 40 | }) | 39 | }) |
| 41 | }) | 40 | }) |
| 42 | AfterEach(func() { | 41 | AfterEach(func() { |
| 43 | - //_, err := pG.DB.Exec("DELETE FROM users WHERE true") | ||
| 44 | - //Expect(err).NotTo(HaveOccurred()) | 42 | + _, err := pG.DB.Exec("DELETE FROM users WHERE true") |
| 43 | + Expect(err).NotTo(HaveOccurred()) | ||
| 45 | }) | 44 | }) |
| 46 | }) | 45 | }) |
| @@ -11,20 +11,19 @@ import ( | @@ -11,20 +11,19 @@ import ( | ||
| 11 | ) | 11 | ) |
| 12 | 12 | ||
| 13 | var _ = Describe("移除", func() { | 13 | var _ = Describe("移除", func() { |
| 14 | - return | ||
| 15 | var userId int64 | 14 | var userId int64 |
| 16 | BeforeEach(func() { | 15 | BeforeEach(func() { |
| 17 | _, err := pG.DB.QueryOne( | 16 | _, err := pG.DB.QueryOne( |
| 18 | pg.Scan(&userId), | 17 | pg.Scan(&userId), |
| 19 | - "INSERT INTO users (user_id, user_type, permissions, company_id, user_info, partner_info, status, admin_type, access_partners, create_at, update_at, delete_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING user_id", | ||
| 20 | - "testUserId", "testUserType", "testPermissions", "testCompanyId", "testUserInfo", "testPartnerInfo", "testStatus", "testAdminType", "testAccessPartners", "testCreateAt", "testUpdateAt", "testDeleteAt") | 18 | + "INSERT INTO users (user_id, user_type, permissions, company_id, user_info, partner_info, status, admin_type) VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING user_id", |
| 19 | + 1, 1, pg.Array([]int{}), 1, `{}`, `{}`, 1, 1) | ||
| 21 | Expect(err).NotTo(HaveOccurred()) | 20 | Expect(err).NotTo(HaveOccurred()) |
| 22 | }) | 21 | }) |
| 23 | Describe("根据参数移除", func() { | 22 | Describe("根据参数移除", func() { |
| 24 | Context("传入有效的userId", func() { | 23 | Context("传入有效的userId", func() { |
| 25 | It("返回被移除用户实体的数据", func() { | 24 | It("返回被移除用户实体的数据", func() { |
| 26 | httpExpect := httpexpect.New(GinkgoT(), server.URL) | 25 | httpExpect := httpexpect.New(GinkgoT(), server.URL) |
| 27 | - httpExpect.DELETE("/users/{userId}"). | 26 | + httpExpect.DELETE("/users/1"). |
| 28 | Expect(). | 27 | Expect(). |
| 29 | Status(http.StatusOK). | 28 | Status(http.StatusOK). |
| 30 | JSON(). | 29 | JSON(). |
| @@ -36,7 +35,7 @@ var _ = Describe("移除", func() { | @@ -36,7 +35,7 @@ var _ = Describe("移除", func() { | ||
| 36 | }) | 35 | }) |
| 37 | }) | 36 | }) |
| 38 | AfterEach(func() { | 37 | AfterEach(func() { |
| 39 | - //_, err := pG.DB.Exec("DELETE FROM users WHERE true") | ||
| 40 | - //Expect(err).NotTo(HaveOccurred()) | 38 | + _, err := pG.DB.Exec("DELETE FROM users WHERE true") |
| 39 | + Expect(err).NotTo(HaveOccurred()) | ||
| 41 | }) | 40 | }) |
| 42 | }) | 41 | }) |
| @@ -16,8 +16,8 @@ var _ = Describe("设置权限", func() { | @@ -16,8 +16,8 @@ var _ = Describe("设置权限", func() { | ||
| 16 | BeforeEach(func() { | 16 | BeforeEach(func() { |
| 17 | _, err := pG.DB.QueryOne( | 17 | _, err := pG.DB.QueryOne( |
| 18 | pg.Scan(&userId), | 18 | pg.Scan(&userId), |
| 19 | - "INSERT INTO users (user_id, user_type, permissions, company_id, user_info, partner_info, status, admin_type, access_partners, create_at, update_at, delete_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING user_id", | ||
| 20 | - "testUserId", "testUserType", "testPermissions", "testCompanyId", "testUserInfo", "testPartnerInfo", "testStatus", "testAdminType", "testAccessPartners", "testCreateAt", "testUpdateAt", "testDeleteAt") | 19 | + "INSERT INTO users (user_id, user_type, permissions, company_id, user_info, partner_info, status, admin_type) VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING user_id", |
| 20 | + 1, 1, pg.Array([]int{}), 1, `{}`, `{}`, 1, 1) | ||
| 21 | Expect(err).NotTo(HaveOccurred()) | 21 | Expect(err).NotTo(HaveOccurred()) |
| 22 | }) | 22 | }) |
| 23 | Describe("设置权限", func() { | 23 | Describe("设置权限", func() { |
| @@ -25,8 +25,8 @@ var _ = Describe("设置权限", func() { | @@ -25,8 +25,8 @@ var _ = Describe("设置权限", func() { | ||
| 25 | It("", func() { | 25 | It("", func() { |
| 26 | httpExpect := httpexpect.New(GinkgoT(), server.URL) | 26 | httpExpect := httpexpect.New(GinkgoT(), server.URL) |
| 27 | body := map[string]interface{}{ | 27 | body := map[string]interface{}{ |
| 28 | - "userId": "int64", | ||
| 29 | - "permissons": "array", | 28 | + "userId": 1, |
| 29 | + "permissons": []int{1, 2, 3}, | ||
| 30 | } | 30 | } |
| 31 | httpExpect.POST("/users/setPermission"). | 31 | httpExpect.POST("/users/setPermission"). |
| 32 | WithJSON(body). | 32 | WithJSON(body). |
| @@ -11,13 +11,12 @@ import ( | @@ -11,13 +11,12 @@ import ( | ||
| 11 | ) | 11 | ) |
| 12 | 12 | ||
| 13 | var _ = Describe("更新", func() { | 13 | var _ = Describe("更新", func() { |
| 14 | - return | ||
| 15 | var userId int64 | 14 | var userId int64 |
| 16 | BeforeEach(func() { | 15 | BeforeEach(func() { |
| 17 | _, err := pG.DB.QueryOne( | 16 | _, err := pG.DB.QueryOne( |
| 18 | pg.Scan(&userId), | 17 | pg.Scan(&userId), |
| 19 | - "INSERT INTO users (user_id, user_type, permissions, company_id, user_info, partner_info, status, admin_type, access_partners, create_at, update_at, delete_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING user_id", | ||
| 20 | - "testUserId", "testUserType", "testPermissions", "testCompanyId", "testUserInfo", "testPartnerInfo", "testStatus", "testAdminType", "testAccessPartners", "testCreateAt", "testUpdateAt", "testDeleteAt") | 18 | + "INSERT INTO users (user_id, user_type, permissions, company_id, user_info, partner_info, status, admin_type) VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING user_id", |
| 19 | + 1, 1, pg.Array([]int{}), 1, `{}`, `{}`, 1, 1) | ||
| 21 | Expect(err).NotTo(HaveOccurred()) | 20 | Expect(err).NotTo(HaveOccurred()) |
| 22 | }) | 21 | }) |
| 23 | Describe("提交数据更新", func() { | 22 | Describe("提交数据更新", func() { |
| @@ -25,30 +24,21 @@ var _ = Describe("更新", func() { | @@ -25,30 +24,21 @@ var _ = Describe("更新", func() { | ||
| 25 | It("返回更新后的用户实体数据", func() { | 24 | It("返回更新后的用户实体数据", func() { |
| 26 | httpExpect := httpexpect.New(GinkgoT(), server.URL) | 25 | httpExpect := httpexpect.New(GinkgoT(), server.URL) |
| 27 | body := map[string]interface{}{ | 26 | body := map[string]interface{}{ |
| 28 | - "userType": "int", | ||
| 29 | - "adminType": "int", | ||
| 30 | - "status": "int64", | ||
| 31 | - "isPrincipal": "boolean", | ||
| 32 | - "uid": "int64", | ||
| 33 | - "userAccount": "string", | ||
| 34 | - "userAvatarUrl": "string", | ||
| 35 | - "userName": "string", | ||
| 36 | - "email": "string", | ||
| 37 | - "gender": "int", | ||
| 38 | - "entryTime": "datetime", | ||
| 39 | - "extension": "string", | ||
| 40 | - "workplace": "string", | ||
| 41 | - "privateNumber": "string", | ||
| 42 | - "jobNumber": "string", | ||
| 43 | - "partnerAccount": "string", | ||
| 44 | - "partnerName": "string", | ||
| 45 | - "regionName": "string", | ||
| 46 | - "cooperateTime": "datetime", | ||
| 47 | - "salesmans": "array", | ||
| 48 | - "partnerCategorys": "array", | ||
| 49 | - "accessPartners": "array", | 27 | + "userInfo": map[string]interface{}{ |
| 28 | + "isPrincipal": false, | ||
| 29 | + "uid": 5678664411598702, | ||
| 30 | + "userAccount": "13800000000", | ||
| 31 | + "userAvatarUrl": "www.baidu.com", | ||
| 32 | + "userName": "彭于晏01", | ||
| 33 | + "email": "gfghf@qq.com", | ||
| 34 | + "gender": 1, | ||
| 35 | + "extension": "1", | ||
| 36 | + "workplace": "2", | ||
| 37 | + "privateNumber": "3", | ||
| 38 | + "jobNumber": "4", | ||
| 39 | + }, | ||
| 50 | } | 40 | } |
| 51 | - httpExpect.PUT("/users/{userId}"). | 41 | + httpExpect.PUT("/users/1"). |
| 52 | WithJSON(body). | 42 | WithJSON(body). |
| 53 | Expect(). | 43 | Expect(). |
| 54 | Status(http.StatusOK). | 44 | Status(http.StatusOK). |
| @@ -62,7 +52,7 @@ var _ = Describe("更新", func() { | @@ -62,7 +52,7 @@ var _ = Describe("更新", func() { | ||
| 62 | }) | 52 | }) |
| 63 | }) | 53 | }) |
| 64 | AfterEach(func() { | 54 | AfterEach(func() { |
| 65 | - //_, err := pG.DB.Exec("DELETE FROM users WHERE true") | ||
| 66 | - //Expect(err).NotTo(HaveOccurred()) | 55 | + _, err := pG.DB.Exec("DELETE FROM users WHERE true") |
| 56 | + Expect(err).NotTo(HaveOccurred()) | ||
| 67 | }) | 57 | }) |
| 68 | }) | 58 | }) |
-
请 注册 或 登录 后发表评论