This commit is contained in:
Pavel 2023-12-03 18:36:00 +03:00
parent a478032228
commit 7833d427f6
4 changed files with 118 additions and 90 deletions

4
go.mod

@ -1,6 +1,8 @@
module penahub.gitlab.yandexcloud.net/backend/penahub_common
go 1.19
go 1.21
toolchain go1.21.4
require (
github.com/dgrijalva/jwt-go v3.2.0+incompatible

@ -1,19 +0,0 @@
package config
import "time"
type Privilege struct {
ID string `json:"_id"`
PrivilegeID string `json:"privilegeId"`
Name string `json:"name"`
ServiceKey string `json:"serviceKey"`
Description string `json:"description"`
Type string `json:"type"`
Value string `json:"value"`
Price float64 `json:"price"`
Amount int `json:"amount"`
IsDeleted bool `json:"isDeleted"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
DeletedAt time.Time `json:"deletedAt"`
}

@ -1,70 +0,0 @@
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
}

115
privilege/privilege.go Normal file

@ -0,0 +1,115 @@
package privilege
import (
"fmt"
"github.com/gofiber/fiber/v2"
"time"
)
type Client struct {
URL string
ServiceName string
Privileges []Privilege
}
type Privilege struct {
ID string `json:"_id"`
PrivilegeID string `json:"privilegeId"`
Name string `json:"name"`
ServiceKey string `json:"serviceKey"`
Description string `json:"description"`
Type string `json:"type"`
Value string `json:"value"`
Price float64 `json:"price"`
Amount int `json:"amount"`
IsDeleted bool `json:"isDeleted"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
DeletedAt time.Time `json:"deletedAt"`
}
type Controller struct {
client Client
fiberClient *fiber.Client
}
func NewPrivilege(client Client, fiberClient *fiber.Client) *Controller {
return &Controller{client: client, fiberClient: fiberClient}
}
// PublishPrivileges публикует привилегии в сервисе.
func (c *Controller) PublishPrivileges() error {
old, err := c.getActualPrivileges()
if err != nil {
return err
}
if len(old) == 0 {
return c.setupActualPrivileges()
}
found := false
for _, oldPriv := range old {
for _, newPriv := range c.client.Privileges {
if newPriv.PrivilegeID == oldPriv.PrivilegeID {
found = true
}
}
if !found {
if err := c.removePrivilege(oldPriv.PrivilegeID); err != nil {
return err
}
}
found = false
}
return c.updatePrivileges()
}
// getActualPrivileges возвращает текущие привилегии из сервиса.
func (c *Controller) getActualPrivileges() ([]Privilege, error) {
res := []Privilege{}
_, _, err := c.fiberClient.Get(c.client.URL + "/privilege/service/" + c.client.ServiceName).Struct(&res)
if err != nil {
return res, err[0]
}
fmt.Println("str", res)
return res, nil
}
// updatePrivileges обновляет привилегии в сервисе.
func (c *Controller) updatePrivileges() error {
_, _, err := c.fiberClient.Put(c.client.URL + "/privilege/many").JSON(map[string][]Privilege{
"privilege": c.client.Privileges,
}).Bytes()
if err != nil {
return err[0]
}
return nil
}
// setupActualPrivileges настраивает привилегии в сервисе.
func (c *Controller) setupActualPrivileges() error {
res := []Privilege{}
_, _, err := c.fiberClient.Post(c.client.URL + "/privilege/many").JSON(map[string][]Privilege{
"privileges": c.client.Privileges,
}).Struct(&res)
if err != nil {
return err[0]
}
return nil
}
// removePrivilege удаляет привилегию из сервиса по ID.
func (c *Controller) removePrivilege(id string) error {
_, _, err := c.fiberClient.Delete(c.client.URL + "/privilege/").JSON(map[string]string{"privilegeId": id}).Bytes()
if err != nil {
return err[0]
}
return nil
}