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 }