implemented create team <-> namespace relation
This commit is contained in:
parent
2e3c10be13
commit
7feb82702d
8 changed files with 80 additions and 17 deletions
|
@ -133,7 +133,7 @@ Teams sind global, d.h. Ein Team kann mehrere Namespaces verwalten.
|
||||||
*Routen*
|
*Routen*
|
||||||
|
|
||||||
* [ ] `namespaces/:id/teams`
|
* [ ] `namespaces/:id/teams`
|
||||||
* [ ] Create
|
* [x] Create
|
||||||
* [ ] ReadAll
|
* [ ] ReadAll
|
||||||
* [ ] Delete
|
* [ ] Delete
|
||||||
* [ ] `lists/:id/teams`
|
* [ ] `lists/:id/teams`
|
||||||
|
|
|
@ -387,3 +387,18 @@ func IsErrTeamDoesNotExist(err error) bool {
|
||||||
func (err ErrTeamDoesNotExist) Error() string {
|
func (err ErrTeamDoesNotExist) Error() string {
|
||||||
return fmt.Sprintf("Team does not exist [Team ID: %d]", err.TeamID)
|
return fmt.Sprintf("Team does not exist [Team ID: %d]", err.TeamID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ErrInvalidTeamRight represents an error where a team right is invalid
|
||||||
|
type ErrInvalidTeamRight struct {
|
||||||
|
Right NamespaceRight
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsErrInvalidTeamRight checks if an error is ErrInvalidTeamRight.
|
||||||
|
func IsErrInvalidTeamRight(err error) bool {
|
||||||
|
_, ok := err.(ErrInvalidTeamRight)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
func (err ErrInvalidTeamRight) Error() string {
|
||||||
|
return fmt.Sprintf("The right is invalid [Right: %d]", err.Right)
|
||||||
|
}
|
||||||
|
|
20
models/team_namespace.go
Normal file
20
models/team_namespace.go
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
package models
|
||||||
|
|
||||||
|
// TeamNamespace defines the relationship between a Team and a Namespace
|
||||||
|
type TeamNamespace struct {
|
||||||
|
ID int64 `xorm:"int(11) autoincr not null unique pk" json:"id"`
|
||||||
|
TeamID int64 `xorm:"int(11) not null" json:"team_id"`
|
||||||
|
NamespaceID int64 `xorm:"int(11) not null" json:"namespace_id"`
|
||||||
|
Right NamespaceRight `xorm:"int(11)" json:"right"`
|
||||||
|
|
||||||
|
Created int64 `xorm:"created" json:"created"`
|
||||||
|
Updated int64 `xorm:"updated" json:"updated"`
|
||||||
|
|
||||||
|
CRUDable `xorm:"-" json:"-"`
|
||||||
|
Rights `xorm:"-" json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName makes beautiful table names
|
||||||
|
func (TeamNamespace) TableName() string {
|
||||||
|
return "team_namespaces"
|
||||||
|
}
|
27
models/team_namespace_create.go
Normal file
27
models/team_namespace_create.go
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
package models
|
||||||
|
|
||||||
|
// Create creates a new team <-> namespace relation
|
||||||
|
func (tn *TeamNamespace) Create(doer *User, nID int64) (err error) {
|
||||||
|
|
||||||
|
// Check if the rights are valid
|
||||||
|
if tn.Right != NamespaceRightAdmin && tn.Right != NamespaceRightRead && tn.Right != NamespaceRightWrite {
|
||||||
|
return ErrInvalidTeamRight{tn.Right}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the team exists
|
||||||
|
_, err = GetTeamByID(tn.TeamID)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the namespace exists
|
||||||
|
_, err = GetNamespaceByID(nID)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
tn.NamespaceID = nID
|
||||||
|
|
||||||
|
// Insert the new team
|
||||||
|
_, err = x.Insert(tn)
|
||||||
|
return
|
||||||
|
}
|
7
models/team_namespace_rights.go
Normal file
7
models/team_namespace_rights.go
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
package models
|
||||||
|
|
||||||
|
// CanCreate checks if one can create a new team <-> namespace relation
|
||||||
|
func (tn *TeamNamespace) CanCreate(user *User, _ int64) bool {
|
||||||
|
n, _ := GetNamespaceByID(tn.NamespaceID)
|
||||||
|
return n.IsAdmin(user)
|
||||||
|
}
|
|
@ -60,22 +60,6 @@ type TeamUser struct {
|
||||||
IsAdmin bool `json:"is_admin"`
|
IsAdmin bool `json:"is_admin"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// TeamNamespace defines the relationship between a Team and a Namespace
|
|
||||||
type TeamNamespace struct {
|
|
||||||
ID int64 `xorm:"int(11) autoincr not null unique pk" json:"id"`
|
|
||||||
TeamID int64 `xorm:"int(11) not null" json:"team_id"`
|
|
||||||
NamespaceID int64 `xorm:"int(11) not null" json:"namespace_id"`
|
|
||||||
Rights NamespaceRight `xorm:"int(11)" json:"rights"`
|
|
||||||
|
|
||||||
Created int64 `xorm:"created" json:"created"`
|
|
||||||
Updated int64 `xorm:"updated" json:"updated"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// TableName makes beautiful table names
|
|
||||||
func (TeamNamespace) TableName() string {
|
|
||||||
return "team_namespaces"
|
|
||||||
}
|
|
||||||
|
|
||||||
// TeamList defines the relation between a team and a list
|
// TeamList defines the relation between a team and a list
|
||||||
type TeamList struct {
|
type TeamList 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"`
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package crud
|
package crud
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"git.kolaente.de/konrad/list/models"
|
"git.kolaente.de/konrad/list/models"
|
||||||
"github.com/labstack/echo"
|
"github.com/labstack/echo"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
@ -62,6 +63,8 @@ func (c *WebHandler) CreateWeb(ctx echo.Context) error {
|
||||||
return echo.NewHTTPError(http.StatusBadRequest, "The team name cannot be empty.")
|
return echo.NewHTTPError(http.StatusBadRequest, "The team name cannot be empty.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println(err)
|
||||||
|
|
||||||
return echo.NewHTTPError(http.StatusInternalServerError)
|
return echo.NewHTTPError(http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -113,6 +113,13 @@ func RegisterRoutes(e *echo.Echo) {
|
||||||
a.DELETE("/namespaces/:id", namespaceHandler.DeleteWeb)
|
a.DELETE("/namespaces/:id", namespaceHandler.DeleteWeb)
|
||||||
a.GET("/namespaces/:id/lists", apiv1.GetListsByNamespaceID)
|
a.GET("/namespaces/:id/lists", apiv1.GetListsByNamespaceID)
|
||||||
|
|
||||||
|
namespaceTeamHandler := &crud.WebHandler{
|
||||||
|
CObject: &models.TeamNamespace{},
|
||||||
|
}
|
||||||
|
a.GET("/namespaces/:id/teams", namespaceTeamHandler.ReadAllWeb)
|
||||||
|
a.PUT("/namespaces/:id/teams", namespaceTeamHandler.CreateWeb)
|
||||||
|
a.DELETE("/namespaces/:nid/teams/:id", namespaceTeamHandler.DeleteWeb)
|
||||||
|
|
||||||
teamHandler := &crud.WebHandler{
|
teamHandler := &crud.WebHandler{
|
||||||
CObject: &models.Team{},
|
CObject: &models.Team{},
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue