Added method to add a user to a team

This commit is contained in:
konrad 2018-07-26 09:53:32 +02:00 committed by kolaente
parent 0b2f66965a
commit bc580e0115
Signed by untrusted user: konrad
GPG Key ID: F40E70337AB24C9B
8 changed files with 66 additions and 8 deletions

View File

@ -8,3 +8,5 @@ Content-Type: application/json
} }
> {% client.global.set("auth_token", response.body.token); %} > {% client.global.set("auth_token", response.body.token); %}
###

29
REST-Tests/teams.http Normal file
View File

@ -0,0 +1,29 @@
# Get all teams
GET http://localhost:8080/api/v1/teams
Authorization: Bearer {{auth_token}}
###
# Get one team
GET http://localhost:8080/api/v1/teams/28
Authorization: Bearer {{auth_token}}
###
# Add a new member to that team
PUT http://localhost:8080/api/v1/teams/28/members
Authorization: Bearer {{auth_token}}
Content-Type: application/json
{
"user_id": 2
}
###
# Delete a member from a team
DELETE http://localhost:8080/api/v1/teams/28/members/2
Authorization: Bearer {{auth_token}}
###

View File

@ -2,7 +2,19 @@ package models
// Create implements the create method to assign a user to a team // Create implements the create method to assign a user to a team
func (tm *TeamMember) Create(doer *User) (err error) { func (tm *TeamMember) Create(doer *User) (err error) {
// TODO: Check if it exists etc // Check if the team extst
_, err = GetTeamByID(tm.TeamID)
if err != nil {
return
}
// Check if the user exists
_, _, err = GetUserByID(tm.UserID)
if err != nil {
return
}
// Insert the user
_, err = x.Insert(tm) _, err = x.Insert(tm)
return return
} }

View File

@ -0,0 +1,9 @@
package models
func (tm *TeamMember) CanCreate(user *User) bool {
// A user can add a member to a team if he is admin of that team
exists, _ := x.Where("user_id = ? AND team_id = ? AND admin = ?", user.ID, tm.TeamID, true).
Get(&TeamMember{})
return exists
}

View File

@ -38,9 +38,9 @@ func (t *Team) AfterLoad() {
// TeamMember defines the relationship between a user and a team // TeamMember defines the relationship between a user and a team
type TeamMember struct { type TeamMember struct {
ID int64 `xorm:"int(11) autoincr not null unique pk" json:"id"` ID int64 `xorm:"int(11) autoincr not null unique pk" json:"id"`
TeamID int64 `xorm:"int(11) not null" json:"team_id"` TeamID int64 `xorm:"int(11) not null" json:"team_id" param:"team"`
UserID int64 `xorm:"int(11) not null" json:"user_id"` UserID int64 `xorm:"int(11) not null" json:"user_id" param:"user"`
IsAdmin bool `xorm:"tinyint(1)" json:"is_admin"` Admin bool `xorm:"tinyint(1)" json:"admin"`
Created int64 `xorm:"created" json:"created"` Created int64 `xorm:"created" json:"created"`
Updated int64 `xorm:"updated" json:"updated"` Updated int64 `xorm:"updated" json:"updated"`
@ -57,7 +57,7 @@ func (TeamMember) TableName() string {
// TeamUser is the team member type // TeamUser is the team member type
type TeamUser struct { type TeamUser struct {
User `xorm:"extends"` User `xorm:"extends"`
IsAdmin bool `json:"is_admin"` Admin bool `json:"admin"`
} }
// GetAllTeamsByNamespaceID returns all teams for a namespace // GetAllTeamsByNamespaceID returns all teams for a namespace

View File

@ -16,7 +16,7 @@ func (t *Team) Create(doer *User) (err error) {
} }
// Insert the current user as member and admin // Insert the current user as member and admin
tm := TeamMember{TeamID: t.ID, UserID: doer.ID, IsAdmin: true} tm := TeamMember{TeamID: t.ID, UserID: doer.ID, Admin: true}
err = tm.Create(doer) err = tm.Create(doer)
return return
} }

View File

@ -38,7 +38,7 @@ func (t *Team) CanUpdate(user *User) bool {
// Check if the current user is in the team and has admin rights in it // Check if the current user is in the team and has admin rights in it
exists, _ := x.Where("team_id = ?", t.ID). exists, _ := x.Where("team_id = ?", t.ID).
And("user_id = ?", user.ID). And("user_id = ?", user.ID).
And("is_admin = ?", true). And("admin = ?", true).
Get(&TeamMember{}) Get(&TeamMember{})
return exists return exists
@ -54,7 +54,7 @@ func (t *Team) CanDelete(user *User) bool {
func (t *Team) IsAdmin(user *User) bool { func (t *Team) IsAdmin(user *User) bool {
exists, _ := x.Where("team_id = ?", t.ID). exists, _ := x.Where("team_id = ?", t.ID).
And("user_id = ?", user.ID). And("user_id = ?", user.ID).
And("is_admin = ?", true). And("admin = ?", true).
Get(&TeamMember{}) Get(&TeamMember{})
return exists return exists
} }

View File

@ -157,4 +157,10 @@ func RegisterRoutes(e *echo.Echo) {
a.PUT("/teams", teamHandler.CreateWeb) a.PUT("/teams", teamHandler.CreateWeb)
a.POST("/teams/:team", teamHandler.UpdateWeb) a.POST("/teams/:team", teamHandler.UpdateWeb)
a.DELETE("/teams/:team", teamHandler.DeleteWeb) a.DELETE("/teams/:team", teamHandler.DeleteWeb)
teamMemberHandler := &crud.WebHandler{
CObject: &models.TeamMember{},
}
a.PUT("/teams/:team/members", teamMemberHandler.CreateWeb)
a.DELETE("/teams/:team/members/:user", teamMemberHandler.DeleteWeb)
} }