common/privilege/controller/privilege.go

71 lines
1.7 KiB
Go
Raw Normal View History

2023-12-01 18:33:41 +00:00
package privilege
2023-12-01 16:46:02 +00:00
import (
2023-12-01 18:33:41 +00:00
"encoding/json"
2023-12-03 14:06:43 +00:00
"github.com/gofiber/fiber/v2"
2023-12-01 16:46:02 +00:00
"penahub.gitlab.yandexcloud.net/backend/penahub_common/privilege/config"
)
2023-12-01 18:33:41 +00:00
type Handler struct {
2023-12-03 14:06:43 +00:00
serviceName string
url string
arrPrivilege []config.Privilege
2023-12-01 16:46:02 +00:00
}
2023-12-03 14:06:43 +00:00
func NewPrivilegeHandler(serviceName string, url string, arrPrivilege []config.Privilege) *Handler {
2023-12-01 18:33:41 +00:00
return &Handler{
2023-12-03 14:06:43 +00:00
serviceName: serviceName,
url: url,
arrPrivilege: arrPrivilege,
2023-12-01 16:46:02 +00:00
}
2023-12-01 18:33:41 +00:00
}
2023-12-03 14:06:43 +00:00
func (handler *Handler) GetPrivilege(c *fiber.Ctx) error {
agent := fiber.Get(handler.url)
statusCode, body, errs := agent.Bytes()
if len(errs) > 0 {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"errs": errs,
})
2023-12-01 16:46:02 +00:00
}
2023-12-03 14:06:43 +00:00
var privileges []config.Privilege
err := json.Unmarshal(body, &privileges)
2023-12-01 18:33:41 +00:00
if err != nil {
2023-12-03 14:06:43 +00:00
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"err": err,
})
2023-12-01 16:46:02 +00:00
}
2023-12-03 14:06:43 +00:00
return c.Status(statusCode).JSON(privileges)
2023-12-01 18:33:41 +00:00
}
2023-12-03 14:06:43 +00:00
func (handler *Handler) PostPrivilege(c *fiber.Ctx) error {
agent := fiber.Post(handler.url).JSON(handler.arrPrivilege)
statusCode, _, errs := agent.Bytes()
2023-12-01 18:33:41 +00:00
2023-12-03 14:06:43 +00:00
if len(errs) > 0 {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"errs": errs,
})
2023-12-01 16:46:02 +00:00
}
2023-12-03 14:06:43 +00:00
return c.SendStatus(statusCode)
2023-12-01 16:46:02 +00:00
}
2023-12-01 18:33:41 +00:00
func ComparePrivileges(existing []config.Privilege, incoming []config.Privilege) []config.Privilege {
2023-12-01 16:46:02 +00:00
existingMap := make(map[string]config.Privilege)
result := make([]config.Privilege, 0)
for _, privilege := range existing {
existingMap[privilege.ID] = privilege
}
for _, privilege := range incoming {
if _, found := existingMap[privilege.ID]; !found {
result = append(existing, existingMap[privilege.ID])
}
}
return result
}