Skip to content

Commit

Permalink
add 2.0feature
Browse files Browse the repository at this point in the history
  • Loading branch information
dreamans committed Jan 27, 2019
1 parent c5a2652 commit 123d5be
Show file tree
Hide file tree
Showing 12 changed files with 809 additions and 35 deletions.
59 changes: 59 additions & 0 deletions model/project.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// Copyright 2019 syncd Author. All Rights Reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.

package model

import(
"time"
)

type Project struct {
ID int `gorm:"primary_key"`
Name string `gorm:"type:varchar(100);not null;default:''"`
Description string `gorm:"type:varchar(500);not null;default:''"`
NeedAudit int `gorm:"type:int(11);not null;default:0"`
RepoUrl string `gorm:"type:varchar(500);not null;default:''"`
RepoBranch string `gorm:"type:varchar(100);not null;default:''"`
PreReleaseCluster int `gorm:"type:int(11);not null;default:0"`
OnlineCluster string `gorm:"type:varchar(1000);not null;default:''"`
DeployUser string `gorm:"type:varchar(100);not null;default:''"`
DeployPath string `gorm:"type:varchar(500);not null;default:''"`
PreDeployCmd string `gorm:"type:text;not null"`
AfterDeployCmd string `gorm:"type:text;not null"`
DeployTimeout int `gorm:"type:int(11);not null;default:0"`
Ctime int `gorm:"type:int(11);not null;default:0"`
}

func (m *Project) TableName() string {
return "syd_project"
}

func (m *Project) Create() bool {
m.Ctime = int(time.Now().Unix())
return Create(m)
}

func (m *Project) Update() bool {
return UpdateByPk(m)
}

func (m *Project) List(query QueryParam) ([]Project, bool) {
var data []Project
ok := GetMulti(&data, query)
return data, ok
}

func (m *Project) Count(query QueryParam) (int, bool) {
var count int
ok := Count(m, &count, query)
return count, ok
}

func (m *Project) Delete() bool {
return DeleteByPk(m)
}

func (m *Project) Get(id int) bool {
return GetByPk(m, id)
}
56 changes: 51 additions & 5 deletions module/project/member.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ package project

import (
"errors"
//"fmt"

"github.com/dreamans/syncd/model"
)
Expand All @@ -22,21 +21,53 @@ type Member struct {
Ctime int `json:"ctime"`
}

func (m *Member) Delete() error {
member := &model.ProjectMember{
ID: m.ID,
}
if ok := member.Delete(); !ok {
return errors.New("remove project member failed")
}
return nil
}

func (m *Member) Total(spaceId int) (int, error) {
member := &model.ProjectMember{}
total, ok := member.Count(model.QueryParam{
Where: []model.WhereParam{
model.WhereParam{
Field: "space_id",
Prepare: spaceId,
},
},
})
if !ok {
return 0, errors.New("get project member count failed")
}
return total, nil
}

