From 0a1df0905ee5117d7a43acb1e5523779252ad332 Mon Sep 17 00:00:00 2001 From: Daniel Lee Date: Tue, 18 Apr 2017 15:01:05 +0200 Subject: [PATCH] WIP: add update user group command --- pkg/api/api.go | 3 +++ pkg/api/user_group.go | 28 ++++++++++++++++++++++++++++ pkg/api/user_group_members.go | 18 ++++++++++++++++++ pkg/models/user_group.go | 5 +++++ pkg/services/sqlstore/user_group.go | 29 +++++++++++++++++++++++++++++ 5 files changed, 83 insertions(+) create mode 100644 pkg/api/user_group_members.go diff --git a/pkg/api/api.go b/pkg/api/api.go index db7bf1df3fb..f8c8f3a04ac 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -134,9 +134,12 @@ func (hs *HttpServer) registerRoutes() { // user group (admin permission required) r.Group("/user-groups", func() { + r.Get("/:userGroupId", wrap(GetUserGroupById)) r.Get("/search", wrap(SearchUserGroups)) r.Post("/", quota("user-groups"), bind(m.CreateUserGroupCommand{}), wrap(CreateUserGroup)) + r.Put("/:userGroupId", bind(m.UpdateUserGroupCommand{}), wrap(UpdateUserGroup)) r.Delete("/:userGroupId", wrap(DeleteUserGroupById)) + r.Get("/:userGroupId/members", wrap(GetUserGroupMembers)) }, reqGrafanaAdmin) // org information available to all users. diff --git a/pkg/api/user_group.go b/pkg/api/user_group.go index 392fb52ebf1..8885cc1e961 100644 --- a/pkg/api/user_group.go +++ b/pkg/api/user_group.go @@ -26,6 +26,19 @@ func CreateUserGroup(c *middleware.Context, cmd m.CreateUserGroupCommand) Respon }) } +// PUT /api/user-groups/:userGroupId +func UpdateUserGroup(c *middleware.Context, cmd m.UpdateUserGroupCommand) Response { + cmd.Id = c.ParamsInt64(":userGroupId") + if err := bus.Dispatch(&cmd); err != nil { + if err == m.ErrUserGroupNameTaken { + return ApiError(400, "User Group name taken", err) + } + return ApiError(500, "Failed to update User Group", err) + } + + return ApiSuccess("User Group updated") +} + // DELETE /api/user-groups/:userGroupId func DeleteUserGroupById(c *middleware.Context) Response { if err := bus.Dispatch(&m.DeleteUserGroupCommand{Id: c.ParamsInt64(":userGroupId")}); err != nil { @@ -64,3 +77,18 @@ func SearchUserGroups(c *middleware.Context) Response { return Json(200, query.Result) } + +// GET /api/user-groups/:userGroupId +func GetUserGroupById(c *middleware.Context) Response { + query := m.GetUserGroupByIdQuery{Id: c.ParamsInt64(":userGroupId")} + + if err := bus.Dispatch(&query); err != nil { + if err == m.ErrUserGroupNotFound { + return ApiError(404, "User Group not found", err) + } + + return ApiError(500, "Failed to get User Group", err) + } + + return Json(200, &query.Result) +} diff --git a/pkg/api/user_group_members.go b/pkg/api/user_group_members.go new file mode 100644 index 00000000000..b3d54a09623 --- /dev/null +++ b/pkg/api/user_group_members.go @@ -0,0 +1,18 @@ +package api + +import ( + "github.com/grafana/grafana/pkg/bus" + "github.com/grafana/grafana/pkg/middleware" + m "github.com/grafana/grafana/pkg/models" +) + +// GET /api/user-groups/:userGroupId/members +func GetUserGroupMembers(c *middleware.Context) Response { + query := m.GetUserGroupMembersQuery{UserGroupId: c.ParamsInt64(":userGroupId")} + + if err := bus.Dispatch(&query); err != nil { + return ApiError(500, "Failed to get User Group Members", err) + } + + return Json(200, query.Result) +} diff --git a/pkg/models/user_group.go b/pkg/models/user_group.go index c9e0a54025e..e47b094e33a 100644 --- a/pkg/models/user_group.go +++ b/pkg/models/user_group.go @@ -31,6 +31,11 @@ type CreateUserGroupCommand struct { Result UserGroup `json:"-"` } +type UpdateUserGroupCommand struct { + Id int64 + Name string +} + type DeleteUserGroupCommand struct { Id int64 } diff --git a/pkg/services/sqlstore/user_group.go b/pkg/services/sqlstore/user_group.go index 996e318d694..e548e5dd7c5 100644 --- a/pkg/services/sqlstore/user_group.go +++ b/pkg/services/sqlstore/user_group.go @@ -12,6 +12,7 @@ import ( func init() { bus.AddHandler("sql", CreateUserGroup) + bus.AddHandler("sql", UpdateUserGroup) bus.AddHandler("sql", DeleteUserGroup) bus.AddHandler("sql", SearchUserGroups) bus.AddHandler("sql", GetUserGroupById) @@ -44,6 +45,34 @@ func CreateUserGroup(cmd *m.CreateUserGroupCommand) error { }) } +func UpdateUserGroup(cmd *m.UpdateUserGroupCommand) error { + return inTransaction2(func(sess *session) error { + + if isNameTaken, err := isUserGroupNameTaken(cmd.Name, cmd.Id, sess); err != nil { + return err + } else if isNameTaken { + return m.ErrUserGroupNameTaken + } + + userGroup := m.UserGroup{ + Name: cmd.Name, + Updated: time.Now(), + } + + affectedRows, err := sess.Id(cmd.Id).Update(&userGroup) + + if err != nil { + return err + } + + if affectedRows == 0 { + return m.ErrUserGroupNotFound + } + + return nil + }) +} + func DeleteUserGroup(cmd *m.DeleteUserGroupCommand) error { return inTransaction2(func(sess *session) error { if res, err := sess.Query("SELECT 1 from user_group WHERE id=?", cmd.Id); err != nil {