fix
This commit is contained in:
parent
a478032228
commit
7833d427f6
4
go.mod
4
go.mod
@ -1,6 +1,8 @@
|
|||||||
module penahub.gitlab.yandexcloud.net/backend/penahub_common
|
module penahub.gitlab.yandexcloud.net/backend/penahub_common
|
||||||
|
|
||||||
go 1.19
|
go 1.21
|
||||||
|
|
||||||
|
toolchain go1.21.4
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
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
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
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user