From 66097348677a6f06e4cf544045891b6e49e4d087 Mon Sep 17 00:00:00 2001 From: pahmiudahgede Date: Sat, 8 Feb 2025 01:06:54 +0700 Subject: [PATCH] feat: add feature delete address --- internal/handler/address_handler.go | 11 +++++++++++ internal/repositories/address_repo.go | 9 +++++++++ internal/services/address_service.go | 28 +++++++++++++++++++++++++++ presentation/address_route.go | 1 + 4 files changed, 49 insertions(+) diff --git a/internal/handler/address_handler.go b/internal/handler/address_handler.go index 36ffab9..143896e 100644 --- a/internal/handler/address_handler.go +++ b/internal/handler/address_handler.go @@ -76,3 +76,14 @@ func (h *AddressHandler) UpdateAddress(c *fiber.Ctx) error { return utils.SuccessResponse(c, updatedAddress, "User address updated successfully") } + +func (h *AddressHandler) DeleteAddress(c *fiber.Ctx) error { + id := c.Params("address_id") + + err := h.AddressService.DeleteAddress(id) + if err != nil { + return utils.GenericErrorResponse(c, fiber.StatusNotFound, err.Error()) + } + + return utils.GenericErrorResponse(c, fiber.StatusOK, "Address deleted successfully") +} diff --git a/internal/repositories/address_repo.go b/internal/repositories/address_repo.go index 9d3c57d..1661b6b 100644 --- a/internal/repositories/address_repo.go +++ b/internal/repositories/address_repo.go @@ -10,6 +10,7 @@ type AddressRepository interface { FindAddressByUserID(userID string) ([]model.Address, error) FindAddressByID(id string) (*model.Address, error) UpdateAddress(address *model.Address) error + DeleteAddress(id string) error } type addressRepository struct { @@ -49,4 +50,12 @@ func (r *addressRepository) UpdateAddress(address *model.Address) error { return err } return nil +} + +func (r *addressRepository) DeleteAddress(id string) error { + err := r.DB.Where("id = ?", id).Delete(&model.Address{}).Error + if err != nil { + return err + } + return nil } \ No newline at end of file diff --git a/internal/services/address_service.go b/internal/services/address_service.go index 08e0fff..2297b43 100644 --- a/internal/services/address_service.go +++ b/internal/services/address_service.go @@ -15,6 +15,7 @@ type AddressService interface { GetAddressByUserID(userID string) ([]dto.AddressResponseDTO, error) GetAddressByID(id string) (*dto.AddressResponseDTO, error) UpdateAddress(id string, addressDTO dto.CreateAddressDTO) (*dto.AddressResponseDTO, error) + DeleteAddress(id string) error } type addressService struct { @@ -360,3 +361,30 @@ func (s *addressService) UpdateAddress(id string, addressDTO dto.CreateAddressDT return addressResponseDTO, nil } + +func (s *addressService) DeleteAddress(id string) error { + + address, err := s.AddressRepo.FindAddressByID(id) + if err != nil { + return fmt.Errorf("address not found: %v", err) + } + + err = s.AddressRepo.DeleteAddress(id) + if err != nil { + return fmt.Errorf("failed to delete address: %v", err) + } + + addressCacheKey := fmt.Sprintf("address:%s", id) + err = utils.DeleteData(addressCacheKey) + if err != nil { + fmt.Printf("Error deleting address cache: %v\n", err) + } + + userAddressesCacheKey := fmt.Sprintf("user:%s:addresses", address.UserID) + err = utils.DeleteData(userAddressesCacheKey) + if err != nil { + fmt.Printf("Error deleting user addresses cache: %v\n", err) + } + + return nil +} diff --git a/presentation/address_route.go b/presentation/address_route.go index caa81f9..84e549d 100644 --- a/presentation/address_route.go +++ b/presentation/address_route.go @@ -21,4 +21,5 @@ func AddressRouter(api fiber.Router) { adddressAPI.Get("/get-address", middleware.AuthMiddleware, addressHandler.GetAddressByUserID) adddressAPI.Get("/get-address/:address_id", middleware.AuthMiddleware, addressHandler.GetAddressByID) adddressAPI.Put("/update-address/:address_id", middleware.AuthMiddleware, addressHandler.UpdateAddress) + adddressAPI.Delete("/delete-address/:address_id", middleware.AuthMiddleware, addressHandler.DeleteAddress) }