common/privilege/controller/privilege.go

71 lines
1.7 KiB
Go

package privilege
import (
"encoding/json"
"github.com/gofiber/fiber/v2"
"penahub.gitlab.yandexcloud.net/backend/penahub_common/privilege/config"
)
type Handler struct {
serviceName string
url string
arrPrivilege []config.Privilege
}
func NewPrivilegeHandler(serviceName string, url string, arrPrivilege []config.Privilege) *Handler {
return &Handler{
serviceName: serviceName,
url: url,
arrPrivilege: arrPrivilege,
}
}
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,
})
}
var privileges []config.Privilege
err := json.Unmarshal(body, &privileges)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"err": err,
})
}
return c.Status(statusCode).JSON(privileges)
}
func (handler *Handler) PostPrivilege(c *fiber.Ctx) error {
agent := fiber.Post(handler.url).JSON(handler.arrPrivilege)
statusCode, _, errs := agent.Bytes()
if len(errs) > 0 {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"errs": errs,
})
}
return c.SendStatus(statusCode)
}
func ComparePrivileges(existing []config.Privilege, incoming []config.Privilege) []config.Privilege {
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
}