作者 yangfu

branch fix bug

Squashed commit of the following:

commit 65f30f27951df5823526895d94c89ab0b8b49871
Author: yangfu <785409885@qq.com>
Date:   Wed Nov 18 15:14:17 2020 +0800

    1.操作日志修改
    2.客户端公共接口

commit 5602dfb1b9961cce87a9e08480e281d3fdad2771
Author: yangfu <785409885@qq.com>
Date:   Mon Nov 16 14:24:19 2020 +0800

    1.修复功能异常

commit 779c973def3e3c1ac9b0aa02e289aa3a24600ede
Author: yangfu <785409885@qq.com>
Date:   Wed Nov 11 16:00:19 2020 +0800

    1.token修改  2.查询操作不使用事务
@@ -9,6 +9,7 @@ require ( @@ -9,6 +9,7 @@ require (
9 github.com/go-pg/pg/v10 v10.0.0-beta.2 9 github.com/go-pg/pg/v10 v10.0.0-beta.2
10 //github.com/tal-tech/go-zero v1.0.11 10 //github.com/tal-tech/go-zero v1.0.11
11 github.com/linmadan/egglib-go v0.0.0-20191217144343-ca4539f95bf9 11 github.com/linmadan/egglib-go v0.0.0-20191217144343-ca4539f95bf9
  12 + github.com/stretchr/testify v1.5.1
12 //github.com/opentracing/opentracing-go v1.1.1-0.20190913142402-a7454ce5950e 13 //github.com/opentracing/opentracing-go v1.1.1-0.20190913142402-a7454ce5950e
13 //github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 14 //github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5
14 //github.com/openzipkin/zipkin-go v0.2.5 15 //github.com/openzipkin/zipkin-go v0.2.5
@@ -50,10 +50,12 @@ func (svr *AuthService) Login(header *protocol.RequestHeader, request *protocolx @@ -50,10 +50,12 @@ func (svr *AuthService) Login(header *protocol.RequestHeader, request *protocolx
50 err = protocol.NewCustomMessage(1, "该账号已被禁用!") 50 err = protocol.NewCustomMessage(1, "该账号已被禁用!")
51 return 51 return
52 } 52 }
53 - token, _ := common.GenerateToken(fmt.Sprintf("%v", user.Id), user.Passwd, common.WithExpire(domain.TokenExpire), common.WithAddData(map[string]interface{}{"UserName": user.Name})) 53 + token, _ := common.GenerateToken(fmt.Sprintf("%v", user.Id), user.Passwd, common.WithExpire(domain.TokenExpire), common.WithAddData(map[string]interface{}{"UserName": user.Name, "Phone": user.Phone}))
  54 + refreshToken, _ := common.GenerateToken(fmt.Sprintf("%v", user.Id), user.Passwd, common.WithExpire(domain.RefreshTokenExpire), common.WithAddData(map[string]interface{}{"UserName": user.Name, "Phone": user.Phone}))
54 rsp.Access = map[string]interface{}{ 55 rsp.Access = map[string]interface{}{
55 - "accessToken": token, //"Bearer " + token,  
56 - "expiresIn": domain.TokenExpire, 56 + "accessToken": token,
  57 + "refreshToken": refreshToken,
  58 + "expiresIn": domain.TokenExpire,
57 } 59 }
58 60
59 cache.Delete(cachex.UserRoleAccessCacheKey(user.Id)) 61 cache.Delete(cachex.UserRoleAccessCacheKey(user.Id))
@@ -81,6 +83,37 @@ func (svr *AuthService) Logout(header *protocol.RequestHeader, request *protocol @@ -81,6 +83,37 @@ func (svr *AuthService) Logout(header *protocol.RequestHeader, request *protocol
81 return 83 return
82 } 84 }
83 85
  86 +func (svr *AuthService) Refresh(header *protocol.RequestHeader, request *protocolx.RefreshRequest) (rsp interface{}, err error) {
  87 + var (
  88 + //transactionContext, _ = factory.CreateTransactionContext(nil)
  89 + )
  90 + //transactionContext.SetTransactionClose()
  91 + rsp = &protocolx.RefreshResponse{}
  92 + if err = request.ValidateCommand(); err != nil {
  93 + err = protocol.NewCustomMessage(2, err.Error())
  94 + return
  95 + }
  96 + //if err = transactionContext.StartTransaction(); err != nil {
  97 + // log.Error(err)
  98 + // return nil, err
  99 + //}
  100 + //defer func() {
  101 + // transactionContext.RollbackTransaction()
  102 + //}()
  103 +
  104 + claim, e := common.ParseJWTToken(request.RefreshToken)
  105 + if e != nil {
  106 + log.Error(e)
  107 + err = protocol.NewCustomMessage(-2, "权限过期,请重新登录")
  108 + return
  109 + }
  110 + log.Debug(claim.Username, claim.Password, time.Unix(claim.ExpiresAt, 0))
  111 + rsp, err = svr.Login(header, &protocolx.LoginRequest{UserName: (claim.AddData["Phone"]).(string), Password: claim.Password})
  112 +
  113 + //err = transactionContext.CommitTransaction()
  114 + return
  115 +}
  116 +
84 func (svr *AuthService) Profile(header *protocol.RequestHeader, request *protocolx.ProfileRequest) (rsp interface{}, err error) { 117 func (svr *AuthService) Profile(header *protocol.RequestHeader, request *protocolx.ProfileRequest) (rsp interface{}, err error) {
85 var ( 118 var (
86 transactionContext, _ = factory.CreateTransactionContext(nil) 119 transactionContext, _ = factory.CreateTransactionContext(nil)
@@ -187,16 +220,20 @@ func (svr *AuthService) ChangePassword(header *protocol.RequestHeader, request * @@ -187,16 +220,20 @@ func (svr *AuthService) ChangePassword(header *protocol.RequestHeader, request *
187 transactionContext.RollbackTransaction() 220 transactionContext.RollbackTransaction()
188 }() 221 }()
189 222
  223 + if claim, e := common.ParseJWTToken(header.Token); e == nil && len(request.Phone) == 0 {
  224 + request.Phone = claim.AddData["Phone"].(string)
  225 + }
  226 +
190 var user *domain.Users 227 var user *domain.Users
191 if user, err = UserRepository.FindOne(map[string]interface{}{"phone": request.Phone}); err != nil { 228 if user, err = UserRepository.FindOne(map[string]interface{}{"phone": request.Phone}); err != nil {
192 err = protocol.NewCustomMessage(1, "用户不存在") 229 err = protocol.NewCustomMessage(1, "用户不存在")
193 return 230 return
194 } 231 }
195 - if user.Passwd != request.OldPwd {  
196 - err = protocol.NewCustomMessage(1, "旧密码输入有误")  
197 - return  
198 - }  
199 - user.Passwd = request.NewPwd 232 + //if user.Passwd != request.OldPwd {
  233 + // err = protocol.NewCustomMessage(1, "旧密码输入有误")
  234 + // return
  235 + //}
  236 + user.Passwd = request.Password
200 if _, err = UserRepository.Save(user); err != nil { 237 if _, err = UserRepository.Save(user); err != nil {
201 return 238 return
202 } 239 }
@@ -2,6 +2,7 @@ package project_module_files @@ -2,6 +2,7 @@ package project_module_files
2 2
3 import ( 3 import (
4 "bytes" 4 "bytes"
  5 + "fmt"
5 "github.com/tiptok/gocomm/common" 6 "github.com/tiptok/gocomm/common"
6 "github.com/tiptok/gocomm/pkg/log" 7 "github.com/tiptok/gocomm/pkg/log"
7 "gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/application/factory" 8 "gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/application/factory"
@@ -11,6 +12,7 @@ import ( @@ -11,6 +12,7 @@ import (
11 "gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/protocol" 12 "gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/protocol"
12 protocolx "gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/protocol/project_module_files" 13 protocolx "gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/protocol/project_module_files"
13 "path/filepath" 14 "path/filepath"
  15 + "strconv"
14 "strings" 16 "strings"
15 "time" 17 "time"
16 ) 18 )
@@ -238,7 +240,7 @@ func (svr *ProjectModuleFilesService) ListProjectModuleFiles(header *protocol.Re @@ -238,7 +240,7 @@ func (svr *ProjectModuleFilesService) ListProjectModuleFiles(header *protocol.Re
238 } 240 }
239 rsp = map[string]interface{}{ 241 rsp = map[string]interface{}{
240 "total": total, 242 "total": total,
241 - "list": utils.LoadCustomField(projectModuleFiles, "Id", "FileType", "FileName", "ParentId", "Path", "CodeBlock"), 243 + "list": utils.LoadCustomField(projectModuleFiles, "Id", "FileType", "FileName", "ParentId", "Path", "CodeBlock", "Tag"),
242 } 244 }
243 if request.StructType == "tree" { 245 if request.StructType == "tree" {
244 rsp = map[string]interface{}{ 246 rsp = map[string]interface{}{
@@ -321,6 +323,51 @@ func (svr *ProjectModuleFilesService) Import(header *protocol.RequestHeader, req @@ -321,6 +323,51 @@ func (svr *ProjectModuleFilesService) Import(header *protocol.RequestHeader, req
321 return 323 return
322 } 324 }
323 325
  326 +// ReviseTag
  327 +// 修订标签
  328 +func (svr *ProjectModuleFilesService) ReviseTag(header *protocol.RequestHeader, request *protocolx.ReviseTagRequest) (rsp interface{}, err error) {
  329 + var (
  330 + transactionContext, _ = factory.CreateTransactionContext(nil)
  331 + )
  332 + rsp = &protocolx.ReviseTagResponse{}
  333 + if err = request.ValidateCommand(); err != nil {
  334 + err = protocol.NewCustomMessage(2, err.Error())
  335 + return
  336 + }
  337 + if err = transactionContext.StartTransaction(); err != nil {
  338 + log.Error(err)
  339 + return nil, err
  340 + }
  341 + defer func() {
  342 + transactionContext.RollbackTransaction()
  343 + }()
  344 +
  345 + var ProjectModuleFilesRepository, _ = factory.CreateProjectModuleFilesRepository(transactionContext)
  346 + var projectModuleFiles *domain.ProjectModuleFiles
  347 + if projectModuleFiles, err = ProjectModuleFilesRepository.FindOne(map[string]interface{}{"id": request.Id}); err != nil {
  348 + return
  349 + }
  350 +
  351 + var lastTag string
  352 + // 为传入tag,自动生成一个tag
  353 + if len(request.Tag) == 0 {
  354 + if lastProjectModuleFiles, e := ProjectModuleFilesRepository.FindOne(map[string]interface{}{
  355 + "projectModuleId": projectModuleFiles.ProjectModuleId,
  356 + "projectModuleVersionId": projectModuleFiles.ProjectModuleVersionId, "path": projectModuleFiles.Path, "orderByTag": "DESC"}); e == nil {
  357 + lastTag = lastProjectModuleFiles.Tag
  358 + }
  359 + }
  360 + lastTag = makeTag(lastTag)
  361 + projectModuleFiles.Tag = lastTag
  362 + projectModuleFiles.Id = 0
  363 + if rsp, err = ProjectModuleFilesRepository.Save(projectModuleFiles); err != nil {
  364 + return
  365 + }
  366 +
  367 + err = transactionContext.CommitTransaction()
  368 + return
  369 +}
  370 +
324 func (svr *ProjectModuleFilesService) save(request *domain.ProjectModuleFiles, ProjectModuleFilesRepository domain.ProjectModuleFilesRepository) (rsp *domain.ProjectModuleFiles, err error) { 371 func (svr *ProjectModuleFilesService) save(request *domain.ProjectModuleFiles, ProjectModuleFilesRepository domain.ProjectModuleFilesRepository) (rsp *domain.ProjectModuleFiles, err error) {
325 if request.ParentId > 0 { 372 if request.ParentId > 0 {
326 if pfile, e := ProjectModuleFilesRepository.FindOne(map[string]interface{}{"id": request.ParentId, "projectModuleId": request.ProjectModuleId, "projectModuleVersionId": request.ProjectModuleVersionId}); e != nil { 373 if pfile, e := ProjectModuleFilesRepository.FindOne(map[string]interface{}{"id": request.ParentId, "projectModuleId": request.ProjectModuleId, "projectModuleVersionId": request.ProjectModuleVersionId}); e != nil {
@@ -416,3 +463,27 @@ func NewProjectModuleFilesService(options map[string]interface{}) *ProjectModule @@ -416,3 +463,27 @@ func NewProjectModuleFilesService(options map[string]interface{}) *ProjectModule
416 svr := &ProjectModuleFilesService{} 463 svr := &ProjectModuleFilesService{}
417 return svr 464 return svr
418 } 465 }
  466 +
  467 +func makeTag(lastTag string) string {
  468 + if len(lastTag) == 0 {
  469 + return "v0.1"
  470 + }
  471 + rspTag := lastTag + common.RandomString(1)
  472 + if strings.Index(lastTag, "v") < 0 {
  473 + return rspTag
  474 + }
  475 + lastTag = lastTag[1:]
  476 + rspTag = "v"
  477 + splitTag := strings.Split(lastTag, ".")
  478 + for i, v := range splitTag {
  479 + version, _ := strconv.Atoi(v)
  480 + if version > 0 {
  481 + return fmt.Sprintf("%v%v", rspTag, version+1)
  482 + }
  483 + rspTag += v
  484 + if i+1 != len(splitTag) {
  485 + rspTag += "."
  486 + }
  487 + }
  488 + return rspTag + common.RandomString(1)
  489 +}
  1 +package project_module_files
  2 +
  3 +import (
  4 + "github.com/stretchr/testify/assert"
  5 + "testing"
  6 +)
  7 +
  8 +func TestMakeTag(t *testing.T) {
  9 + input := []struct {
  10 + InTag string
  11 + ExceptTag string
  12 + }{
  13 + {"", "v0.1"},
  14 + {"v1", "v2"},
  15 + {"v0.1", "v0.2"},
  16 + {"v0.0.1", "v0.0.2"},
  17 + {"v1.1", "v2"},
  18 + {"v0.1.1", "v0.2"},
  19 + {"v9", "v10"},
  20 + }
  21 + for _, v := range input {
  22 + assert.Equal(t, v.ExceptTag, makeTag(v.InTag))
  23 + }
  24 +}
@@ -65,6 +65,9 @@ func (svr *ProjectModuleVersionService) CreateProjectModuleVersion(header *proto @@ -65,6 +65,9 @@ func (svr *ProjectModuleVersionService) CreateProjectModuleVersion(header *proto
65 if err = ProjectModuleDao.DuplicateVersion(srcVersion.ProjectModuleId, srcVersion.Id, currentPMVersionId); err != nil { 65 if err = ProjectModuleDao.DuplicateVersion(srcVersion.ProjectModuleId, srcVersion.Id, currentPMVersionId); err != nil {
66 return 66 return
67 } 67 }
  68 + if err = ProjectModuleDao.FixParentIdByPath(srcVersion.ProjectModuleId, currentPMVersionId); err != nil {
  69 + return
  70 + }
68 err = transactionContext.CommitTransaction() 71 err = transactionContext.CommitTransaction()
69 return 72 return
70 } 73 }
1 package domain 1 package domain
2 2
3 -const TokenExpire = 24 * 3600 3 +const TokenExpire = 24 * 3600 * 2
  4 +const RefreshTokenExpire = 24 * 3600 * 14
@@ -35,6 +35,8 @@ type ProjectModuleFiles struct { @@ -35,6 +35,8 @@ type ProjectModuleFiles struct {
35 UpdateTime time.Time `json:"-"` 35 UpdateTime time.Time `json:"-"`
36 // 当前文件相对路径 a/b/c 36 // 当前文件相对路径 a/b/c
37 Path string `json:"path"` 37 Path string `json:"path"`
  38 + // 标签
  39 + Tag string `json:"tag"`
38 } 40 }
39 41
40 type ProjectModuleFilesRepository interface { 42 type ProjectModuleFilesRepository interface {
@@ -17,6 +17,13 @@ select ?,?,file_type,file_name,file_key,code_block,parent_id,sort,remark,now(),n @@ -17,6 +17,13 @@ select ?,?,file_type,file_name,file_key,code_block,parent_id,sort,remark,now(),n
17 return err 17 return err
18 } 18 }
19 19
  20 +func (dao *ProjectModuleDao) FixParentIdByPath(srcProjectId, curVersionId int64) error {
  21 + tx := dao.transactionContext.PgTx
  22 + _, err := tx.Exec(`update project_module_files A set parent_id =coalesce((select id from project_module_files B where B.project_module_id=? and B.project_module_version_id=? and B.path=substr(A.path,0,"position"(A.path,A.file_name)-1) limit 1),0) where project_module_id=? and project_module_version_id=?`,
  23 + srcProjectId, curVersionId, srcProjectId, curVersionId)
  24 + return err
  25 +}
  26 +
20 func NewProjectModuleDao(transactionContext *transaction.TransactionContext) (*ProjectModuleDao, error) { 27 func NewProjectModuleDao(transactionContext *transaction.TransactionContext) (*ProjectModuleDao, error) {
21 if transactionContext == nil { 28 if transactionContext == nil {
22 return nil, fmt.Errorf("transactionContext参数不能为nil") 29 return nil, fmt.Errorf("transactionContext参数不能为nil")
@@ -31,4 +31,6 @@ type ProjectModuleFiles struct { @@ -31,4 +31,6 @@ type ProjectModuleFiles struct {
31 UpdateTime time.Time 31 UpdateTime time.Time
32 // 当前文件相对路径 a/b/c 32 // 当前文件相对路径 a/b/c
33 Path string 33 Path string
  34 + // 标签
  35 + Tag string `pg:",use_zero"`
34 } 36 }
@@ -56,6 +56,8 @@ func (repository *ProjectModuleFilesRepository) FindOne(queryOptions map[string] @@ -56,6 +56,8 @@ func (repository *ProjectModuleFilesRepository) FindOne(queryOptions map[string]
56 query.SetWhere("parent_id = ?", "parentId") 56 query.SetWhere("parent_id = ?", "parentId")
57 query.SetWhere("file_key = ?", "fileKey") 57 query.SetWhere("file_key = ?", "fileKey")
58 query.SetWhere("path = ?", "path") 58 query.SetWhere("path = ?", "path")
  59 +
  60 + query.SetOrder("tag", "orderByTag")
59 if err := query.First(); err != nil { 61 if err := query.First(); err != nil {
60 return nil, fmt.Errorf("query row not found") 62 return nil, fmt.Errorf("query row not found")
61 } 63 }
@@ -57,6 +57,31 @@ func (controller *AuthController) Logout() { @@ -57,6 +57,31 @@ func (controller *AuthController) Logout() {
57 msg = protocol.NewResponseMessageData(data, err) 57 msg = protocol.NewResponseMessageData(data, err)
58 } 58 }
59 59
  60 +// Refresh
  61 +// 权限刷新
  62 +func (controller *AuthController) Refresh() {
  63 + var (
  64 + msg *protocol.ResponseMessage
  65 + svr = auth.NewAuthService(nil)
  66 + request = &protocolx.RefreshRequest{}
  67 + )
  68 + defer func() {
  69 + controller.Resp(msg)
  70 + }()
  71 +
  72 + if err := controller.JsonUnmarshal(request); err != nil {
  73 + msg = protocol.NewResponseMessage(2, err.Error())
  74 + return
  75 + }
  76 +
  77 + header := controller.GetRequestHeader(controller.Ctx)
  78 + data, err := svr.Refresh(header, request)
  79 + if err != nil {
  80 + log.Error(err)
  81 + }
  82 + msg = protocol.NewResponseMessageData(data, err)
  83 +}
  84 +
60 // Profile 85 // Profile
61 // 获取当前用户数据 86 // 获取当前用户数据
62 func (controller *AuthController) Profile() { 87 func (controller *AuthController) Profile() {
@@ -7,6 +7,7 @@ import ( @@ -7,6 +7,7 @@ import (
7 "github.com/astaxie/beego/context" 7 "github.com/astaxie/beego/context"
8 "github.com/tiptok/gocomm/common" 8 "github.com/tiptok/gocomm/common"
9 "gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/protocol" 9 "gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/protocol"
  10 + "strings"
10 ) 11 )
11 12
12 type BaseController struct { 13 type BaseController struct {
@@ -38,7 +39,7 @@ func (controller BaseController) BodyKeys(firstCaseToUpper bool) []string { @@ -38,7 +39,7 @@ func (controller BaseController) BodyKeys(firstCaseToUpper bool) []string {
38 } 39 }
39 40
40 func (controller *BaseController) Resp(msg *protocol.ResponseMessage) { 41 func (controller *BaseController) Resp(msg *protocol.ResponseMessage) {
41 - if msg.Errno != 0 { 42 + if msg.Errno > 0 {
42 msg.Errno = -1 43 msg.Errno = -1
43 } 44 }
44 controller.Data["json"] = msg 45 controller.Data["json"] = msg
@@ -65,6 +66,10 @@ func (controller *BaseController) GetRequestHeader(ctx *context.Context) *protoc @@ -65,6 +66,10 @@ func (controller *BaseController) GetRequestHeader(ctx *context.Context) *protoc
65 if v := ctx.Input.GetData("x-mmm-uname"); v != nil { 66 if v := ctx.Input.GetData("x-mmm-uname"); v != nil {
66 h.UserName = v.(string) 67 h.UserName = v.(string)
67 } 68 }
  69 + h.Token = ctx.Input.Header("Authorization")
  70 + if len(h.Token) > 0 && len(strings.Split(h.Token, " ")) > 1 {
  71 + h.Token = strings.Split(h.Token, " ")[1]
  72 + }
68 h.BodyKeys = controller.BodyKeys(true) 73 h.BodyKeys = controller.BodyKeys(true)
69 return h 74 return h
70 } 75 }
@@ -165,6 +165,31 @@ func (controller *ProjectModuleFilesController) Import() { @@ -165,6 +165,31 @@ func (controller *ProjectModuleFilesController) Import() {
165 msg = protocol.NewResponseMessageData(data, err) 165 msg = protocol.NewResponseMessageData(data, err)
166 } 166 }
167 167
  168 +// ReviseTag
  169 +// 修订标签
  170 +func (controller *ProjectModuleFilesController) ReviseTag() {
  171 + var (
  172 + msg *protocol.ResponseMessage
  173 + svr = project_module_files.NewProjectModuleFilesService(nil)
  174 + request = &protocolx.ReviseTagRequest{}
  175 + )
  176 + defer func() {
  177 + controller.Resp(msg)
  178 + }()
  179 +
  180 + if err := controller.JsonUnmarshal(request); err != nil {
  181 + msg = protocol.NewResponseMessage(2, err.Error())
  182 + return
  183 + }
  184 +
  185 + header := controller.GetRequestHeader(controller.Ctx)
  186 + data, err := svr.ReviseTag(header, request)
  187 + if err != nil {
  188 + log.Error(err)
  189 + }
  190 + msg = protocol.NewResponseMessageData(data, err)
  191 +}
  192 +
168 //获取排序键值 193 //获取排序键值
169 func getSortFileKeys(files map[string][]*multipart.FileHeader) (keys []string) { 194 func getSortFileKeys(files map[string][]*multipart.FileHeader) (keys []string) {
170 for k, _ := range files { 195 for k, _ := range files {
@@ -50,6 +50,7 @@ func CheckAuthorization(ctx *context.Context) { @@ -50,6 +50,7 @@ func CheckAuthorization(ctx *context.Context) {
50 userId, _ := strconv.Atoi(claim.Username) 50 userId, _ := strconv.Atoi(claim.Username)
51 ctx.Input.SetData("x-mmm-id", userId) 51 ctx.Input.SetData("x-mmm-id", userId)
52 ctx.Input.SetData("x-mmm-uname", claim.AddData["UserName"]) 52 ctx.Input.SetData("x-mmm-uname", claim.AddData["UserName"])
  53 + //ctx.Input.SetData("x-mmm-phone", claim.AddData["Phone"])
53 return 54 return
54 } 55 }
55 56
@@ -8,6 +8,7 @@ import ( @@ -8,6 +8,7 @@ import (
8 func init() { 8 func init() {
9 beego.Router("/v1/auth/login", &controllers.AuthController{}, "post:Login") 9 beego.Router("/v1/auth/login", &controllers.AuthController{}, "post:Login")
10 beego.Router("/v1/auth/logout", &controllers.AuthController{}, "post:Logout") 10 beego.Router("/v1/auth/logout", &controllers.AuthController{}, "post:Logout")
  11 + beego.Router("/v1/auth/refresh", &controllers.AuthController{}, "post:Refresh")
11 beego.Router("/v1/auth/profile", &controllers.AuthController{}, "post:Profile") 12 beego.Router("/v1/auth/profile", &controllers.AuthController{}, "post:Profile")
12 beego.Router("/v1/auth/captcha-init", &controllers.AuthController{}, "post:CaptchaInit") 13 beego.Router("/v1/auth/captcha-init", &controllers.AuthController{}, "post:CaptchaInit")
13 beego.Router("/v1/auth/changePassword", &controllers.AuthController{}, "post:ChangePassword") 14 beego.Router("/v1/auth/changePassword", &controllers.AuthController{}, "post:ChangePassword")
@@ -13,6 +13,7 @@ func init() { @@ -13,6 +13,7 @@ func init() {
13 beego.Router("/v1/project_module_files/", &controllers.ProjectModuleFilesController{}, "GET:ListProjectModuleFiles") 13 beego.Router("/v1/project_module_files/", &controllers.ProjectModuleFilesController{}, "GET:ListProjectModuleFiles")
14 14
15 beego.Router("/v1/project_module_files/import", &controllers.ProjectModuleFilesController{}, "post:Import") 15 beego.Router("/v1/project_module_files/import", &controllers.ProjectModuleFilesController{}, "post:Import")
  16 + beego.Router("/v1/project_module_files/revise", &controllers.ProjectModuleFilesController{}, "post:ReviseTag")
16 17
17 beego.Router("/v1/client/project_module_files/", &controllers.ProjectModuleFilesController{}, "GET:ListProjectModuleFiles") 18 beego.Router("/v1/client/project_module_files/", &controllers.ProjectModuleFilesController{}, "GET:ListProjectModuleFiles")
18 } 19 }
1 package auth 1 package auth
2 2
3 import ( 3 import (
4 - "errors"  
5 "fmt" 4 "fmt"
6 "github.com/astaxie/beego/validation" 5 "github.com/astaxie/beego/validation"
7 ) 6 )
8 7
9 type ChangePasswordRequest struct { 8 type ChangePasswordRequest struct {
10 - Phone string `json:"phone" valid:"Required"`  
11 - OldPwd string `json:"oldPassword" valid:"Required"`  
12 - NewPwd string `json:"newPassword" valid:"Required"` 9 + Phone string `json:"phone" valid:"Required"`
  10 + //OldPwd string `json:"oldPassword" valid:"Required"`
  11 + //NewPwd string `json:"newPassword" valid:"Required"`
  12 + Password string `json:"pwd"`
13 } 13 }
14 14
15 func (ChangePasswordRequest *ChangePasswordRequest) ValidateCommand() error { 15 func (ChangePasswordRequest *ChangePasswordRequest) ValidateCommand() error {
@@ -18,9 +18,9 @@ func (ChangePasswordRequest *ChangePasswordRequest) ValidateCommand() error { @@ -18,9 +18,9 @@ func (ChangePasswordRequest *ChangePasswordRequest) ValidateCommand() error {
18 if err != nil { 18 if err != nil {
19 return err 19 return err
20 } 20 }
21 - if ChangePasswordRequest.OldPwd == ChangePasswordRequest.NewPwd {  
22 - return errors.New("新旧密码不能相同")  
23 - } 21 + //if ChangePasswordRequest.OldPwd == ChangePasswordRequest.NewPwd {
  22 + // return errors.New("新旧密码不能相同")
  23 + //}
24 if !b { 24 if !b {
25 for _, validErr := range valid.Errors { 25 for _, validErr := range valid.Errors {
26 return fmt.Errorf("%s %s", validErr.Key, validErr.Message) 26 return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  1 +package auth
  2 +
  3 +import (
  4 + "fmt"
  5 + "github.com/astaxie/beego/validation"
  6 +)
  7 +
  8 +type RefreshRequest struct {
  9 + RefreshToken string `json:"refreshToken" valid:"Required"`
  10 +}
  11 +
  12 +func (RefreshRequest *RefreshRequest) ValidateCommand() error {
  13 + valid := validation.Validation{}
  14 + b, err := valid.Valid(RefreshRequest)
  15 + if err != nil {
  16 + return err
  17 + }
  18 + if !b {
  19 + for _, validErr := range valid.Errors {
  20 + return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  21 + }
  22 + }
  23 + return nil
  24 +}
  1 +package auth
  2 +
  3 +import (
  4 + "fmt"
  5 + "github.com/astaxie/beego/validation"
  6 +)
  7 +
  8 +type RefreshResponse struct {
  9 +}
  10 +
  11 +func (RefreshResponse *RefreshResponse) ValidateCommand() error {
  12 + valid := validation.Validation{}
  13 + b, err := valid.Valid(RefreshResponse)
  14 + if err != nil {
  15 + return err
  16 + }
  17 + if !b {
  18 + for _, validErr := range valid.Errors {
  19 + return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  20 + }
  21 + }
  22 + return nil
  23 +}
@@ -11,7 +11,7 @@ type UpdateClientVersionRequest struct { @@ -11,7 +11,7 @@ type UpdateClientVersionRequest struct {
11 // 提交人 11 // 提交人
12 Commiter int64 `json:"commiter,omitempty"` 12 Commiter int64 `json:"commiter,omitempty"`
13 // 项目名称 13 // 项目名称
14 - ProjectName int64 `json:"projectName,omitempty"` 14 + ProjectName string `json:"projectName,omitempty"`
15 // 版本号 15 // 版本号
16 Version string `json:"version,omitempty"` 16 Version string `json:"version,omitempty"`
17 // 标题 17 // 标题
  1 +package project_module_files
  2 +
  3 +import (
  4 + "fmt"
  5 + "github.com/astaxie/beego/validation"
  6 +)
  7 +
  8 +type ReviseTagRequest struct {
  9 + Id int64 `json:"id" valid:"Required"`
  10 + Tag string `json:"tag"`
  11 +}
  12 +
  13 +func (PatchTagRequest *ReviseTagRequest) ValidateCommand() error {
  14 + valid := validation.Validation{}
  15 + b, err := valid.Valid(PatchTagRequest)
  16 + if err != nil {
  17 + return err
  18 + }
  19 + if !b {
  20 + for _, validErr := range valid.Errors {
  21 + return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  22 + }
  23 + }
  24 + return nil
  25 +}
  1 +package project_module_files
  2 +
  3 +import (
  4 + "fmt"
  5 + "github.com/astaxie/beego/validation"
  6 +)
  7 +
  8 +type ReviseTagResponse struct {
  9 +}
  10 +
  11 +func (PatchTagResponse *ReviseTagResponse) ValidateCommand() error {
  12 + valid := validation.Validation{}
  13 + b, err := valid.Valid(PatchTagResponse)
  14 + if err != nil {
  15 + return err
  16 + }
  17 + if !b {
  18 + for _, validErr := range valid.Errors {
  19 + return fmt.Errorf("%s %s", validErr.Key, validErr.Message)
  20 + }
  21 + }
  22 + return nil
  23 +}
@@ -133,5 +133,6 @@ var errmessge ErrorMap = map[int]string{ @@ -133,5 +133,6 @@ var errmessge ErrorMap = map[int]string{
133 type RequestHeader struct { 133 type RequestHeader struct {
134 UserId int64 //UserId 唯一标识 134 UserId int64 //UserId 唯一标识
135 UserName string 135 UserName string
  136 + Token string
136 BodyKeys []string 137 BodyKeys []string
137 } 138 }