From e007d66f51d681109cc38e6565031209e6733c21 Mon Sep 17 00:00:00 2001 From: andrusyakka Date: Thu, 17 Aug 2023 17:08:34 +0300 Subject: [PATCH] add new methods and update current --- handler/organization.go | 44 ++++++++++++++++++++++++ handler/position.go | 75 +++++++++++++++++++++++++++++++++++++---- handler/users.go | 32 ++++++++++++------ main.go | 6 ++++ 4 files changed, 140 insertions(+), 17 deletions(-) diff --git a/handler/organization.go b/handler/organization.go index 0cab87c..8479408 100644 --- a/handler/organization.go +++ b/handler/organization.go @@ -32,3 +32,47 @@ func (h *Handler) GetOrganizations(c echo.Context) error { return c.JSON(http.StatusOK, organizations) } + +func (h *Handler) DeleteOrganization(c echo.Context) error { + id := c.Param("id") + + tx := h.DB.Model(model.Organization{}).Delete(id) + + if tx.RowsAffected == 0 { + return c.NoContent(http.StatusNotFound) + } + + return c.NoContent(http.StatusOK) +} + +func (h *Handler) UpdateOrganization(c echo.Context) (err error) { + id := c.Param("id") + organization := new(model.OrganizationApi) + var newOrganization model.Organization + + if err = c.Bind(organization); err != nil { + return c.NoContent(http.StatusBadRequest) + } + + tx := h.DB.Find(&newOrganization, id) + + if tx.RowsAffected == 0 { + return c.NoContent(http.StatusNotFound) + } + + if organization.Name != "" { + newOrganization.Name = organization.Name + } + + if organization.ParentID.ID() != 0 { + newOrganization.ParentID = organization.ParentID + } + + tx = tx.Save(&newOrganization) + + if tx.RowsAffected == 0 { + return c.NoContent(http.StatusBadGateway) + } + + return c.NoContent(http.StatusOK) +} diff --git a/handler/position.go b/handler/position.go index 68981ed..e319769 100644 --- a/handler/position.go +++ b/handler/position.go @@ -6,15 +6,10 @@ import ( "errors" "github.com/labstack/echo/v4" "net/http" - "strconv" ) func (h *Handler) GetPositionHandler(c echo.Context) error { - id, err := strconv.Atoi(c.Param("id")) - - if err != nil { - return c.NoContent(http.StatusBadRequest) - } + id := c.Param("id") position, err := h.GetPosition(id) @@ -25,7 +20,24 @@ func (h *Handler) GetPositionHandler(c echo.Context) error { return c.JSON(http.StatusOK, position) } -func (h *Handler) GetPosition(id int) (*model.Position, error) { +func (h *Handler) GetPositions(c echo.Context) error { + var positions []model.Position + + h.DB.Find(&positions) + + return c.JSON(http.StatusOK, positions) +} + +func (h *Handler) GetPositionsByOrg(c echo.Context) error { + id := c.Param("id") + var positions []model.Position + + h.DB.Where("organization_id = ?", id).Find(&positions) + + return c.JSON(http.StatusOK, positions) +} + +func (h *Handler) GetPosition(id string) (*model.Position, error) { var position model.Position r := h.DB.Find(&position, id) @@ -54,3 +66,52 @@ func (h *Handler) CreatePosition(c echo.Context) (err error) { return c.JSON(http.StatusCreated, newPosition) } + +func (h *Handler) DeletePosition(c echo.Context) error { + id := c.Param("id") + + tx := h.DB.Model(model.Position{}).Delete(id) + + if tx.RowsAffected == 0 { + return c.NoContent(http.StatusNotFound) + } + + return c.NoContent(http.StatusOK) +} + +func (h *Handler) UpdatePosition(c echo.Context) (err error) { + position := new(model.PositionApi) + var newPosition model.Position + + id := c.Param("id") + + if err = c.Bind(position); err != nil { + return c.NoContent(http.StatusBadRequest) + } + + tx := h.DB.Find(&newPosition, id) + + if tx.RowsAffected == 0 { + return c.NoContent(http.StatusNotFound) + } + + if position.RightMask != 0 { + newPosition.RightMask = position.RightMask + } + + if position.Name != "" { + newPosition.Name = position.Name + } + + if position.OrganizationID.ID() != 0 { + newPosition.OrganizationID = position.OrganizationID + } + + tx = tx.Save(&newPosition) + + if tx.RowsAffected == 0 { + return c.NoContent(http.StatusBadGateway) + } + + return c.JSON(http.StatusCreated, newPosition) +} diff --git a/handler/users.go b/handler/users.go index 2c6039b..689ac09 100644 --- a/handler/users.go +++ b/handler/users.go @@ -92,21 +92,33 @@ func (h *Handler) GetUsers(c echo.Context) error { func (h *Handler) UpdateUser(c echo.Context) (err error) { var user = new(model.User) var apiUser = new(model.APIUser) - tx := h.DB - - id := c.Param("id") - tx = tx.Find(&user, id) - - if tx.RowsAffected == 0 { - return c.NoContent(http.StatusNotFound) - } if err = c.Bind(apiUser); err != nil { return c.NoContent(http.StatusBadRequest) } - user.FirstName = apiUser.FirstName - user.LastName = apiUser.LastName + id := c.Param("id") + tx := h.DB.Find(&user, id) + + if tx.RowsAffected == 0 { + return c.NoContent(http.StatusNotFound) + } + + if apiUser.FirstName != "" { + user.FirstName = apiUser.FirstName + } + if apiUser.LastName != "" { + user.LastName = apiUser.LastName + } + if apiUser.PositionID.ID() != 0 { + user.PositionID = apiUser.PositionID + } + if apiUser.Role != "" { + user.Role = apiUser.Role + } + if apiUser.Password != "" { + user.Password = fmt.Sprintf("%x", sha256.Sum256([]byte(apiUser.Password))) + } tx = h.DB.Save(&user) diff --git a/main.go b/main.go index 7d26dce..bd43c8b 100644 --- a/main.go +++ b/main.go @@ -53,9 +53,15 @@ func main() { e.GET("/health", h.Health) e.GET("/positions/:id", h.GetPositionHandler, mw.CheckAdminRole) + e.DELETE("/positions/:id", h.DeletePosition, mw.CheckAdminRole) + e.PATCH("/positions/:id", h.UpdatePosition, mw.CheckAdminRole) + e.GET("/positions", h.GetPositions, mw.CheckAdminRole) + e.GET("/organizations/:id/positions", h.GetPositionsByOrg, mw.CheckAdminRole) e.POST("/positions", h.CreatePosition, mw.CheckAdminRole) e.GET("/organizations", h.GetOrganizations, mw.CheckAdminRole) + e.DELETE("/organizations/:id", h.GetOrganizations, mw.CheckAdminRole) + e.PATCH("/organizations/:id", h.UpdateOrganization, mw.CheckAdminRole) e.POST("/organizations", h.CreateOrganization, mw.CheckAdminRole) e.Logger.Fatal(e.Start(":" + config.Env.Server.Port))