From d362edad658f1f7fc2dfd429b01a552c7a0d712c Mon Sep 17 00:00:00 2001 From: pahmiudahgede Date: Sun, 15 Dec 2024 02:36:52 +0700 Subject: [PATCH] feat: add delete and update method in areas domain --- dto/coveragearea.go | 12 ++ internal/api/routes.go | 30 +++-- internal/controllers/coveragearea.go | 166 ++++++++++++++++++++++++++ internal/repositories/coveragearea.go | 83 ++++++++++++- internal/services/coveragearea.go | 24 ++++ 5 files changed, 302 insertions(+), 13 deletions(-) diff --git a/dto/coveragearea.go b/dto/coveragearea.go index e89cba8..a1894f8 100644 --- a/dto/coveragearea.go +++ b/dto/coveragearea.go @@ -104,4 +104,16 @@ func NewCoverageSubdistrictCreateRequest(coverageAreaID, coverageDistrictId, sub CoverageDistrictId: coverageDistrictId, Subdistrict: subdistrict, } +} + +type CoverageAreaUpdateRequest struct { + Province string `json:"province" validate:"required"` +} + +type CoverageDistrictUpdateRequest struct { + District string `json:"district" validate:"required"` +} + +type CoverageSubdistrictUpdateRequest struct { + Subdistrict string `json:"subdistrict" validate:"required"` } \ No newline at end of file diff --git a/internal/api/routes.go b/internal/api/routes.go index c37f835..0b5709b 100644 --- a/internal/api/routes.go +++ b/internal/api/routes.go @@ -7,62 +7,68 @@ import ( ) func AppRouter(app *fiber.App) { - // # api group domain endpoint + // # api group domain endpoint # api := app.Group("/apirijikid") - // # API Secure + // # API Secure # api.Use(middleware.APIKeyMiddleware) - // # user initial coint + // # user initial coint # api.Get("/user/initial-coint", controllers.GetUserInitialCoint) api.Get("/user/initial-coint/:id", controllers.GetUserInitialCointById) api.Post("/user/initial-coint", controllers.CreatePoint) api.Put("/user/initial-coint/:id", controllers.UpdatePoint) api.Delete("/user/initial-coint/:id", controllers.DeletePoint) - //# coverage area + //# coverage area # api.Get("/coverage-areas", controllers.GetCoverageAreas) api.Get("/coverage-areas-district/:id", controllers.GetCoverageAreaByIDProvince) api.Get("/coverage-areas-subdistrict/:id", controllers.GetCoverageAreaByIDDistrict) api.Post("/coverage-areas", controllers.CreateCoverageArea) api.Post("/coverage-areas-district", controllers.CreateCoverageDistrict) api.Post("/coverage-areas-subdistrict", controllers.CreateCoverageSubdistrict) + api.Put("/coverage-areas/:id", controllers.UpdateCoverageArea) + api.Put("/coverage-areas-district/:id", controllers.UpdateCoverageDistrict) + api.Put("/coverage-areas-subdistrict/:id", controllers.UpdateCoverageSubdistrict) + api.Delete("/coverage-areas/:id", controllers.DeleteCoverageArea) + api.Delete("/coverage-areas-district/:id", controllers.DeleteCoverageDistrict) + api.Delete("/coverage-areas-subdistrict/:id", controllers.DeleteCoverageSubdistrict) - // # role + // # role # api.Get("/roles", controllers.GetAllUserRoles) api.Get("/role/:id", controllers.GetUserRoleByID) - // # authentication + // # authentication # api.Post("/register", controllers.Register) api.Post("/login", controllers.Login) - // # userinfo + // # userinfo # api.Get("/user", middleware.AuthMiddleware, controllers.GetUserInfo) api.Post("/user/update-password", middleware.AuthMiddleware, controllers.UpdatePassword) api.Put("/user/update-user", middleware.AuthMiddleware, controllers.UpdateUser) - // # user set pin + // # user set pin # api.Get("/user/verif-pin", middleware.AuthMiddleware, controllers.GetPin) api.Get("/user/cek-pin-status", middleware.AuthMiddleware, controllers.GetPinStatus) api.Post("/user/set-pin", middleware.AuthMiddleware, controllers.CreatePin) api.Put("/user/update-pin", middleware.AuthMiddleware, controllers.UpdatePin) api.Put("/user/update-pin", middleware.AuthMiddleware, controllers.UpdatePin) - // # address routing + // # address routing # api.Get("/addresses", middleware.AuthMiddleware, controllers.GetListAddress) api.Get("/address/:id", middleware.AuthMiddleware, controllers.GetAddressByID) api.Post("/address/create-address", middleware.AuthMiddleware, controllers.CreateAddress) api.Put("/address/update-address/:id", middleware.AuthMiddleware, controllers.UpdateAddress) api.Delete("/address/delete-address/:id", middleware.AuthMiddleware, controllers.DeleteAddress) - // # article + // # article # api.Get("/articles", middleware.AuthMiddleware, controllers.GetArticles) api.Get("/article/:id", middleware.AuthMiddleware, controllers.GetArticleByID) api.Post("/article/create-article", middleware.AuthMiddleware, controllers.CreateArticle) api.Put("/article/update-article/:id", middleware.AuthMiddleware, controllers.UpdateArticle) api.Delete("/article/delete-article/:id", middleware.AuthMiddleware, controllers.DeleteArticle) - // # trash type + // # trash type # api.Get("/trash-categorys", controllers.GetTrashCategories) api.Get("/trash-category/:id", controllers.GetTrashCategoryDetail) api.Post("/trash-category/create-trash-category", controllers.CreateTrashCategory) @@ -72,7 +78,7 @@ func AppRouter(app *fiber.App) { api.Delete("/trash-category/delete-trash-category/:id", controllers.DeleteTrashCategory) api.Delete("/trash-category/delete-trash-detail/:id", controllers.DeleteTrashDetail) - // # banner + // # banner # api.Get("/banners", controllers.GetBanners) api.Get("/banner/:id", controllers.GetBannerByID) api.Post("/banner/create-banner", controllers.CreateBanner) diff --git a/internal/controllers/coveragearea.go b/internal/controllers/coveragearea.go index 434640e..0b6b988 100644 --- a/internal/controllers/coveragearea.go +++ b/internal/controllers/coveragearea.go @@ -2,6 +2,7 @@ package controllers import ( "github.com/gofiber/fiber/v2" + "github.com/pahmiudahgede/senggoldong/domain" "github.com/pahmiudahgede/senggoldong/dto" "github.com/pahmiudahgede/senggoldong/internal/services" "github.com/pahmiudahgede/senggoldong/utils" @@ -241,3 +242,168 @@ func CreateCoverageSubdistrict(c *fiber.Ctx) error { coverageSubdistrictResponse, )) } + +func UpdateCoverageArea(c *fiber.Ctx) error { + id := c.Params("id") + + var request dto.CoverageAreaUpdateRequest + if err := c.BodyParser(&request); err != nil { + return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse( + fiber.StatusBadRequest, + "Invalid request payload", + nil, + )) + } + + coverageArea, err := services.UpdateCoverageArea(id, domain.CoverageArea{ + Province: request.Province, + }) + if err != nil { + return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse( + fiber.StatusInternalServerError, + "Failed to update coverage area", + nil, + )) + } + + coverageAreaResponse := dto.NewCoverageAreaResponse( + coverageArea.ID, + coverageArea.Province, + utils.FormatDateToIndonesianFormat(coverageArea.CreatedAt), + utils.FormatDateToIndonesianFormat(coverageArea.UpdatedAt), + ) + + return c.Status(fiber.StatusOK).JSON(utils.FormatResponse( + fiber.StatusOK, + "Coverage area has been updated", + coverageAreaResponse, + )) +} + +func UpdateCoverageDistrict(c *fiber.Ctx) error { + id := c.Params("id") + + var request dto.CoverageDistrictUpdateRequest + if err := c.BodyParser(&request); err != nil { + return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse( + fiber.StatusBadRequest, + "Invalid request payload", + nil, + )) + } + + coverageDistrict, err := services.UpdateCoverageDistrict(id, domain.CoverageDistric{ + District: request.District, + }) + if err != nil { + return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse( + fiber.StatusInternalServerError, + "Failed to update coverage district", + nil, + )) + } + + coverageDistrictResponse := dto.NewCoverageAreaResponse( + coverageDistrict.ID, + coverageDistrict.District, + utils.FormatDateToIndonesianFormat(coverageDistrict.CreatedAt), + utils.FormatDateToIndonesianFormat(coverageDistrict.UpdatedAt), + ) + + return c.Status(fiber.StatusOK).JSON(utils.FormatResponse( + fiber.StatusOK, + "Coverage district has been updated", + coverageDistrictResponse, + )) +} + +func UpdateCoverageSubdistrict(c *fiber.Ctx) error { + id := c.Params("id") + + var request dto.CoverageSubdistrictUpdateRequest + if err := c.BodyParser(&request); err != nil { + return c.Status(fiber.StatusBadRequest).JSON(utils.FormatResponse( + fiber.StatusBadRequest, + "Invalid request payload", + nil, + )) + } + + coverageSubdistrict, err := services.UpdateCoverageSubdistrict(id, domain.CoverageSubdistrict{ + Subdistrict: request.Subdistrict, + }) + if err != nil { + return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse( + fiber.StatusInternalServerError, + "Failed to update coverage subdistrict", + nil, + )) + } + + coverageSubdistrictResponse := dto.NewSubdistrictResponse( + coverageSubdistrict.ID, + coverageSubdistrict.Subdistrict, + utils.FormatDateToIndonesianFormat(coverageSubdistrict.CreatedAt), + utils.FormatDateToIndonesianFormat(coverageSubdistrict.UpdatedAt), + ) + + return c.Status(fiber.StatusOK).JSON(utils.FormatResponse( + fiber.StatusOK, + "Coverage subdistrict has been updated", + coverageSubdistrictResponse, + )) +} + +func DeleteCoverageArea(c *fiber.Ctx) error { + id := c.Params("id") + + if err := services.DeleteCoverageArea(id); err != nil { + return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse( + fiber.StatusInternalServerError, + "Failed to delete coverage area", + nil, + )) + } + + return c.Status(fiber.StatusOK).JSON(utils.FormatResponse( + fiber.StatusOK, + "Coverage area has been deleted", + nil, + )) +} + +func DeleteCoverageDistrict(c *fiber.Ctx) error { + id := c.Params("id") + + if err := services.DeleteCoverageDistrict(id); err != nil { + return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse( + fiber.StatusInternalServerError, + "Failed to delete coverage district", + nil, + )) + } + + return c.Status(fiber.StatusOK).JSON(utils.FormatResponse( + fiber.StatusOK, + "Coverage district has been deleted", + nil, + )) +} + +func DeleteCoverageSubdistrict(c *fiber.Ctx) error { + id := c.Params("id") + + if err := services.DeleteCoverageSubdistrict(id); err != nil { + return c.Status(fiber.StatusInternalServerError).JSON(utils.FormatResponse( + fiber.StatusInternalServerError, + "Failed to delete coverage subdistrict", + nil, + )) + } + + return c.Status(fiber.StatusOK).JSON(utils.FormatResponse( + fiber.StatusOK, + "Coverage subdistrict has been deleted", + nil, + )) +} diff --git a/internal/repositories/coveragearea.go b/internal/repositories/coveragearea.go index e32982d..6eb9022 100644 --- a/internal/repositories/coveragearea.go +++ b/internal/repositories/coveragearea.go @@ -64,4 +64,85 @@ func CreateCoverageSubdistrict(coverageSubdistrict *domain.CoverageSubdistrict) return err } return nil -} \ No newline at end of file +} + +func UpdateCoverageArea(id string, coverageArea domain.CoverageArea) (domain.CoverageArea, error) { + var existingCoverageArea domain.CoverageArea + if err := config.DB.Where("id = ?", id).First(&existingCoverageArea).Error; err != nil { + return existingCoverageArea, err + } + + existingCoverageArea.Province = coverageArea.Province + if err := config.DB.Save(&existingCoverageArea).Error; err != nil { + return existingCoverageArea, err + } + + return existingCoverageArea, nil +} + +func UpdateCoverageDistrict(id string, coverageDistrict domain.CoverageDistric) (domain.CoverageDistric, error) { + var existingCoverageDistrict domain.CoverageDistric + if err := config.DB.Where("id = ?", id).First(&existingCoverageDistrict).Error; err != nil { + return existingCoverageDistrict, err + } + + existingCoverageDistrict.District = coverageDistrict.District + if err := config.DB.Save(&existingCoverageDistrict).Error; err != nil { + return existingCoverageDistrict, err + } + + return existingCoverageDistrict, nil +} + +func UpdateCoverageSubdistrict(id string, coverageSubdistrict domain.CoverageSubdistrict) (domain.CoverageSubdistrict, error) { + var existingCoverageSubdistrict domain.CoverageSubdistrict + if err := config.DB.Where("id = ?", id).First(&existingCoverageSubdistrict).Error; err != nil { + return existingCoverageSubdistrict, err + } + + existingCoverageSubdistrict.Subdistrict = coverageSubdistrict.Subdistrict + if err := config.DB.Save(&existingCoverageSubdistrict).Error; err != nil { + return existingCoverageSubdistrict, err + } + + return existingCoverageSubdistrict, nil +} + +func DeleteCoverageArea(id string) error { + var coverageArea domain.CoverageArea + if err := config.DB.Where("id = ?", id).First(&coverageArea).Error; err != nil { + return err + } + + if err := config.DB.Delete(&coverageArea).Error; err != nil { + return err + } + + return nil +} + +func DeleteCoverageDistrict(id string) error { + var coverageDistrict domain.CoverageDistric + if err := config.DB.Where("id = ?", id).First(&coverageDistrict).Error; err != nil { + return err + } + + if err := config.DB.Delete(&coverageDistrict).Error; err != nil { + return err + } + + return nil +} + +func DeleteCoverageSubdistrict(id string) error { + var coverageSubdistrict domain.CoverageSubdistrict + if err := config.DB.Where("id = ?", id).First(&coverageSubdistrict).Error; err != nil { + return err + } + + if err := config.DB.Delete(&coverageSubdistrict).Error; err != nil { + return err + } + + return nil +} diff --git a/internal/services/coveragearea.go b/internal/services/coveragearea.go index fd73660..db90dd3 100644 --- a/internal/services/coveragearea.go +++ b/internal/services/coveragearea.go @@ -62,4 +62,28 @@ func CreateCoverageSubdistrict(coverageAreaID, coverageDistrictId, subdistrict s } return coverageSubdistrict, nil +} + +func UpdateCoverageArea(id string, request domain.CoverageArea) (domain.CoverageArea, error) { + return repositories.UpdateCoverageArea(id, request) +} + +func UpdateCoverageDistrict(id string, request domain.CoverageDistric) (domain.CoverageDistric, error) { + return repositories.UpdateCoverageDistrict(id, request) +} + +func UpdateCoverageSubdistrict(id string, request domain.CoverageSubdistrict) (domain.CoverageSubdistrict, error) { + return repositories.UpdateCoverageSubdistrict(id, request) +} + +func DeleteCoverageArea(id string) error { + return repositories.DeleteCoverageArea(id) +} + +func DeleteCoverageDistrict(id string) error { + return repositories.DeleteCoverageDistrict(id) +} + +func DeleteCoverageSubdistrict(id string) error { + return repositories.DeleteCoverageSubdistrict(id) } \ No newline at end of file