From 550f56e27cfe9542c9a698b563d85c5e0205d8d6 Mon Sep 17 00:00:00 2001 From: pahmiudahgede Date: Thu, 15 May 2025 11:09:36 +0700 Subject: [PATCH] fix: fixing response format for about with id --- dto/about_dto.go | 7 +------ internal/repositories/about_repo.go | 12 ++++++++++++ internal/services/about_service.go | 14 ++++++++++++-- presentation/about_route.go | 22 ++++++++++------------ 4 files changed, 35 insertions(+), 20 deletions(-) diff --git a/dto/about_dto.go b/dto/about_dto.go index 898e647..c4df688 100644 --- a/dto/about_dto.go +++ b/dto/about_dto.go @@ -7,7 +7,6 @@ import ( type RequestAboutDTO struct { Title string `json:"title"` CoverImage string `json:"cover_image"` - // AboutDetail []RequestAboutDetailDTO `json:"about_detail"` } func (r *RequestAboutDTO) ValidateAbout() (map[string][]string, bool) { @@ -43,11 +42,7 @@ func (r *RequestAboutDetailDTO) ValidateAboutDetail() (map[string][]string, bool errors := make(map[string][]string) if strings.TrimSpace(r.AboutId) == "" { - errors["about_id"] = append(errors["about_id"], "About ID is required") - } - - if strings.TrimSpace(r.ImageDetail) == "" { - errors["image_detail"] = append(errors["image_detail"], "Image detail is required") + errors["about_id"] = append(errors["about_id"], "about_id is required") } if strings.TrimSpace(r.Description) == "" { diff --git a/internal/repositories/about_repo.go b/internal/repositories/about_repo.go index 3535af9..29224f5 100644 --- a/internal/repositories/about_repo.go +++ b/internal/repositories/about_repo.go @@ -12,6 +12,7 @@ type AboutRepository interface { CreateAboutDetail(aboutDetail *model.AboutDetail) error GetAllAbout() ([]model.About, error) GetAboutByID(id string) (*model.About, error) + GetAboutByIDWithoutPrel(id string) (*model.About, error) GetAboutDetailByID(id string) (*model.AboutDetail, error) UpdateAbout(id string, about *model.About) (*model.About, error) UpdateAboutDetail(id string, aboutDetail *model.AboutDetail) (*model.AboutDetail, error) @@ -60,6 +61,17 @@ func (r *aboutRepository) GetAboutByID(id string) (*model.About, error) { return &about, nil } +func (r *aboutRepository) GetAboutByIDWithoutPrel(id string) (*model.About, error) { + var about model.About + if err := r.DB.Where("id = ?", id).First(&about).Error; err != nil { + if err == gorm.ErrRecordNotFound { + return nil, fmt.Errorf("about with ID %s not found", id) + } + return nil, fmt.Errorf("failed to fetch About by ID: %v", err) + } + return &about, nil +} + func (r *aboutRepository) GetAboutDetailByID(id string) (*model.AboutDetail, error) { var aboutDetail model.AboutDetail if err := r.DB.Where("id = ?", id).First(&aboutDetail).Error; err != nil { diff --git a/internal/services/about_service.go b/internal/services/about_service.go index 1d1fcab..6a61a83 100644 --- a/internal/services/about_service.go +++ b/internal/services/about_service.go @@ -272,6 +272,17 @@ func (s *aboutService) GetAboutByID(id string) (*dto.ResponseAboutDTO, error) { return nil, fmt.Errorf("error formatting About response: %v", err) } + var responseDetails []dto.ResponseAboutDetailDTO + for _, detail := range about.AboutDetail { + formattedDetail, err := formatResponseAboutDetailDTO(&detail) + if err != nil { + return nil, fmt.Errorf("error formatting AboutDetail response: %v", err) + } + responseDetails = append(responseDetails, *formattedDetail) + } + + response.AboutDetail = &responseDetails + return response, nil } @@ -317,9 +328,8 @@ func (s *aboutService) CreateAboutDetail(request dto.RequestAboutDetailDTO, cove return nil, fmt.Errorf("validation error: %v", errors) } - _, err := s.aboutRepo.GetAboutByID(request.AboutId) + _, err := s.aboutRepo.GetAboutByIDWithoutPrel(request.AboutId) if err != nil { - return nil, fmt.Errorf("about_id tidak ditemukan: %v", err) } diff --git a/presentation/about_route.go b/presentation/about_route.go index 6616d4e..a803038 100644 --- a/presentation/about_route.go +++ b/presentation/about_route.go @@ -12,26 +12,24 @@ import ( ) func AboutRouter(api fiber.Router) { - aboutRepo := repositories.NewAboutRepository(config.DB) aboutService := services.NewAboutService(aboutRepo) aboutHandler := handler.NewAboutHandler(aboutService) aboutRoutes := api.Group("/about") - aboutRoute := api.Group("/about") - aboutRoutes.Use(middleware.AuthMiddleware, middleware.RoleMiddleware(utils.RoleAdministrator)) + aboutRoutes.Use(middleware.AuthMiddleware) - aboutRoute.Get("/", aboutHandler.GetAllAbout) - aboutRoute.Get("/:id", aboutHandler.GetAboutByID) - aboutRoutes.Post("/", aboutHandler.CreateAbout) - aboutRoutes.Put("/:id", aboutHandler.UpdateAbout) - aboutRoutes.Delete("/:id", aboutHandler.DeleteAbout) + aboutRoutes.Get("/", aboutHandler.GetAllAbout) + aboutRoutes.Get("/:id", aboutHandler.GetAboutByID) + aboutRoutes.Post("/", aboutHandler.CreateAbout) // admin + aboutRoutes.Put("/:id", middleware.RoleMiddleware(utils.RoleAdministrator), aboutHandler.UpdateAbout) + aboutRoutes.Delete("/:id", aboutHandler.DeleteAbout) // admin aboutDetailRoutes := api.Group("/about-detail") - aboutDetailRoutes.Use(middleware.AuthMiddleware, middleware.RoleMiddleware(utils.RoleAdministrator)) + aboutDetailRoutes.Use(middleware.AuthMiddleware) aboutDetailRoute := api.Group("/about-detail") aboutDetailRoute.Get("/:id", aboutHandler.GetAboutDetailById) - aboutDetailRoutes.Post("/", aboutHandler.CreateAboutDetail) - aboutDetailRoutes.Put("/:id", aboutHandler.UpdateAboutDetail) - aboutDetailRoutes.Delete("/:id", aboutHandler.DeleteAboutDetail) + aboutDetailRoutes.Post("/", aboutHandler.CreateAboutDetail) // admin + aboutDetailRoutes.Put("/:id", middleware.RoleMiddleware(utils.RoleAdministrator), aboutHandler.UpdateAboutDetail) + aboutDetailRoutes.Delete("/:id", middleware.RoleMiddleware(utils.RoleAdministrator), aboutHandler.DeleteAboutDetail) }