作者 yangfu

增加服务 client-version

@@ -226,6 +226,8 @@ github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+ @@ -226,6 +226,8 @@ github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+
226 github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= 226 github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
227 github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= 227 github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
228 github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= 228 github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
  229 +github.com/go-pg/pg v8.0.7+incompatible h1:ty/sXL1OZLo+47KK9N8llRcmbA9tZasqbQ/OO4ld53g=
  230 +github.com/go-pg/pg v8.0.7+incompatible/go.mod h1:a2oXow+aFOrvwcKs3eIA0lNFmMilrxK2sOkB5NWe0vA=
229 github.com/go-pg/pg/v10 v10.0.0-beta.2/go.mod h1:UAuqGPC94ySi4rJ3DC5e4SY1rlwugZbJA/XoJ/kf5Rw= 231 github.com/go-pg/pg/v10 v10.0.0-beta.2/go.mod h1:UAuqGPC94ySi4rJ3DC5e4SY1rlwugZbJA/XoJ/kf5Rw=
230 github.com/go-pg/pg/v10 v10.7.3 h1:oL/Hz5MJie/9epmwxlZjfReO+2wlLPOK6BeGb9I+XHk= 232 github.com/go-pg/pg/v10 v10.7.3 h1:oL/Hz5MJie/9epmwxlZjfReO+2wlLPOK6BeGb9I+XHk=
231 github.com/go-pg/pg/v10 v10.7.3/go.mod h1:UsDYtA+ihbBNX1OeIvDejxkL4RXzL3wsZYoEv5NUEqM= 233 github.com/go-pg/pg/v10 v10.7.3/go.mod h1:UsDYtA+ihbBNX1OeIvDejxkL4RXzL3wsZYoEv5NUEqM=
  1 +package command
  2 +
  3 +import (
  4 + "fmt"
  5 + "github.com/tiptok/godevp/pkg/domain"
  6 +
  7 + "github.com/astaxie/beego/validation"
  8 +)
  9 +
  10 +type CreateClientVersionCommand struct {
  11 + // 提交人
  12 + Commiter string `json:"commiter,omitempty"`
  13 + // 项目名称
  14 + ProjectName string `json:"projectName,omitempty"`
  15 + // 版本号
  16 + Version string `json:"version,omitempty"`
  17 + // 标题
  18 + Title string `json:"title,omitempty"`
  19 + // 其他备注信息
  20 + Remark string `json:"remark,omitempty"`
  21 + // 客户端安装包信息
  22 + ClientPackageInfo []*domain.ClientPackageInfo `json:"clientPackageInfo,omitempty"`
  23 +}
  24 +
  25 +func (createClientVersionCommand *CreateClientVersionCommand) Valid(validation *validation.Validation) {
  26 + validation.SetError("CustomValid", "未实现的自定义认证")
  27 +}
  28 +
  29 +func (createClientVersionCommand *CreateClientVersionCommand) ValidateCommand() error {
  30 + valid := validation.Validation{}
  31 + b, err := valid.Valid(createClientVersionCommand)
  32 + if err != nil {
  33 + return err
  34 + }
  35 + if !b {
  36 + for _, validErr := range valid.Errors {
  37 + return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  38 + }
  39 + }
  40 + return nil
  41 +}
  1 +package command
  2 +
  3 +import (
  4 + "fmt"
  5 +
  6 + "github.com/astaxie/beego/validation"
  7 +)
  8 +
  9 +type RemoveClientVersionCommand struct {
  10 + // dcc
  11 + Id int64 `json:"id" valid:"Required"`
  12 +}
  13 +
  14 +func (removeClientVersionCommand *RemoveClientVersionCommand) Valid(validation *validation.Validation) {
  15 + validation.SetError("CustomValid", "未实现的自定义认证")
  16 +}
  17 +
  18 +func (removeClientVersionCommand *RemoveClientVersionCommand) ValidateCommand() error {
  19 + valid := validation.Validation{}
  20 + b, err := valid.Valid(removeClientVersionCommand)
  21 + if err != nil {
  22 + return err
  23 + }
  24 + if !b {
  25 + for _, validErr := range valid.Errors {
  26 + return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  27 + }
  28 + }
  29 + return nil
  30 +}
  1 +package command
  2 +
  3 +import (
  4 + "fmt"
  5 + "github.com/tiptok/godevp/pkg/domain"
  6 +
  7 + "github.com/astaxie/beego/validation"
  8 +)
  9 +
  10 +type UpdateClientVersionCommand struct {
  11 + // dcc
  12 + Id int64 `json:"id" valid:"Required"`
  13 + // 提交人
  14 + Commiter string `json:"commiter,omitempty"`
  15 + // 项目名称
  16 + ProjectName string `json:"projectName,omitempty"`
  17 + // 版本号
  18 + Version string `json:"version,omitempty"`
  19 + // 标题
  20 + Title string `json:"title,omitempty"`
  21 + // 其他备注信息
  22 + Remark string `json:"remark,omitempty"`
  23 + // 客户端安装包信息
  24 + ClientPackageInfo []*domain.ClientPackageInfo `json:"clientPackageInfo,omitempty"`
  25 +}
  26 +
  27 +func (updateClientVersionCommand *UpdateClientVersionCommand) Valid(validation *validation.Validation) {
  28 + validation.SetError("CustomValid", "未实现的自定义认证")
  29 +}
  30 +
  31 +func (updateClientVersionCommand *UpdateClientVersionCommand) ValidateCommand() error {
  32 + valid := validation.Validation{}
  33 + b, err := valid.Valid(updateClientVersionCommand)
  34 + if err != nil {
  35 + return err
  36 + }
  37 + if !b {
  38 + for _, validErr := range valid.Errors {
  39 + return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  40 + }
  41 + }
  42 + return nil
  43 +}
  1 +package query
  2 +
  3 +import (
  4 + "fmt"
  5 +
  6 + "github.com/astaxie/beego/validation"
  7 +)
  8 +
  9 +type GetClientVersionQuery struct {
  10 + // dcc
  11 + Id int64 `json:"id" valid:"Required"`
  12 +}
  13 +
  14 +func (getClientVersionQuery *GetClientVersionQuery) Valid(validation *validation.Validation) {
  15 + validation.SetError("CustomValid", "未实现的自定义认证")
  16 +}
  17 +
  18 +func (getClientVersionQuery *GetClientVersionQuery) ValidateQuery() error {
  19 + valid := validation.Validation{}
  20 + b, err := valid.Valid(getClientVersionQuery)
  21 + if err != nil {
  22 + return err
  23 + }
  24 + if !b {
  25 + for _, validErr := range valid.Errors {
  26 + return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  27 + }
  28 + }
  29 + return nil
  30 +}
  1 +package query
  2 +
  3 +import (
  4 + "fmt"
  5 +
  6 + "github.com/astaxie/beego/validation"
  7 +)
  8 +
  9 +type ListClientVersionQuery struct {
  10 + // 查询偏离量
  11 + Offset int `json:"offset" valid:"Required"`
  12 + // 查询限制
  13 + Limit int `json:"limit" valid:"Required"`
  14 +}
  15 +
  16 +func (listClientVersionQuery *ListClientVersionQuery) Valid(validation *validation.Validation) {
  17 + validation.SetError("CustomValid", "未实现的自定义认证")
  18 +}
  19 +
  20 +func (listClientVersionQuery *ListClientVersionQuery) ValidateQuery() error {
  21 + valid := validation.Validation{}
  22 + b, err := valid.Valid(listClientVersionQuery)
  23 + if err != nil {
  24 + return err
  25 + }
  26 + if !b {
  27 + for _, validErr := range valid.Errors {
  28 + return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  29 + }
  30 + }
  31 + return nil
  32 +}
  1 +package service
  2 +
  3 +import (
  4 + "fmt"
  5 + "github.com/linmadan/egglib-go/core/application"
  6 + "github.com/linmadan/egglib-go/utils/tool_funs"
  7 + "github.com/tiptok/godevp/pkg/application/clientVersion/command"
  8 + "github.com/tiptok/godevp/pkg/application/clientVersion/query"
  9 + "github.com/tiptok/godevp/pkg/application/factory"
  10 + "github.com/tiptok/godevp/pkg/domain"
  11 +)
  12 +
  13 +// 客户端版本服务
  14 +type ClientVersionService struct {
  15 +}
  16 +
  17 +// 创建
  18 +func (clientVersionService *ClientVersionService) CreateClientVersion(createClientVersionCommand *command.CreateClientVersionCommand) (interface{}, error) {
  19 + if err := createClientVersionCommand.ValidateCommand(); err != nil {
  20 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  21 + }
  22 + transactionContext, err := factory.CreateTransactionContext(nil)
  23 + if err != nil {
  24 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  25 + }
  26 + if err := transactionContext.StartTransaction(); err != nil {
  27 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  28 + }
  29 + defer func() {
  30 + transactionContext.RollbackTransaction()
  31 + }()
  32 + newClientVersion := &domain.ClientVersion{
  33 + Commiter: createClientVersionCommand.Commiter,
  34 + ProjectName: createClientVersionCommand.ProjectName,
  35 + Version: createClientVersionCommand.Version,
  36 + Title: createClientVersionCommand.Title,
  37 + Remark: createClientVersionCommand.Remark,
  38 + ClientPackageInfo: createClientVersionCommand.ClientPackageInfo,
  39 + }
  40 + var clientVersionRepository domain.ClientVersionRepository
  41 + if value, err := factory.CreateClientVersionRepository(map[string]interface{}{
  42 + "transactionContext": transactionContext,
  43 + }); err != nil {
  44 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  45 + } else {
  46 + clientVersionRepository = value
  47 + }
  48 + if clientVersion, err := clientVersionRepository.Save(newClientVersion); err != nil {
  49 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  50 + } else {
  51 + if err := transactionContext.CommitTransaction(); err != nil {
  52 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  53 + }
  54 + return clientVersion, nil
  55 + }
  56 +}
  57 +
  58 +// 返回
  59 +func (clientVersionService *ClientVersionService) GetClientVersion(getClientVersionQuery *query.GetClientVersionQuery) (interface{}, error) {
  60 + if err := getClientVersionQuery.ValidateQuery(); err != nil {
  61 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  62 + }
  63 + transactionContext, err := factory.CreateTransactionContext(nil)
  64 + if err != nil {
  65 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  66 + }
  67 + if err := transactionContext.StartTransaction(); err != nil {
  68 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  69 + }
  70 + defer func() {
  71 + transactionContext.RollbackTransaction()
  72 + }()
  73 + var clientVersionRepository domain.ClientVersionRepository
  74 + if value, err := factory.CreateClientVersionRepository(map[string]interface{}{
  75 + "transactionContext": transactionContext,
  76 + }); err != nil {
  77 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  78 + } else {
  79 + clientVersionRepository = value
  80 + }
  81 + clientVersion, err := clientVersionRepository.FindOne(map[string]interface{}{"clientVersionId": getClientVersionQuery.Id})
  82 + if err != nil {
  83 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  84 + }
  85 + if clientVersion == nil {
  86 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(getClientVersionQuery.Id)))
  87 + } else {
  88 + if err := transactionContext.CommitTransaction(); err != nil {
  89 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  90 + }
  91 + return clientVersion, nil
  92 + }
  93 +}
  94 +
  95 +// 返回列表
  96 +func (clientVersionService *ClientVersionService) ListClientVersion(listClientVersionQuery *query.ListClientVersionQuery) (interface{}, error) {
  97 + if err := listClientVersionQuery.ValidateQuery(); err != nil {
  98 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  99 + }
  100 + transactionContext, err := factory.CreateTransactionContext(nil)
  101 + if err != nil {
  102 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  103 + }
  104 + if err := transactionContext.StartTransaction(); err != nil {
  105 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  106 + }
  107 + defer func() {
  108 + transactionContext.RollbackTransaction()
  109 + }()
  110 + var clientVersionRepository domain.ClientVersionRepository
  111 + if value, err := factory.CreateClientVersionRepository(map[string]interface{}{
  112 + "transactionContext": transactionContext,
  113 + }); err != nil {
  114 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  115 + } else {
  116 + clientVersionRepository = value
  117 + }
  118 + if count, clientVersions, err := clientVersionRepository.Find(tool_funs.SimpleStructToMap(listClientVersionQuery)); err != nil {
  119 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  120 + } else {
  121 + if err := transactionContext.CommitTransaction(); err != nil {
  122 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  123 + }
  124 + return map[string]interface{}{
  125 + "count": count,
  126 + "clientVersions": clientVersions,
  127 + }, nil
  128 + }
  129 +}
  130 +
  131 +// 移除
  132 +func (clientVersionService *ClientVersionService) RemoveClientVersion(removeClientVersionCommand *command.RemoveClientVersionCommand) (interface{}, error) {
  133 + if err := removeClientVersionCommand.ValidateCommand(); err != nil {
  134 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  135 + }
  136 + transactionContext, err := factory.CreateTransactionContext(nil)
  137 + if err != nil {
  138 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  139 + }
  140 + if err := transactionContext.StartTransaction(); err != nil {
  141 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  142 + }
  143 + defer func() {
  144 + transactionContext.RollbackTransaction()
  145 + }()
  146 + var clientVersionRepository domain.ClientVersionRepository
  147 + if value, err := factory.CreateClientVersionRepository(map[string]interface{}{
  148 + "transactionContext": transactionContext,
  149 + }); err != nil {
  150 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  151 + } else {
  152 + clientVersionRepository = value
  153 + }
  154 + clientVersion, err := clientVersionRepository.FindOne(map[string]interface{}{"clientVersionId": removeClientVersionCommand.Id})
  155 + if err != nil {
  156 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  157 + }
  158 + if clientVersion == nil {
  159 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(removeClientVersionCommand.Id)))
  160 + }
  161 + if clientVersion, err := clientVersionRepository.Remove(clientVersion); err != nil {
  162 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  163 + } else {
  164 + if err := transactionContext.CommitTransaction(); err != nil {
  165 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  166 + }
  167 + return clientVersion, nil
  168 + }
  169 +}
  170 +
  171 +// 更新
  172 +func (clientVersionService *ClientVersionService) UpdateClientVersion(updateClientVersionCommand *command.UpdateClientVersionCommand) (interface{}, error) {
  173 + if err := updateClientVersionCommand.ValidateCommand(); err != nil {
  174 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  175 + }
  176 + transactionContext, err := factory.CreateTransactionContext(nil)
  177 + if err != nil {
  178 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  179 + }
  180 + if err := transactionContext.StartTransaction(); err != nil {
  181 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  182 + }
  183 + defer func() {
  184 + transactionContext.RollbackTransaction()
  185 + }()
  186 + var clientVersionRepository domain.ClientVersionRepository
  187 + if value, err := factory.CreateClientVersionRepository(map[string]interface{}{
  188 + "transactionContext": transactionContext,
  189 + }); err != nil {
  190 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  191 + } else {
  192 + clientVersionRepository = value
  193 + }
  194 + clientVersion, err := clientVersionRepository.FindOne(map[string]interface{}{"clientVersionId": updateClientVersionCommand.Id})
  195 + if err != nil {
  196 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  197 + }
  198 + if clientVersion == nil {
  199 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(updateClientVersionCommand.Id)))
  200 + }
  201 + if err := clientVersion.Update(tool_funs.SimpleStructToMap(updateClientVersionCommand)); err != nil {
  202 + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
  203 + }
  204 + if clientVersion, err := clientVersionRepository.Save(clientVersion); err != nil {
  205 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  206 + } else {
  207 + if err := transactionContext.CommitTransaction(); err != nil {
  208 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  209 + }
  210 + return clientVersion, nil
  211 + }
  212 +}
  213 +
  214 +func NewClientVersionService(options map[string]interface{}) *ClientVersionService {
  215 + newClientVersionService := &ClientVersionService{}
  216 + return newClientVersionService
  217 +}
