From 9de4b4d894cc40141647d331f95cf1d11b204fe1 Mon Sep 17 00:00:00 2001 From: Pavel Date: Thu, 25 Jul 2024 17:35:12 +0300 Subject: [PATCH] added method for soft delete tariff --- .../controller/tariff_internal/controller.go | 29 ++++++++++++++++++- internal/repository/tariff/tariff.go | 15 ++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/internal/controller/tariff_internal/controller.go b/internal/controller/tariff_internal/controller.go index d2e2e5b..d3329ea 100644 --- a/internal/controller/tariff_internal/controller.go +++ b/internal/controller/tariff_internal/controller.go @@ -82,7 +82,34 @@ func (t *TariffInternal) Create(ctx *fiber.Ctx) error { } func (t *TariffInternal) Delete(ctx *fiber.Ctx) error { - return nil + var req struct { + ID string `json:"id"` + } + + if err := ctx.BodyParser(&req); err != nil { + return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"}) + } + + if req.ID == "" { + return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Tariff id don't be nil"}) + } + + objID, err := primitive.ObjectIDFromHex(req.ID) + if err != nil { + return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "no valid object tariff id"}) + } + + result, err := t.repo.SoftDelete(ctx.Context(), objID) + if err != nil { + switch { + case errors.Is(err, our_errors.ErrNotFound): + return ctx.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "Tariff not found"}) + default: + return ctx.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()}) + } + } + + return ctx.Status(fiber.StatusOK).JSON(result) } func (t *TariffInternal) Update(ctx *fiber.Ctx) error { diff --git a/internal/repository/tariff/tariff.go b/internal/repository/tariff/tariff.go index 32cafa2..3f9c077 100644 --- a/internal/repository/tariff/tariff.go +++ b/internal/repository/tariff/tariff.go @@ -103,3 +103,18 @@ func (t *Tariff) GetList(ctx context.Context, page, limit int64, userID string) return result, nil } + +func (t *Tariff) SoftDelete(ctx context.Context, tariffID primitive.ObjectID) (models.Tariff, error) { + var tariff models.Tariff + filter := bson.M{"_id": tariffID} + update := bson.M{"$set": bson.M{"isDeleted": true, "deletedAt": time.Now()}} + err := t.mdb.FindOneAndUpdate(ctx, filter, update, options.FindOneAndUpdate().SetReturnDocument(options.After)).Decode(&tariff) + if err == mongo.ErrNoDocuments { + return tariff, errors.ErrNotFound + } else if err != nil { + t.logger.Error("failed soft delete tariff", zap.Error(err)) + return tariff, err + } + + return tariff, nil +}