func (m *Member) List(spaceId, offset, limit int) ([]Member, error) {
member := &model.ProjectMember{}
list, ok := member.List(model.QueryParam{
Fields: "id, space_id, user_id, ctime",
Offset: offset,
Limit: limit,
Order: "id DESC",
Where: []model.WhereParam{
model.WhereParam{
Field: "space_id",
Prepare: spaceId,
},
},
})
if !ok {
return nil, errors.New("get project member list failed")
}

var (
memberList []Member
userIdList []int
userIdList, roleIdList []int
)
for _, l := range list {
userIdList = append(userIdList, l.UserId)
Expand All @@ -62,25 +93,40 @@ func (m *Member) List(spaceId, offset, limit int) ([]Member, error) {
return nil, errors.New("get project user detail list failed")
}
userMap := make(map[int]model.User)
var roleIdList []int
for _, l := range userList {
userMap[l.ID] = l
roleIdList = append(roleIdList, l.RoleId)
}
role := &model.UserRole{}
roleList, ok := role.List(model.QueryParam{
Fields: "id, role_id, username, email, status",
Fields: "id, name",
Where: []model.WhereParam{
model.WhereParam{
Field: "id",
Tag: "IN",
Prepare: userIdList,
Prepare: roleIdList,
},
},
})
if !ok {
return nil, errors.New("get project user role list failed")
}
roleMap := make(map[int]model.UserRole)
for _, l := range roleList {
roleMap[l.ID] = l
}

for k, m := range memberList {
if u, ok := userMap[m.UserId]; ok {
memberList[k].Username = u.Username
memberList[k].Email = u.Email
memberList[k].Status = u.Status
if r, ok := roleMap[u.RoleId]; ok {
memberList[k].RoleName = r.Name
}
}

}

return memberList, nil
}
Expand Down
58 changes: 58 additions & 0 deletions module/project/project.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
// Copyright 2019 syncd Author. All Rights Reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.

package project

import (
"errors"
//"fmt"

"github.com/dreamans/syncd/model"
"github.com/dreamans/syncd/util/gostring"
)

type Project struct {
ID int `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
NeedAudit int `json:"need_audit"`
RepoUrl string `json:"repo_url"`
RepoBranch string `json:"repo_branch"`
PreReleaseCluster int `json:"pre_release_cluster"`
OnlineCluster []int `json:"online_cluster"`
DeployUser string `json:"deploy_user"`
DeployPath string `json:"deploy_path"`
PreDeployCmd string `json:"pre_deploy_cmd"`
AfterDeployCmd string `json:"after_deploy_cmd"`
DeployTimeout int `json:"deploy_timeout"`
Ctime int `json:"ctime"`
}

func (p *Project) CreateOrUpdate() error {
project := &model.Project{
ID: p.ID,
Name: p.Name,
Description: p.Description,
NeedAudit: p.NeedAudit,
RepoUrl: p.RepoUrl,
RepoBranch: p.RepoBranch,
PreReleaseCluster: p.PreReleaseCluster,
OnlineCluster: gostring.JoinIntSlice2String(p.OnlineCluster, ","),
DeployUser: p.DeployUser,
DeployPath: p.DeployPath,
PreDeployCmd: p.PreDeployCmd,
AfterDeployCmd: p.AfterDeployCmd,
DeployTimeout: p.DeployTimeout,
}
if project.ID > 0 {
if ok := project.Update(); !ok {
return errors.New("create project failed")
}
} else {
if ok := project.Create(); !ok {
return errors.New("update project failed")
}
}
return nil
}
35 changes: 33 additions & 2 deletions router/project/member.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"github.com/dreamans/syncd/module/user"
"github.com/dreamans/syncd/module/project"
"github.com/dreamans/syncd/render"
//"github.com/dreamans/syncd/util/gostring"
"github.com/dreamans/syncd/util/gostring"
)

type MemberAddQueryBind struct {
Expand All @@ -23,13 +23,44 @@ type MemberListQueryBind struct {
Limit int `form:"limit" binding:"required,gte=1,lte=999"`
}

func MemberRemove(c *gin.Context) {
id := gostring.Str2Int(c.PostForm("id"))
if id == 0 {
render.ParamError(c, "id cannot be empty")
return
}
member := &project.Member{
ID: id,
}
if err := member.Delete(); err != nil {
render.AppError(c, err.Error())
return
}
render.JSON(c, nil)
}

func MemberList(c *gin.Context) {
var query MemberListQueryBind
if err := c.ShouldBind(&query); err != nil {
render.ParamError(c, err.Error())
return
}

m := &project.Member{}
memberList, err := m.List(query.SpaceId, query.Offset, query.Limit)
if err != nil {
render.AppError(c, err.Error())
return
}
total, err := m.Total(query.SpaceId)
if err != nil {
render.AppError(c, err.Error())
return
}

render.JSON(c, gin.H{
"list": memberList,
"total": total,
})
}

func MemberSearch(c *gin.Context) {
Expand Down
75 changes: 75 additions & 0 deletions router/project/project.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
// Copyright 2019 syncd Author. All Rights Reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.

package project

import (
"github.com/gin-gonic/gin"
"github.com/dreamans/syncd/render"
"github.com/dreamans/syncd/module/project"
"github.com/dreamans/syncd/util/gostring"
"github.com/dreamans/syncd/util/goslice"
)

type ProjectFormBind struct {
ID int `form:"id"`
Name string `form:"name" binding:"required"`
Description string `form:"description"`
NeedAudit int `form:"need_audit"`
RepoUrl string `form:"repo_url" binding:"required"`
RepoBranch string `form:"repo_branch"`
PreReleaseCluster int `form:"pre_release_cluster"`
OnlineCluster []int `form:"online_cluster" binding:"required"`
DeployUser string `form:"deploy_user" binding:"required"`
DeployPath string `form:"deploy_path" binding:"required"`
PreDeployCmd string `form:"pre_deploy_cmd"`
AfterDeployCmd string `form:"after_deploy_cmd"`
DeployTimeout int `form:"deploy_timeout" binding:"required"`
}

func ProjectAdd(c *gin.Context) {
projectCreateOrUpdate(c)
}

func ProjectUpdate(c *gin.Context) {
id := gostring.Str2Int(c.PostForm("id"))
if id == 0 {
render.ParamError(c, "id cannot be empty")
return
}
projectCreateOrUpdate(c)
}

func projectCreateOrUpdate(c *gin.Context) {
var projectForm ProjectFormBind
if err := c.ShouldBind(&projectForm); err != nil {
render.ParamError(c, err.Error())
return
}
onlineCluster := goslice.FilterSliceInt(projectForm.OnlineCluster)
if len(onlineCluster) == 0 {
render.ParamError(c, "online_cluster cannot be empty")
return
}
proj := &project.Project{
ID: projectForm.ID,
Name: projectForm.Name,
Description: projectForm.Description,
NeedAudit: projectForm.NeedAudit,
RepoUrl: projectForm.RepoUrl,
RepoBranch: projectForm.RepoBranch,
PreReleaseCluster: projectForm.PreReleaseCluster,
OnlineCluster: onlineCluster,
DeployUser: projectForm.DeployUser,
DeployPath: projectForm.DeployPath,
PreDeployCmd: projectForm.PreDeployCmd,
AfterDeployCmd: projectForm.AfterDeployCmd,
DeployTimeout: projectForm.DeployTimeout,
}
if err := proj.CreateOrUpdate(); err != nil {
render.AppError(c, err.Error())
return
}
render.Success(c)
}
3 changes: 3 additions & 0 deletions router/route/route.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,8 @@ func RegisterRoute() {
api.GET("/project/member/search", project.MemberSearch)
api.POST("/project/member/add", project.MemberAdd)
api.GET("/project/member/list", project.MemberList)
api.POST("/project/member/remove", project.MemberRemove)
api.POST("/project/add", project.ProjectAdd)
api.POST("/project/update", project.ProjectUpdate)
}
}
2 changes: 1 addition & 1 deletion web/public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="//at.alicdn.com/t/font_1024174_3zpkt7bmypk.css">
<link rel="stylesheet" type="text/css" href="//at.alicdn.com/t/font_1024174_6bvc7865du.css">
<title>web</title>
</head>
<body>
Expand Down
18 changes: 17 additions & 1 deletion web/src/api/project.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,20 @@ export function addMemberApi(data) {

export function listMemberApi(params) {
return get('/project/member/list', params)
}
}

export function removeMemberApi(data) {
return post('/project/member/remove', data)
}

export function newProjectApi(data) {
return post('/project/add', data)
}

export function updateProjectApi(data) {
return post('/project/update', data)
}

export function listProjectApi(params) {
return get('/project/list', params)
}
Loading

0 comments on commit 123d5be

Please sign in to comment.