@@ -39,3 +39,11 @@ func CreateRoleAccessRepository(options map[string]interface{}) (domain.RoleAcce @@ -39,3 +39,11 @@ func CreateRoleAccessRepository(options map[string]interface{}) (domain.RoleAcce
39 } 39 }
40 return repository.NewRoleAccessRepository(transactionContext) 40 return repository.NewRoleAccessRepository(transactionContext)
41 } 41 }
  42 +
  43 +func CreateClientVersionRepository(options map[string]interface{}) (domain.ClientVersionRepository, error) {
  44 + var transactionContext *pg.TransactionContext
  45 + if value, ok := options["transactionContext"]; ok {
  46 + transactionContext = value.(*pg.TransactionContext)
  47 + }
  48 + return repository.NewClientVersionRepository(transactionContext)
  49 +}
  1 +package domain
  2 +
  3 +// 客户端安装包信息
  4 +type ClientPackageInfo struct {
  5 + // 文件名
  6 + FileName string `json:"fileName"`
  7 + // 文件路径
  8 + Path string `json:"path"`
  9 +}
  1 +package domain
  2 +
  3 +import "time"
  4 +
  5 +// 客户端版本信息
  6 +type ClientVersion struct {
  7 + // dcc
  8 + Id int64 `json:"id"`
  9 + // 提交人
  10 + Commiter string `json:"commiter"`
  11 + // 项目名称
  12 + ProjectName string `json:"projectName"`
  13 + // 版本号
  14 + Version string `json:"version"`
  15 + // 标题
  16 + Title string `json:"title"`
  17 + // 其他备注信息
  18 + Remark string `json:"remark"`
  19 + // 客户端安装包信息
  20 + ClientPackageInfo []*ClientPackageInfo `json:"clientPackageInfo"`
  21 + // 创建时间
  22 + CreateTime time.Time `json:"createTime"`
  23 +}
  24 +
  25 +type ClientVersionRepository interface {
  26 + Save(clientVersion *ClientVersion) (*ClientVersion, error)
  27 + Remove(clientVersion *ClientVersion) (*ClientVersion, error)
  28 + FindOne(queryOptions map[string]interface{}) (*ClientVersion, error)
  29 + Find(queryOptions map[string]interface{}) (int64, []*ClientVersion, error)
  30 +}
  31 +
  32 +func (clientVersion *ClientVersion) Identify() interface{} {
  33 + if clientVersion.Id == 0 {
  34 + return nil
  35 + }
  36 + return clientVersion.Id
  37 +}
  38 +
  39 +func (clientVersion *ClientVersion) Update(data map[string]interface{}) error {
  40 + if Id, ok := data["Id"]; ok {
  41 + clientVersion.Id = Id.(int64)
  42 + }
  43 + if commiter, ok := data["commiter"]; ok {
  44 + clientVersion.Commiter = commiter.(string)
  45 + }
  46 + if projectName, ok := data["projectName"]; ok {
  47 + clientVersion.ProjectName = projectName.(string)
  48 + }
  49 + if version, ok := data["version"]; ok {
  50 + clientVersion.Version = version.(string)
  51 + }
  52 + if title, ok := data["title"]; ok {
  53 + clientVersion.Title = title.(string)
  54 + }
  55 + if remark, ok := data["remark"]; ok {
  56 + clientVersion.Remark = remark.(string)
  57 + }
  58 + if clientPackageInfo, ok := data["clientPackageInfo"]; ok {
  59 + clientVersion.ClientPackageInfo = clientPackageInfo.([]*ClientPackageInfo)
  60 + }
  61 + if createTime, ok := data["createTime"]; ok {
  62 + clientVersion.CreateTime = createTime.(time.Time)
  63 + }
  64 + return nil
  65 +}
  1 +package models
  2 +
  3 +import (
  4 + "github.com/tiptok/godevp/pkg/domain"
  5 + "time"
  6 +)
  7 +
  8 +type ClientVersion struct {
  9 + TableName string `pg:"client_versions,alias:client_version"`
  10 + // dcc
  11 + Id int64
  12 + // 提交人
  13 + Commiter string
  14 + // 项目名称
  15 + ProjectName string
  16 + // 版本号
  17 + Version string
  18 + // 标题
  19 + Title string
  20 + // 其他备注信息
  21 + Remark string
  22 + // 客户端安装包信息
  23 + ClientPackageInfo []*domain.ClientPackageInfo `pg:",array"`
  24 + // 创建时间
  25 + CreateTime time.Time
  26 +}
  1 +package repository
  2 +
  3 +import (
  4 + "fmt"
  5 +
  6 + "github.com/go-pg/pg/v10"
  7 + pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
  8 + "github.com/tiptok/godevp/pkg/domain"
  9 + "github.com/tiptok/godevp/pkg/infrastructure/pg/models"
  10 +)
  11 +
  12 +type ClientVersionRepository struct {
  13 + transactionContext *pgTransaction.TransactionContext
  14 +}
  15 +
  16 +func (repository *ClientVersionRepository) nextIdentify() (int64, error) {
  17 + return 0, nil
  18 +}
  19 +func (repository *ClientVersionRepository) Save(clientVersion *domain.ClientVersion) (*domain.ClientVersion, error) {
  20 + tx := repository.transactionContext.PgTx
  21 + if clientVersion.Identify() == nil {
  22 + _, err := repository.nextIdentify()
  23 + if err != nil {
  24 + return clientVersion, err
  25 + }
  26 + if _, err := tx.QueryOne(
  27 + pg.Scan(&clientVersion.Id, &clientVersion.Commiter, &clientVersion.ProjectName, &clientVersion.Version, &clientVersion.Title, &clientVersion.Remark, pg.Array(&clientVersion.ClientPackageInfo), &clientVersion.CreateTime),
  28 + "INSERT INTO client_versions (id, commiter, project_name, version, title, remark, client_package_info, create_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING id, commiter, project_name, version, title, remark, client_package_info, create_time",
  29 + clientVersion.Id, clientVersion.Commiter, clientVersion.ProjectName, clientVersion.Version, clientVersion.Title, clientVersion.Remark, pg.Array(clientVersion.ClientPackageInfo), clientVersion.CreateTime); err != nil {
  30 + return clientVersion, err
  31 + }
  32 + } else {
  33 + if _, err := tx.QueryOne(
  34 + pg.Scan(&clientVersion.Id, &clientVersion.Commiter, &clientVersion.ProjectName, &clientVersion.Version, &clientVersion.Title, &clientVersion.Remark, pg.Array(&clientVersion.ClientPackageInfo), &clientVersion.CreateTime),
  35 + "UPDATE client_versions SET id=?, commiter=?, project_name=?, version=?, title=?, remark=?, client_package_info=?, create_time=? WHERE id=? RETURNING id, commiter, project_name, version, title, remark, client_package_info, create_time",
  36 + clientVersion.Id, clientVersion.Commiter, clientVersion.ProjectName, clientVersion.Version, clientVersion.Title, clientVersion.Remark, pg.Array(clientVersion.ClientPackageInfo), clientVersion.CreateTime, clientVersion.Identify()); err != nil {
  37 + return clientVersion, err
  38 + }
  39 + }
  40 + return clientVersion, nil
  41 +}
  42 +func (repository *ClientVersionRepository) Remove(clientVersion *domain.ClientVersion) (*domain.ClientVersion, error) {
  43 + tx := repository.transactionContext.PgTx
  44 + clientVersionModel := new(models.ClientVersion)
  45 + clientVersionModel.Id = clientVersion.Identify().(int64)
  46 + if _, err := tx.Model(clientVersionModel).WherePK().Delete(); err != nil {
  47 + return clientVersion, err
  48 + }
  49 + return clientVersion, nil
  50 +}
  51 +func (repository *ClientVersionRepository) FindOne(queryOptions map[string]interface{}) (*domain.ClientVersion, error) {
  52 + tx := repository.transactionContext.PgTx
  53 + clientVersionModel := new(models.ClientVersion)
  54 + query := tx.Model(clientVersionModel)
  55 + if clientVersionId, ok := queryOptions["clientVersionId"]; ok {
  56 + query = query.Where("client_version.id = ?", clientVersionId)
  57 + }
  58 + if err := query.First(); err != nil {
  59 + if err.Error() == "pg: no rows in result set" {
  60 + return nil, fmt.Errorf("没有此资源")
  61 + } else {
  62 + return nil, err
  63 + }
  64 + }
  65 + if clientVersionModel.Id == 0 {
  66 + return nil, nil
  67 + } else {
  68 + return repository.transformPgModelToDomainModel(clientVersionModel)
  69 + }
  70 +}
  71 +func (repository *ClientVersionRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.ClientVersion, error) {
  72 + tx := repository.transactionContext.PgTx
  73 + var clientVersionModels []*models.ClientVersion
  74 + clientVersions := make([]*domain.ClientVersion, 0)
  75 + query := tx.Model(&clientVersionModels)
  76 + if offset, ok := queryOptions["offset"]; ok {
  77 + offset := offset.(int)
  78 + if offset > -1 {
  79 + query = query.Offset(offset)
  80 + }
  81 + } else {
  82 + query = query.Offset(0)
  83 + }
  84 + if limit, ok := queryOptions["limit"]; ok {
  85 + limit := limit.(int)
  86 + if limit > -1 {
  87 + query = query.Limit(limit)
  88 + }
  89 + } else {
  90 + query = query.Limit(20)
  91 + }
  92 + if count, err := query.Order("id DESC").SelectAndCount(); err != nil {
  93 + return 0, clientVersions, err
  94 + } else {
  95 + for _, clientVersionModel := range clientVersionModels {
  96 + if clientVersion, err := repository.transformPgModelToDomainModel(clientVersionModel); err != nil {
  97 + return 0, clientVersions, err
  98 + } else {
  99 + clientVersions = append(clientVersions, clientVersion)
  100 + }
  101 + }
  102 + return int64(count), clientVersions, nil
  103 + }
  104 +}
  105 +func (repository *ClientVersionRepository) transformPgModelToDomainModel(clientVersionModel *models.ClientVersion) (*domain.ClientVersion, error) {
  106 + return &domain.ClientVersion{
  107 + Id: clientVersionModel.Id,
  108 + Commiter: clientVersionModel.Commiter,
  109 + ProjectName: clientVersionModel.ProjectName,
  110 + Version: clientVersionModel.Version,
  111 + Title: clientVersionModel.Title,
  112 + Remark: clientVersionModel.Remark,
  113 + ClientPackageInfo: clientVersionModel.ClientPackageInfo,
  114 + CreateTime: clientVersionModel.CreateTime,
  115 + }, nil
  116 +}
  117 +func NewClientVersionRepository(transactionContext *pgTransaction.TransactionContext) (*ClientVersionRepository, error) {
  118 + if transactionContext == nil {
  119 + return nil, fmt.Errorf("transactionContext参数不能为nil")
  120 + } else {
  121 + return &ClientVersionRepository{
  122 + transactionContext: transactionContext,
  123 + }, nil
  124 + }
  125 +}
  1 +package controllers
  2 +
  3 +import (
  4 + "encoding/json"
  5 +
  6 + "github.com/astaxie/beego"
  7 + "github.com/linmadan/egglib-go/web/beego/utils"
  8 + "github.com/tiptok/godevp/pkg/application/clientVersion/command"
  9 + "github.com/tiptok/godevp/pkg/application/clientVersion/query"
  10 + "github.com/tiptok/godevp/pkg/application/clientVersion/service"
  11 +)
  12 +
  13 +type ClientVersionController struct {
  14 + beego.Controller
  15 +}
  16 +
  17 +func (controller *ClientVersionController) CreateClientVersion() {
  18 + clientVersionService := service.NewClientVersionService(nil)
  19 + createClientVersionCommand := &command.CreateClientVersionCommand{}
  20 + json.Unmarshal(controller.Ctx.Input.GetData("requestBody").([]byte), createClientVersionCommand)
  21 + data, err := clientVersionService.CreateClientVersion(createClientVersionCommand)
  22 + var response utils.JsonResponse
  23 + if err != nil {
  24 + response = utils.ResponseError(controller.Ctx, err)
  25 + } else {
  26 + response = utils.ResponseData(controller.Ctx, data)
  27 + }
  28 + controller.Data["json"] = response
  29 + controller.ServeJSON()
  30 +}
  31 +
  32 +func (controller *ClientVersionController) UpdateClientVersion() {
  33 + clientVersionService := service.NewClientVersionService(nil)
  34 + updateClientVersionCommand := &command.UpdateClientVersionCommand{}
  35 + json.Unmarshal(controller.Ctx.Input.GetData("requestBody").([]byte), updateClientVersionCommand)
  36 + id, _ := controller.GetInt64(":id")
  37 + updateClientVersionCommand.Id = id
  38 + data, err := clientVersionService.UpdateClientVersion(updateClientVersionCommand)
  39 + var response utils.JsonResponse
  40 + if err != nil {
  41 + response = utils.ResponseError(controller.Ctx, err)
  42 + } else {
  43 + response = utils.ResponseData(controller.Ctx, data)
  44 + }
  45 + controller.Data["json"] = response
  46 + controller.ServeJSON()
  47 +}
  48 +
  49 +func (controller *ClientVersionController) GetClientVersion() {
  50 + clientVersionService := service.NewClientVersionService(nil)
  51 + getClientVersionQuery := &query.GetClientVersionQuery{}
  52 + id, _ := controller.GetInt64(":id")
  53 + getClientVersionQuery.Id = id
  54 + data, err := clientVersionService.GetClientVersion(getClientVersionQuery)
  55 + var response utils.JsonResponse
  56 + if err != nil {
  57 + response = utils.ResponseError(controller.Ctx, err)
  58 + } else {
  59 + response = utils.ResponseData(controller.Ctx, data)
  60 + }
  61 + controller.Data["json"] = response
  62 + controller.ServeJSON()
  63 +}
  64 +
  65 +func (controller *ClientVersionController) RemoveClientVersion() {
  66 + clientVersionService := service.NewClientVersionService(nil)
  67 + removeClientVersionCommand := &command.RemoveClientVersionCommand{}
  68 + json.Unmarshal(controller.Ctx.Input.GetData("requestBody").([]byte), removeClientVersionCommand)
  69 + id, _ := controller.GetInt64(":id")
  70 + removeClientVersionCommand.Id = id
  71 + data, err := clientVersionService.RemoveClientVersion(removeClientVersionCommand)
  72 + var response utils.JsonResponse
  73 + if err != nil {
  74 + response = utils.ResponseError(controller.Ctx, err)
  75 + } else {
  76 + response = utils.ResponseData(controller.Ctx, data)
  77 + }
  78 + controller.Data["json"] = response
  79 + controller.ServeJSON()
  80 +}
  81 +
  82 +func (controller *ClientVersionController) ListClientVersion() {
  83 + clientVersionService := service.NewClientVersionService(nil)
  84 + listClientVersionQuery := &query.ListClientVersionQuery{}
  85 + offset, _ := controller.GetInt("offset")
  86 + listClientVersionQuery.Offset = offset
  87 + limit, _ := controller.GetInt("limit")
  88 + listClientVersionQuery.Limit = limit
  89 + data, err := clientVersionService.ListClientVersion(listClientVersionQuery)
  90 + var response utils.JsonResponse
  91 + if err != nil {
  92 + response = utils.ResponseError(controller.Ctx, err)
  93 + } else {
  94 + response = utils.ResponseData(controller.Ctx, data)
  95 + }
  96 + controller.Data["json"] = response
  97 + controller.ServeJSON()
  98 +}
  1 +package routers
  2 +
  3 +import (
  4 + "github.com/astaxie/beego"
  5 + "github.com/tiptok/godevp/pkg/port/beego/controllers"
  6 +)
  7 +
  8 +func init() {
  9 + beego.Router("/client-versions/", &controllers.ClientVersionController{}, "Post:CreateClientVersion")
  10 + beego.Router("/client-versions/:id", &controllers.ClientVersionController{}, "Put:UpdateClientVersion")
  11 + beego.Router("/client-versions/:id", &controllers.ClientVersionController{}, "Get:GetClientVersion")
  12 + beego.Router("/client-versions/:id", &controllers.ClientVersionController{}, "Delete:RemoveClientVersion")
  13 + beego.Router("/client-versions/", &controllers.ClientVersionController{}, "Get:ListClientVersion")
  14 +}
  1 +package client_version
  2 +
  3 +import (
  4 + "net/http"
  5 + "net/http/httptest"
  6 + "testing"
  7 +
  8 + "github.com/astaxie/beego"
  9 + . "github.com/onsi/ginkgo"
  10 + . "github.com/onsi/gomega"
  11 + _ "github.com/tiptok/godevp/pkg/infrastructure/pg"
  12 + _ "github.com/tiptok/godevp/pkg/port/beego"
  13 +)
  14 +
  15 +func TestClientVersion(t *testing.T) {
  16 + RegisterFailHandler(Fail)
  17 + RunSpecs(t, "Beego Port ClientVersion Correlations Test Case Suite")
  18 +}
  19 +
  20 +var handler http.Handler
  21 +var server *httptest.Server
  22 +
  23 +var _ = BeforeSuite(func() {
  24 + handler = beego.BeeApp.Handlers
  25 + server = httptest.NewServer(handler)
  26 +})
  27 +
  28 +var _ = AfterSuite(func() {
  29 + server.Close()
  30 +})
  1 +package client_version
  2 +
  3 +import (
  4 + "net/http"
  5 +
  6 + "github.com/gavv/httpexpect"
  7 + . "github.com/onsi/ginkgo"
  8 + . "github.com/onsi/gomega"
  9 + pG "github.com/tiptok/godevp/pkg/infrastructure/pg"
  10 +)
  11 +
  12 +var _ = Describe("创建", func() {
  13 + Describe("提交数据创建", func() {
  14 + Context("提交正确的新客户端版本信息数据", func() {
  15 + It("返回客户端版本信息数据", func() {
  16 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  17 + body := map[string]interface{}{
  18 + "commiter": "string",
  19 + "projectName": "string",
  20 + "version": "string",
  21 + "title": "string",
  22 + "remark": "string",
  23 + "clientPackageInfo": "array",
  24 + }
  25 + httpExpect.POST("/client-versions/").
  26 + WithJSON(body).
  27 + Expect().
  28 + Status(http.StatusOK).
  29 + JSON().
  30 + Object().
  31 + ContainsKey("code").ValueEqual("code", 0).
  32 + ContainsKey("msg").ValueEqual("msg", "ok").
  33 + ContainsKey("data").Value("data").Object().
  34 + ContainsKey("id").ValueNotEqual("id", BeZero())
  35 + })
  36 + })
  37 + })
  38 + AfterEach(func() {
  39 + _, err := pG.DB.Exec("DELETE FROM client_versions WHERE true")
  40 + Expect(err).NotTo(HaveOccurred())
  41 + })
  42 +})
  1 +package client_version
  2 +
  3 +import (
  4 + "net/http"
  5 +
  6 + "github.com/gavv/httpexpect"
  7 + "github.com/go-pg/pg/v10"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "github.com/tiptok/godevp/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("返回", func() {
  14 + var clientVersionId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&clientVersionId),
  18 + "INSERT INTO client_versions (id, commiter, project_name, version, title, remark, client_package_info, create_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING id",
  19 + "testId", "testCommiter", "testProjectName", "testVersion", "testTitle", "testRemark", "testClientPackageInfo", "testCreateTime")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("根据clientVersionId参数返回客户端版本信息", func() {
  23 + Context("传入有效的clientVersionId", func() {
  24 + It("返回客户端版本信息数据", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + httpExpect.GET("/client-versions/{id}").
  27 + Expect().
  28 + Status(http.StatusOK).
  29 + JSON().
  30 + Object().
  31 + ContainsKey("code").ValueEqual("code", 0).
  32 + ContainsKey("msg").ValueEqual("msg", "ok").
  33 + ContainsKey("data").Value("data").Object()
  34 + })
  35 + })
  36 + })
  37 + AfterEach(func() {
  38 + _, err := pG.DB.Exec("DELETE FROM client_versions WHERE true")
  39 + Expect(err).NotTo(HaveOccurred())
  40 + })
  41 +})
  1 +package client_version
  2 +
  3 +import (
  4 + "net/http"
  5 +
  6 + "github.com/gavv/httpexpect"
  7 + "github.com/go-pg/pg/v10"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "github.com/tiptok/godevp/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("返回列表", func() {
  14 + var clientVersionId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&clientVersionId),
  18 + "INSERT INTO client_versions (id, commiter, project_name, version, title, remark, client_package_info, create_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING id",
  19 + "testId", "testCommiter", "testProjectName", "testVersion", "testTitle", "testRemark", "testClientPackageInfo", "testCreateTime")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("根据参数返回客户端版本信息列表", func() {
  23 + Context("传入有效的参数", func() {
  24 + It("返回客户端版本信息数据列表", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + httpExpect.GET("/client-versions/").
  27 + WithQuery("offset", "int").
  28 + WithQuery("limit", "int").
  29 + Expect().
  30 + Status(http.StatusOK).
  31 + JSON().
  32 + Object().
  33 + ContainsKey("code").ValueEqual("code", 0).
  34 + ContainsKey("msg").ValueEqual("msg", "ok").
  35 + ContainsKey("data").Value("data").Object().
  36 + ContainsKey("count").ValueEqual("count", 1).
  37 + ContainsKey("clientVersions").Value("clientVersions").Array()
  38 + })
  39 + })
  40 + })
  41 + AfterEach(func() {
  42 + _, err := pG.DB.Exec("DELETE FROM client_versions WHERE true")
  43 + Expect(err).NotTo(HaveOccurred())
  44 + })
  45 +})
  1 +package client_version
  2 +
  3 +import (
  4 + "net/http"
  5 +
  6 + "github.com/gavv/httpexpect"
  7 + "github.com/go-pg/pg/v10"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "github.com/tiptok/godevp/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("移除", func() {
  14 + var clientVersionId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&clientVersionId),
  18 + "INSERT INTO client_versions (id, commiter, project_name, version, title, remark, client_package_info, create_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING id",
  19 + "testId", "testCommiter", "testProjectName", "testVersion", "testTitle", "testRemark", "testClientPackageInfo", "testCreateTime")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("根据参数移除", func() {
  23 + Context("传入有效的clientVersionId", func() {
  24 + It("返回被移除客户端版本信息的数据", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + httpExpect.DELETE("/client-versions/{id}").
  27 + Expect().
  28 + Status(http.StatusOK).
  29 + JSON().
  30 + Object().
  31 + ContainsKey("code").ValueEqual("code", 0).
  32 + ContainsKey("msg").ValueEqual("msg", "ok").
  33 + ContainsKey("data").Value("data").Object()
  34 + })
  35 + })
  36 + })
  37 + AfterEach(func() {
  38 + _, err := pG.DB.Exec("DELETE FROM client_versions WHERE true")
  39 + Expect(err).NotTo(HaveOccurred())
  40 + })
  41 +})
  1 +package client_version
  2 +
  3 +import (
  4 + "net/http"
  5 +
  6 + "github.com/gavv/httpexpect"
  7 + "github.com/go-pg/pg/v10"
  8 + . "github.com/onsi/ginkgo"
  9 + . "github.com/onsi/gomega"
  10 + pG "github.com/tiptok/godevp/pkg/infrastructure/pg"
  11 +)
  12 +
  13 +var _ = Describe("更新", func() {
  14 + var clientVersionId int64
  15 + BeforeEach(func() {
  16 + _, err := pG.DB.QueryOne(
  17 + pg.Scan(&clientVersionId),
  18 + "INSERT INTO client_versions (id, commiter, project_name, version, title, remark, client_package_info, create_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?) RETURNING id",
  19 + "testId", "testCommiter", "testProjectName", "testVersion", "testTitle", "testRemark", "testClientPackageInfo", "testCreateTime")
  20 + Expect(err).NotTo(HaveOccurred())
  21 + })
  22 + Describe("提交数据更新", func() {
  23 + Context("提交正确的客户端版本信息数据", func() {
  24 + It("返回更新后的客户端版本信息数据", func() {
  25 + httpExpect := httpexpect.New(GinkgoT(), server.URL)
  26 + body := map[string]interface{}{
  27 + "Id": "int64",
  28 + "commiter": "string",
  29 + "projectName": "string",
  30 + "version": "string",
  31 + "title": "string",
  32 + "remark": "string",
  33 + "clientPackageInfo": "array",
  34 + }
  35 + httpExpect.PUT("/client-versions/{id}").
  36 + WithJSON(body).
  37 + Expect().
  38 + Status(http.StatusOK).
  39 + JSON().
  40 + Object().
  41 + ContainsKey("code").ValueEqual("code", 0).
  42 + ContainsKey("msg").ValueEqual("msg", "ok").
  43 + ContainsKey("data").Value("data").Object().
  44 + ContainsKey("id").ValueEqual("id", clientVersionId)
  45 + })
  46 + })
  47 + })
  48 + AfterEach(func() {
  49 + _, err := pG.DB.Exec("DELETE FROM client_versions WHERE true")
  50 + Expect(err).NotTo(HaveOccurred())
  51 + })
  52 +})
