2024-07-23 11:27:56 +00:00
|
|
|
package tariff_internal
|
|
|
|
|
|
|
|
import (
|
2024-07-25 11:06:49 +00:00
|
|
|
"errors"
|
2024-07-23 11:27:56 +00:00
|
|
|
"github.com/gofiber/fiber/v2"
|
2024-07-25 11:06:49 +00:00
|
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
2024-07-23 11:27:56 +00:00
|
|
|
"go.uber.org/zap"
|
2025-01-01 22:20:08 +00:00
|
|
|
"gitea.pena/PenaSide/tariffs/internal/controller/middleware"
|
|
|
|
our_errors "gitea.pena/PenaSide/tariffs/internal/errors"
|
|
|
|
"gitea.pena/PenaSide/tariffs/internal/models"
|
|
|
|
"gitea.pena/PenaSide/tariffs/internal/repository/tariff"
|
|
|
|
"gitea.pena/PenaSide/tariffs/internal/tools"
|
2024-07-23 11:27:56 +00:00
|
|
|
)
|
|
|
|
|
2024-07-25 10:51:27 +00:00
|
|
|
// todo middleware jwt
|
|
|
|
|
2024-07-23 11:27:56 +00:00
|
|
|
type Deps struct {
|
2024-07-25 11:49:50 +00:00
|
|
|
Repo *tariff.Tariff
|
|
|
|
Logger *zap.Logger
|
|
|
|
MiddleWare *middleware.MiddleWare
|
2024-07-23 11:27:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type TariffInternal struct {
|
2024-07-25 11:49:50 +00:00
|
|
|
repo *tariff.Tariff
|
|
|
|
logger *zap.Logger
|
|
|
|
middleWare *middleware.MiddleWare
|
2024-07-23 11:27:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func NewTariffInternal(deps Deps) *TariffInternal {
|
|
|
|
return &TariffInternal{
|
2024-07-25 11:49:50 +00:00
|
|
|
repo: deps.Repo,
|
|
|
|
logger: deps.Logger,
|
|
|
|
middleWare: deps.MiddleWare,
|
2024-07-23 11:27:56 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (t *TariffInternal) Get(ctx *fiber.Ctx) error {
|
2024-07-25 10:51:27 +00:00
|
|
|
tariffID := ctx.Params("id")
|
|
|
|
if tariffID == "" {
|
|
|
|
return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "url field id don't be empty"})
|
|
|
|
}
|
|
|
|
|
2024-07-25 11:06:49 +00:00
|
|
|
objID, err := primitive.ObjectIDFromHex(tariffID)
|
|
|
|
if err != nil {
|
|
|
|
return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "no valid object tariff id"})
|
2024-07-25 10:51:27 +00:00
|
|
|
}
|
|
|
|
|
2024-07-25 11:06:49 +00:00
|
|
|
result, err := t.repo.GetByID(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)
|
2024-07-23 11:27:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (t *TariffInternal) GetList(ctx *fiber.Ctx) error {
|
2024-07-25 14:10:01 +00:00
|
|
|
page, limit := t.middleWare.GetPaginationParameters(ctx)
|
|
|
|
result, err := t.repo.GetList(ctx.Context(), page, limit, "")
|
|
|
|
if err != nil {
|
|
|
|
return ctx.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
|
|
|
}
|
|
|
|
|
|
|
|
return ctx.Status(fiber.StatusOK).JSON(result)
|
2024-07-23 11:27:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (t *TariffInternal) Create(ctx *fiber.Ctx) error {
|
2024-07-25 12:43:43 +00:00
|
|
|
var req models.Tariff
|
2024-07-25 11:06:49 +00:00
|
|
|
if err := ctx.BodyParser(&req); err != nil {
|
|
|
|
return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
|
|
|
|
}
|
2024-07-25 12:43:43 +00:00
|
|
|
|
2024-07-26 11:38:54 +00:00
|
|
|
err := tools.ValidateTariff(req)
|
|
|
|
if err != nil {
|
|
|
|
return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": err.Error()})
|
|
|
|
}
|
|
|
|
|
2024-07-25 12:43:43 +00:00
|
|
|
result, err := t.repo.Create(ctx.Context(), req)
|
|
|
|
if err != nil {
|
|
|
|
return ctx.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
|
|
|
}
|
|
|
|
|
2024-07-25 14:10:01 +00:00
|
|
|
return ctx.Status(fiber.StatusOK).JSON(result)
|
2024-07-23 11:27:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (t *TariffInternal) Delete(ctx *fiber.Ctx) error {
|
2024-07-25 14:35:12 +00:00
|
|
|
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)
|
2024-07-23 11:27:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (t *TariffInternal) Update(ctx *fiber.Ctx) error {
|
2024-07-25 15:47:03 +00:00
|
|
|
var req models.Tariff
|
|
|
|
if err := ctx.BodyParser(&req); err != nil {
|
|
|
|
return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
|
|
|
|
}
|
|
|
|
|
2024-07-26 11:38:54 +00:00
|
|
|
err := tools.ValidateTariff(req)
|
|
|
|
if err != nil {
|
|
|
|
return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": err.Error()})
|
|
|
|
}
|
|
|
|
|
2024-07-25 15:47:03 +00:00
|
|
|
id := ctx.Params("id")
|
|
|
|
objID, err := primitive.ObjectIDFromHex(id)
|
|
|
|
if err != nil {
|
|
|
|
return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "no valid object tariff id"})
|
|
|
|
}
|
|
|
|
|
|
|
|
result, err := t.repo.Update(ctx.Context(), objID, req)
|
|
|
|
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)
|
2024-07-23 11:27:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (t *TariffInternal) Restore(ctx *fiber.Ctx) error {
|
2024-07-26 12:12:08 +00:00
|
|
|
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": "id don`t be empty"})
|
|
|
|
}
|
|
|
|
|
|
|
|
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.Restore(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)
|
2024-07-23 11:27:56 +00:00
|
|
|
}
|