add another privilege methods, need test
This commit is contained in:
parent
1df10f9e33
commit
e2b4a699b2
@ -3,6 +3,7 @@ package privilege_internal
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
our_errors "hub_admin_backend_service/internal/errors"
|
our_errors "hub_admin_backend_service/internal/errors"
|
||||||
"hub_admin_backend_service/internal/models"
|
"hub_admin_backend_service/internal/models"
|
||||||
@ -176,7 +177,12 @@ func (p *PrivilegeInternal) PostMany(c *fiber.Ctx) error {
|
|||||||
|
|
||||||
result, err := p.repo.PostMany(c.Context(), req)
|
result, err := p.repo.PostMany(c.Context(), req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
switch {
|
||||||
|
case errors.Is(err, our_errors.ErrAlreadyExist):
|
||||||
|
return c.Status(fiber.StatusConflict).JSON(fiber.Map{"error": "One is privilege already exist"})
|
||||||
|
default:
|
||||||
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.Status(fiber.StatusOK).JSON(result)
|
return c.Status(fiber.StatusOK).JSON(result)
|
||||||
@ -188,10 +194,60 @@ func (p *PrivilegeInternal) UpdateMany(c *fiber.Ctx) error {
|
|||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
|
||||||
}
|
}
|
||||||
return c.SendStatus(http.StatusOK)
|
|
||||||
|
if len(req.Privileges) == 0 {
|
||||||
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "len array dont be 0"})
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, priv := range req.Privileges {
|
||||||
|
if !tools.Validate(priv) {
|
||||||
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Missing required fields"})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := p.repo.UpdateMany(c.Context(), req)
|
||||||
|
if err != nil {
|
||||||
|
switch {
|
||||||
|
case errors.Is(err, our_errors.ErrNotFound):
|
||||||
|
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "One is privilege not found"})
|
||||||
|
default:
|
||||||
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Status(fiber.StatusOK).JSON(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
// хаб нода restorePrivilege
|
// хаб нода restorePrivilege
|
||||||
func (p *PrivilegeInternal) Restore(c *fiber.Ctx) error {
|
func (p *PrivilegeInternal) Restore(c *fiber.Ctx) error {
|
||||||
|
var req struct {
|
||||||
|
ID string `json:"privilegeId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := c.BodyParser(&req); err != nil {
|
||||||
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.ID == "" {
|
||||||
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "PrivilegeID is required"})
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := primitive.ObjectIDFromHex(req.ID)
|
||||||
|
if err != nil {
|
||||||
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid id"})
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := p.repo.RestorePrivilege(c.Context(), req.ID)
|
||||||
|
if err != nil {
|
||||||
|
switch {
|
||||||
|
case errors.Is(err, our_errors.ErrNotFound):
|
||||||
|
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "Privilege not found"})
|
||||||
|
default:
|
||||||
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Status(fiber.StatusOK).JSON(result)
|
||||||
|
|
||||||
return c.SendStatus(http.StatusOK)
|
return c.SendStatus(http.StatusOK)
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,6 @@ func (p *PrivilegeInternal) Register(router fiber.Router) {
|
|||||||
router.Post("/many", p.PostMany)
|
router.Post("/many", p.PostMany)
|
||||||
router.Put("/many", p.UpdateMany)
|
router.Put("/many", p.UpdateMany)
|
||||||
router.Post("/restore", p.Restore)
|
router.Post("/restore", p.Restore)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PrivilegeInternal) Name() string {
|
func (p *PrivilegeInternal) Name() string {
|
||||||
|
@ -93,7 +93,7 @@ func (p *Privilege) Update(ctx context.Context, req models.CreateUpdateReq) (mod
|
|||||||
p.logger.Error("Failed to find privilege", zap.Error(err))
|
p.logger.Error("Failed to find privilege", zap.Error(err))
|
||||||
return models.Privilege{}, err
|
return models.Privilege{}, err
|
||||||
}
|
}
|
||||||
|
currTime := time.Now()
|
||||||
update := bson.M{
|
update := bson.M{
|
||||||
"$set": bson.M{
|
"$set": bson.M{
|
||||||
"name": req.Name,
|
"name": req.Name,
|
||||||
@ -102,7 +102,7 @@ func (p *Privilege) Update(ctx context.Context, req models.CreateUpdateReq) (mod
|
|||||||
"type": req.Type,
|
"type": req.Type,
|
||||||
"value": req.Value,
|
"value": req.Value,
|
||||||
"price": req.Price,
|
"price": req.Price,
|
||||||
"updatedAt": time.Now(),
|
"updatedAt": currTime,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,7 +118,7 @@ func (p *Privilege) Update(ctx context.Context, req models.CreateUpdateReq) (mod
|
|||||||
exist.Type = req.Type
|
exist.Type = req.Type
|
||||||
exist.Value = req.Value
|
exist.Value = req.Value
|
||||||
exist.Price = req.Price
|
exist.Price = req.Price
|
||||||
exist.UpdatedAt = time.Now()
|
exist.UpdatedAt = currTime
|
||||||
|
|
||||||
return exist, nil
|
return exist, nil
|
||||||
}
|
}
|
||||||
@ -193,8 +193,18 @@ func (p *Privilege) GetByServiceKey(ctx context.Context, serviceKey string) ([]m
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *Privilege) PostMany(ctx context.Context, req models.ManyCreateUpdate) ([]models.Privilege, error) {
|
func (p *Privilege) PostMany(ctx context.Context, req models.ManyCreateUpdate) ([]models.Privilege, error) {
|
||||||
var privileges []interface{}
|
var privileges []models.Privilege
|
||||||
for _, r := range req.Privileges {
|
for _, r := range req.Privileges {
|
||||||
|
exist := models.Privilege{}
|
||||||
|
err := p.mdb.FindOne(ctx, bson.M{"privilegeId": r.PrivilegeId}).Decode(exist)
|
||||||
|
if err == nil {
|
||||||
|
p.logger.Error("privilege already exists", zap.String("privilegeId", r.PrivilegeId))
|
||||||
|
return nil, errors.ErrAlreadyExist
|
||||||
|
} else if err != mongo.ErrNoDocuments {
|
||||||
|
p.logger.Error("failed to check existing privilege", zap.Error(err))
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
privileges = append(privileges, models.Privilege{
|
privileges = append(privileges, models.Privilege{
|
||||||
ID: primitive.NewObjectID(),
|
ID: primitive.NewObjectID(),
|
||||||
Name: r.Name,
|
Name: r.Name,
|
||||||
@ -209,17 +219,77 @@ func (p *Privilege) PostMany(ctx context.Context, req models.ManyCreateUpdate) (
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
result, err := p.mdb.InsertMany(ctx, privileges)
|
noneType := make([]interface{}, len(privileges))
|
||||||
|
for i, v := range privileges {
|
||||||
|
noneType[i] = v
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := p.mdb.InsertMany(ctx, noneType)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
p.logger.Error("failed to insert privileges", zap.Error(err))
|
p.logger.Error("failed to insert privileges", zap.Error(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
inserted := make([]models.Privilege, len(result.InsertedIDs))
|
return privileges, nil
|
||||||
for i, id := range result.InsertedIDs {
|
}
|
||||||
inserted[i] = privileges[i].(models.Privilege)
|
|
||||||
inserted[i].ID = id.(primitive.ObjectID)
|
func (p *Privilege) UpdateMany(ctx context.Context, req models.ManyCreateUpdate) ([]models.Privilege, error) {
|
||||||
|
var updated []models.Privilege
|
||||||
|
for _, r := range req.Privileges {
|
||||||
|
filter := bson.M{"privilegeId": r.PrivilegeId}
|
||||||
|
update := bson.M{
|
||||||
|
"$set": bson.M{
|
||||||
|
"name": r.Name,
|
||||||
|
"serviceKey": r.ServiceKey,
|
||||||
|
"description": r.Description,
|
||||||
|
"type": r.Type,
|
||||||
|
"value": r.Value,
|
||||||
|
"price": r.Price,
|
||||||
|
"updatedAt": time.Now(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
var updatedPrivilege models.Privilege
|
||||||
|
opts := options.FindOneAndUpdate().SetReturnDocument(options.After)
|
||||||
|
err := p.mdb.FindOneAndUpdate(ctx, filter, update, opts).Decode(&updatedPrivilege)
|
||||||
|
if err != nil {
|
||||||
|
if err == mongo.ErrNoDocuments {
|
||||||
|
return nil, errors.ErrNotFound
|
||||||
|
}
|
||||||
|
p.logger.Error("failed to update privilege", zap.Error(err))
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
updated = append(updated, updatedPrivilege)
|
||||||
|
}
|
||||||
|
return updated, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Privilege) RestorePrivilege(ctx context.Context, id string) (models.Privilege, error) {
|
||||||
|
exist := models.Privilege{}
|
||||||
|
err := p.mdb.FindOne(ctx, bson.M{"privilegeId": id}).Decode(exist)
|
||||||
|
if err == mongo.ErrNoDocuments {
|
||||||
|
return models.Privilege{}, errors.ErrNotFound
|
||||||
|
} else if err != nil {
|
||||||
|
p.logger.Error("Failed to find privilege", zap.Error(err))
|
||||||
|
return models.Privilege{}, err
|
||||||
|
}
|
||||||
|
currTime := time.Now()
|
||||||
|
update := bson.M{
|
||||||
|
"$set": bson.M{
|
||||||
|
"isDeleted": false,
|
||||||
|
"updatedAt": currTime,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
return inserted, nil
|
_, err = p.mdb.UpdateOne(ctx, bson.M{"privilegeId": id}, update)
|
||||||
|
if err != nil {
|
||||||
|
p.logger.Error("Failed to restore privilege", zap.Error(err))
|
||||||
|
return models.Privilege{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
exist.IsDeleted = false
|
||||||
|
exist.UpdatedAt = currTime
|
||||||
|
|
||||||
|
return exist, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user