@@ -4,7 +4,7 @@ import ( @@ -4,7 +4,7 @@ import (
4 "net/http" 4 "net/http"
5 5
6 "github.com/gavv/httpexpect" 6 "github.com/gavv/httpexpect"
7 - "github.com/go-pg/pg" 7 + "github.com/go-pg/pg/v10"
8 . "github.com/onsi/ginkgo" 8 . "github.com/onsi/ginkgo"
9 . "github.com/onsi/gomega" 9 . "github.com/onsi/gomega"
10 pG "github.com/tiptok/godevp/pkg/infrastructure/pg" 10 pG "github.com/tiptok/godevp/pkg/infrastructure/pg"
@@ -4,7 +4,7 @@ import ( @@ -4,7 +4,7 @@ import (
4 "net/http" 4 "net/http"
5 5
6 "github.com/gavv/httpexpect" 6 "github.com/gavv/httpexpect"
7 - "github.com/go-pg/pg" 7 + "github.com/go-pg/pg/v10"
8 . "github.com/onsi/ginkgo" 8 . "github.com/onsi/ginkgo"
9 . "github.com/onsi/gomega" 9 . "github.com/onsi/gomega"
10 pG "github.com/tiptok/godevp/pkg/infrastructure/pg" 10 pG "github.com/tiptok/godevp/pkg/infrastructure/pg"
@@ -4,7 +4,7 @@ import ( @@ -4,7 +4,7 @@ import (
4 "net/http" 4 "net/http"
5 5
6 "github.com/gavv/httpexpect" 6 "github.com/gavv/httpexpect"
7 - "github.com/go-pg/pg" 7 + "github.com/go-pg/pg/v10"
8 . "github.com/onsi/ginkgo" 8 . "github.com/onsi/ginkgo"
9 . "github.com/onsi/gomega" 9 . "github.com/onsi/gomega"
10 pG "github.com/tiptok/godevp/pkg/infrastructure/pg" 10 pG "github.com/tiptok/godevp/pkg/infrastructure/pg"