lms-backend/routers/router/api/v1/organization/roles.go

126 lines
3.2 KiB
Go

package organization
import (
"git.ex.umbach.dev/LMS/libcore/models"
"github.com/gofiber/fiber/v2"
"lms.de/backend/modules/database"
"lms.de/backend/modules/structs"
"lms.de/backend/modules/utils"
)
func GetRoles(c *fiber.Ctx) error {
// swagger:operation GET /organization/roles organization getRoles
// ---
// summary: Get roles
// produces:
// - application/json
// responses:
// '200':
// description: Roles
// schema:
// "$ref": "#/definitions/RolesResponse"
// '500':
// description: Failed to get roles
/*
var roles []models.Role
if err := database.DB.Model(&models.Role{}).Where("organization_id = ?", c.Locals("organizationId").(string)).Find(&roles).Error; err != nil {
return c.SendStatus(fiber.StatusInternalServerError)
}
if len(roles) == 0 {
return c.SendStatus(fiber.StatusInternalServerError)
}
for _, role := range roles {
var rolePermissions []uint16
if err := database.DB.Model(&models.RolePermission{}).Where("role_id = ?", role.Id).Pluck("permission", &rolePermissions).Error; err != nil {
return c.SendStatus(fiber.StatusInternalServerError)
}
var users []structs.HelperRoleUser
if err := database.DB.Model(&models.User{}).Where("role_id = ?", role.Id).Where("organization_id = ?", c.Locals("organizationId").(string)).Find(&users).Error; err != nil {
return c.SendStatus(fiber.StatusInternalServerError)
}
rolesResponse.Roles = append(rolesResponse.Roles, structs.HelperRole{
Id: role.Id,
Name: role.Name,
Master: role.Master,
Permissions: rolePermissions,
Users: users,
})
} */
var rolesResponse structs.RolesResponse
// order is random so we need to define the order
keys := []string{utils.RoleAdminId, utils.RoleModeratorId, utils.RoleUserId}
for _, key := range keys {
role := utils.Roles[key]
var users []structs.HelperRoleUser
if err := database.DB.Model(&models.User{}).
Where("role_id = ? AND organization_id = ?", key, c.Locals("organizationId").(string)).
Find(&users).Error; err != nil {
return c.SendStatus(fiber.StatusInternalServerError)
}
rolesResponse.Roles = append(rolesResponse.Roles, structs.HelperRole{
Id: key,
Permissions: role,
Users: users,
})
}
return c.JSON(rolesResponse)
}
/*
func CreateRole(c *fiber.Ctx) error {
// swagger:operation POST /organization/roles organization createRole
// ---
// summary: Create role
// produces:
// - application/json
// parameters:
// - name: name
// in: body
// description: Role name
// required: true
// schema:
// "$ref": "#/definitions/CreateRoleRequest"
// responses:
// '200':
// description: Role created
// '400':
// description: Invalid input
// '500':
// description: Failed to create role
var body structs.CreateRoleRequest
if err := c.BodyParser(&body); err != nil {
fmt.Print(err)
return c.SendStatus(fiber.StatusBadRequest)
}
role := models.Role{
Id: uuid.New().String(),
OrganizationId: c.Locals("organizationId").(string),
Name: body.Name,
}
if err := database.DB.Create(&role).Error; err != nil {
return c.SendStatus(fiber.StatusInternalServerError)
}
return c.SendStatus(fiber.StatusOK)
}
*/