docxTemplater/privileges/privileges.go

132 lines
3.2 KiB
Go
Raw Normal View History

2023-05-14 18:27:13 +00:00
package privileges;
import (
2023-07-03 15:31:31 +00:00
"fmt"
2023-05-14 18:27:13 +00:00
"context"
"time"
"github.com/gofiber/fiber/v2"
)
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"`
IsDeleted bool `json:"isDeleted"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
DeletedAt time.Time `json:"deletedAt"`
}
2023-07-03 13:54:04 +00:00
const skey = "templategen"
2023-05-14 18:27:13 +00:00
var (
Privileges = []Privilege{
{
PrivilegeID: "templateCnt",
Name: "Количество Шаблонов",
ServiceKey: skey,
Description: "Количество шаблонов, которые может сделать пользователь сервиса",
Type: "count",
Value: "шаблон",
},
{
PrivilegeID: "templateUnlimTime",
Name: "Безлимит",
ServiceKey: skey,
Description: "Количество дней, в течении которых пользование сервисом безлимитно",
Type: "day",
Value: "день",
},
{
PrivilegeID: "templateStorage",
Name: "Размер Диска",
ServiceKey: skey,
Description: "Обьём ПенаДиска для хранения шаблонов и результатов шаблонизации",
Type: "count",
Value: "МБ",
},
}
)
func PublishPrivileges(ctx context.Context, domain string) error {
old, err := getActualPrivileges(ctx, domain)
if err != nil {
return err
}
if len(old) == 0 {
return setupActualPrivileges(ctx, Privileges, domain)
}
2023-05-14 19:20:04 +00:00
found := false
2023-05-14 18:27:13 +00:00
for _, oldPriv := range old {
for _, newPriv := range Privileges {
if newPriv.PrivilegeID == oldPriv.PrivilegeID {
2023-05-14 19:20:04 +00:00
found = true
2023-05-14 18:27:13 +00:00
}
}
if !found {
2023-05-14 19:20:04 +00:00
if err := removePrivilege(ctx, domain, oldPriv.PrivilegeID); err != nil {
2023-05-14 18:27:13 +00:00
return err
}
}
2023-05-14 19:20:04 +00:00
found = false
2023-05-14 18:27:13 +00:00
}
return updatePrivileges(ctx, Privileges, domain)
}
func getActualPrivileges(
ctx context.Context,
domain string) ([]Privilege, error) {
2023-07-03 15:31:31 +00:00
res := []Privilege{}
2023-05-14 18:27:13 +00:00
_, _, err := fiber.Get(domain+"/privilege/service/templategen").Struct(&res)
2023-05-14 19:20:04 +00:00
if err != nil {
return res, err[0]
}
2023-07-03 15:31:31 +00:00
fmt.Println("str", res)
2023-05-14 18:27:13 +00:00
return res, nil
}
func updatePrivileges(ctx context.Context, data []Privilege, domain string) error {
_, _, err := fiber.Put(domain+"/privilege/many").JSON(map[string][]Privilege{
"privilegies": data,
}).Bytes()
if err != nil {
2023-05-14 19:20:04 +00:00
return err[0]
2023-05-14 18:27:13 +00:00
}
return nil
}
func setupActualPrivileges(
ctx context.Context,
data []Privilege,
domain string) error {
2023-07-03 15:31:31 +00:00
res := []Privilege{}
2023-05-14 18:27:13 +00:00
_, _, err := fiber.Post(domain+"/privilege/many").JSON(map[string][]Privilege{
"privilegies": data,
}).Struct(&res)
if err != nil {
return err[0]
}
return nil
}
func removePrivilege(ctx context.Context, domain, id string) error {
2023-05-14 19:20:04 +00:00
_, _, err := fiber.Delete(domain+"/privilege/").JSON(map[string]string{"privilegeId":id}).Bytes()
2023-05-14 18:27:13 +00:00
if err != nil {
2023-05-14 19:20:04 +00:00
return err[0]
2023-05-14 18:27:13 +00:00
}
return nil
}