mirror of
https://github.com/pocket-id/pocket-id.git
synced 2025-12-08 14:22:57 +03:00
152 lines
3.6 KiB
Go
152 lines
3.6 KiB
Go
package controller
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/stonith404/pocket-id/backend/internal/dto"
|
|
"github.com/stonith404/pocket-id/backend/internal/middleware"
|
|
"github.com/stonith404/pocket-id/backend/internal/service"
|
|
)
|
|
|
|
func NewUserGroupController(group *gin.RouterGroup, jwtAuthMiddleware *middleware.JwtAuthMiddleware, userGroupService *service.UserGroupService) {
|
|
ugc := UserGroupController{
|
|
UserGroupService: userGroupService,
|
|
}
|
|
|
|
group.GET("/user-groups", jwtAuthMiddleware.Add(true), ugc.list)
|
|
group.GET("/user-groups/:id", jwtAuthMiddleware.Add(true), ugc.get)
|
|
group.POST("/user-groups", jwtAuthMiddleware.Add(true), ugc.create)
|
|
group.PUT("/user-groups/:id", jwtAuthMiddleware.Add(true), ugc.update)
|
|
group.DELETE("/user-groups/:id", jwtAuthMiddleware.Add(true), ugc.delete)
|
|
group.PUT("/user-groups/:id/users", jwtAuthMiddleware.Add(true), ugc.updateUsers)
|
|
}
|
|
|
|
type UserGroupController struct {
|
|
UserGroupService *service.UserGroupService
|
|
}
|
|
|
|
func (ugc *UserGroupController) list(c *gin.Context) {
|
|
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
|
pageSize, _ := strconv.Atoi(c.DefaultQuery("limit", "10"))
|
|
searchTerm := c.Query("search")
|
|
|
|
groups, pagination, err := ugc.UserGroupService.List(searchTerm, page, pageSize)
|
|
if err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
var groupsDto = make([]dto.UserGroupDtoWithUserCount, len(groups))
|
|
for i, group := range groups {
|
|
var groupDto dto.UserGroupDtoWithUserCount
|
|
if err := dto.MapStruct(group, &groupDto); err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
groupDto.UserCount, err = ugc.UserGroupService.GetUserCountOfGroup(group.ID)
|
|
if err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
groupsDto[i] = groupDto
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"data": groupsDto,
|
|
"pagination": pagination,
|
|
})
|
|
}
|
|
|
|
func (ugc *UserGroupController) get(c *gin.Context) {
|
|
group, err := ugc.UserGroupService.Get(c.Param("id"))
|
|
if err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
var groupDto dto.UserGroupDtoWithUsers
|
|
if err := dto.MapStruct(group, &groupDto); err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, groupDto)
|
|
}
|
|
|
|
func (ugc *UserGroupController) create(c *gin.Context) {
|
|
var input dto.UserGroupCreateDto
|
|
if err := c.ShouldBindJSON(&input); err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
group, err := ugc.UserGroupService.Create(input)
|
|
if err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
var groupDto dto.UserGroupDtoWithUsers
|
|
if err := dto.MapStruct(group, &groupDto); err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusCreated, groupDto)
|
|
}
|
|
|
|
func (ugc *UserGroupController) update(c *gin.Context) {
|
|
var input dto.UserGroupCreateDto
|
|
if err := c.ShouldBindJSON(&input); err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
group, err := ugc.UserGroupService.Update(c.Param("id"), input)
|
|
if err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
var groupDto dto.UserGroupDtoWithUsers
|
|
if err := dto.MapStruct(group, &groupDto); err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, groupDto)
|
|
}
|
|
|
|
func (ugc *UserGroupController) delete(c *gin.Context) {
|
|
if err := ugc.UserGroupService.Delete(c.Param("id")); err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
c.Status(http.StatusNoContent)
|
|
}
|
|
|
|
func (ugc *UserGroupController) updateUsers(c *gin.Context) {
|
|
var input dto.UserGroupUpdateUsersDto
|
|
if err := c.ShouldBindJSON(&input); err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
group, err := ugc.UserGroupService.UpdateUsers(c.Param("id"), input)
|
|
if err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
var groupDto dto.UserGroupDtoWithUsers
|
|
if err := dto.MapStruct(group, &groupDto); err != nil {
|
|
c.Error(err)
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, groupDto)
|
|
}
|