From 70fd6535f7ab6fa22b3fa45543d5c266901dd2d9 Mon Sep 17 00:00:00 2001 From: Pavel Date: Tue, 4 Jun 2024 12:42:40 +0300 Subject: [PATCH] add delete privilege method by privilege id --- .../privilege_internal/controller.go | 28 +++++++++-- internal/repository/privilege/privilege.go | 46 ++++++++++++++----- 2 files changed, 60 insertions(+), 14 deletions(-) diff --git a/internal/controller/privilege_internal/controller.go b/internal/controller/privilege_internal/controller.go index 78d622f..716fd5a 100644 --- a/internal/controller/privilege_internal/controller.go +++ b/internal/controller/privilege_internal/controller.go @@ -48,7 +48,7 @@ func (p *PrivilegeInternal) Create(c *fiber.Ctx) error { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Missing required fields"}) } - result, err := p.repo.Create(c.Context(), &req) + result, err := p.repo.Create(c.Context(), req) if err != nil { switch { case errors.Is(err, our_errors.ErrAlreadyExist): @@ -72,7 +72,7 @@ func (p *PrivilegeInternal) Update(c *fiber.Ctx) error { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Missing required fields"}) } - result, err := p.repo.Update(c.Context(), &req) + result, err := p.repo.Update(c.Context(), req) if err != nil { switch { case errors.Is(err, our_errors.ErrNotFound): @@ -87,7 +87,29 @@ func (p *PrivilegeInternal) Update(c *fiber.Ctx) error { // хаб нода removePrivilege func (p *PrivilegeInternal) Delete(c *fiber.Ctx) error { - return c.SendStatus(http.StatusNoContent) + 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"}) + } + + result, err := p.repo.Delete(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) } // хаб нода getPrivilege diff --git a/internal/repository/privilege/privilege.go b/internal/repository/privilege/privilege.go index ee2185b..f8f9900 100644 --- a/internal/repository/privilege/privilege.go +++ b/internal/repository/privilege/privilege.go @@ -49,17 +49,17 @@ func (p *Privilege) GetAllPrivileges(ctx context.Context) ([]models.Privilege, e return privileges, nil } -func (p *Privilege) Create(ctx context.Context, req *models.CreateUpdateReq) (*models.Privilege, error) { - exist := &models.Privilege{} +func (p *Privilege) Create(ctx context.Context, req models.CreateUpdateReq) (models.Privilege, error) { + exist := models.Privilege{} err := p.mdb.FindOne(ctx, bson.M{"privilegeId": req.PrivilegeId}).Decode(exist) if err == nil { - return nil, errors.ErrAlreadyExist + return models.Privilege{}, errors.ErrAlreadyExist } else if err != mongo.ErrNoDocuments { p.logger.Error("Failed to check existing privilege", zap.Error(err)) - return nil, err + return models.Privilege{}, err } - privilege := &models.Privilege{ + privilege := models.Privilege{ ID: primitive.NewObjectID(), Name: req.Name, PrivilegeID: req.PrivilegeId, @@ -75,20 +75,20 @@ func (p *Privilege) Create(ctx context.Context, req *models.CreateUpdateReq) (*m _, err = p.mdb.InsertOne(ctx, privilege) if err != nil { p.logger.Error("Failed to create privilege", zap.Error(err)) - return nil, err + return models.Privilege{}, err } return privilege, nil } -func (p *Privilege) Update(ctx context.Context, req *models.CreateUpdateReq) (*models.Privilege, error) { - exist := &models.Privilege{} +func (p *Privilege) Update(ctx context.Context, req models.CreateUpdateReq) (models.Privilege, error) { + exist := models.Privilege{} err := p.mdb.FindOne(ctx, bson.M{"privilegeId": req.PrivilegeId}).Decode(exist) if err == mongo.ErrNoDocuments { - return nil, errors.ErrNotFound + return models.Privilege{}, errors.ErrNotFound } else if err != nil { p.logger.Error("Failed to find privilege", zap.Error(err)) - return nil, err + return models.Privilege{}, err } update := bson.M{ @@ -106,7 +106,7 @@ func (p *Privilege) Update(ctx context.Context, req *models.CreateUpdateReq) (*m _, err = p.mdb.UpdateOne(ctx, bson.M{"privilegeId": req.PrivilegeId}, update) if err != nil { p.logger.Error("Failed to update privilege", zap.Error(err)) - return nil, err + return models.Privilege{}, err } exist.Name = req.Name @@ -119,3 +119,27 @@ func (p *Privilege) Update(ctx context.Context, req *models.CreateUpdateReq) (*m return exist, nil } + +func (p *Privilege) Delete(ctx context.Context, id string) (models.Privilege, error) { + var privilege models.Privilege + filter := bson.M{"privilegeId": id} + + update := bson.M{ + "$set": bson.M{ + "isDeleted": true, + "deletedAt": time.Now(), + }, + } + + opts := options.FindOneAndUpdate().SetReturnDocument(options.After) + err := p.mdb.FindOneAndUpdate(ctx, filter, update, opts).Decode(&privilege) + if err != nil { + if err == mongo.ErrNoDocuments { + return models.Privilege{}, errors.ErrNotFound + } + p.logger.Error("failed to delete privilege", zap.Error(err)) + return models.Privilege{}, err + } + + return privilege, nil +}