diff --git a/internal/api/routes.go b/internal/api/routes.go index d9f618c..1de8f66 100644 --- a/internal/api/routes.go +++ b/internal/api/routes.go @@ -98,4 +98,5 @@ func AppRouter(app *fiber.App) { // # request pickup by user (masyarakat) # api.Get("/requestpickup", middleware.AuthMiddleware, controllers.GetRequestPickupsByUser) api.Post("/addrequestpickup", middleware.AuthMiddleware, controllers.CreateRequestPickup) + api.Delete("/deleterequestpickup/:id", middleware.AuthMiddleware, controllers.DeleteRequestPickup) } diff --git a/internal/controllers/request_pickup.go b/internal/controllers/request_pickup.go index 9690124..03dc8ec 100644 --- a/internal/controllers/request_pickup.go +++ b/internal/controllers/request_pickup.go @@ -1,6 +1,8 @@ package controllers import ( + "fmt" + "github.com/gofiber/fiber/v2" "github.com/pahmiudahgede/senggoldong/domain" "github.com/pahmiudahgede/senggoldong/dto" @@ -166,3 +168,36 @@ func CreateRequestPickup(c *fiber.Ctx) error { response, )) } + +func DeleteRequestPickup(c *fiber.Ctx) error { + id := c.Params("id") + if id == "" { + return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse( + fiber.StatusBadRequest, + "Missing required ID", + nil, + )) + } + + service := services.NewRequestPickupService(repositories.NewRequestPickupRepository()) + if err := service.DeleteRequestPickupByID(id); err != nil { + if err.Error() == fmt.Sprintf("request pickup with id %s not found", id) { + return c.Status(fiber.StatusNotFound).JSON(utils.FormatResponse( + fiber.StatusNotFound, + "Request pickup not found", + nil, + )) + } + return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse( + fiber.StatusInternalServerError, + "Failed to delete request pickup", + nil, + )) + } + + return c.Status(fiber.StatusOK).JSON(utils.FormatResponse( + fiber.StatusOK, + "Request pickup deleted successfully", + nil, + )) +} diff --git a/internal/repositories/request_pickup.go b/internal/repositories/request_pickup.go index c51d5ee..d09efae 100644 --- a/internal/repositories/request_pickup.go +++ b/internal/repositories/request_pickup.go @@ -9,6 +9,8 @@ type RequestPickupRepository interface { Create(request *domain.RequestPickup) error GetByID(id string) (*domain.RequestPickup, error) GetByUserID(userID string) ([]domain.RequestPickup, error) + DeleteByID(id string) error + ExistsByID(id string) (bool, error) } type requestPickupRepository struct{} @@ -47,3 +49,16 @@ func (r *requestPickupRepository) GetByUserID(userID string) ([]domain.RequestPi return requestPickups, nil } + +func (r *requestPickupRepository) ExistsByID(id string) (bool, error) { + var count int64 + if err := config.DB.Model(&domain.RequestPickup{}).Where("id = ?", id).Count(&count).Error; err != nil { + return false, err + } + return count > 0, nil +} + + +func (r *requestPickupRepository) DeleteByID(id string) error { + return config.DB.Where("id = ?", id).Delete(&domain.RequestPickup{}).Error +} diff --git a/internal/services/request_pickup.go b/internal/services/request_pickup.go index 761ffff..117fdf2 100644 --- a/internal/services/request_pickup.go +++ b/internal/services/request_pickup.go @@ -1,6 +1,8 @@ package services import ( + "fmt" + "github.com/pahmiudahgede/senggoldong/domain" "github.com/pahmiudahgede/senggoldong/internal/repositories" ) @@ -24,3 +26,17 @@ func (s *RequestPickupService) GetRequestPickupByID(id string) (*domain.RequestP func (s *RequestPickupService) GetRequestPickupsByUser(userID string) ([]domain.RequestPickup, error) { return s.repository.GetByUserID(userID) } + +func (s *RequestPickupService) DeleteRequestPickupByID(id string) error { + + exists, err := s.repository.ExistsByID(id) + if err != nil { + return err + } + + if !exists { + return fmt.Errorf("request pickup with id %s not found", id) + } + + return s.repository.DeleteByID(id) +}