From 928312f600ef67e38ca0a996bba8c7b8b168c0ea Mon Sep 17 00:00:00 2001 From: hanif salafi Date: Mon, 3 Nov 2025 13:06:38 +0700 Subject: [PATCH] feat: update schedule response and request --- .../controller/schedules.controller.go | 1 + .../schedules/mapper/schedules.mapper.go | 20 +++++++++++--- .../schedules/request/schedules.request.go | 5 ++++ .../schedules/response/schedules.response.go | 2 ++ .../schedules/service/schedules.service.go | 27 ++++++++++++++++--- docs/swagger/docs.go | 5 ++++ docs/swagger/swagger.json | 5 ++++ docs/swagger/swagger.yaml | 3 +++ 8 files changed, 61 insertions(+), 7 deletions(-) diff --git a/app/module/schedules/controller/schedules.controller.go b/app/module/schedules/controller/schedules.controller.go index 9c4650c..b1c4aad 100644 --- a/app/module/schedules/controller/schedules.controller.go +++ b/app/module/schedules/controller/schedules.controller.go @@ -65,6 +65,7 @@ func (_i *schedulesController) All(c *fiber.Ctx) error { Speakers: c.Query("speakers"), StatusId: c.Query("statusId"), CreatedById: c.Query("createdById"), + ClientSlug: c.Query("clientSlug"), } req := reqContext.ToParamRequest() req.Pagination = paginate diff --git a/app/module/schedules/mapper/schedules.mapper.go b/app/module/schedules/mapper/schedules.mapper.go index 3cd978d..1cc480b 100644 --- a/app/module/schedules/mapper/schedules.mapper.go +++ b/app/module/schedules/mapper/schedules.mapper.go @@ -2,10 +2,22 @@ package mapper import ( "netidhub-saas-be/app/database/entity" + clientsRepository "netidhub-saas-be/app/module/clients/repository" schedulesResponse "netidhub-saas-be/app/module/schedules/response" ) -func ToSchedulesResponse(schedule *entity.Schedules) *schedulesResponse.SchedulesResponse { +func ToSchedulesResponse(schedule *entity.Schedules, clientsRepo clientsRepository.ClientsRepository) *schedulesResponse.SchedulesResponse { + var clientName *string + var clientSlug *string + + if schedule.ClientId != nil { + findClient, _ := clientsRepo.FindOneByClientId(schedule.ClientId) + if findClient != nil { + clientName = &findClient.Name + clientSlug = &findClient.Slug + } + } + return &schedulesResponse.SchedulesResponse{ ID: schedule.ID, Title: schedule.Title, @@ -22,16 +34,18 @@ func ToSchedulesResponse(schedule *entity.Schedules) *schedulesResponse.Schedule PosterImagePath: schedule.PosterImagePath, CreatedById: schedule.CreatedById, StatusId: schedule.StatusId, + ClientName: clientName, + ClientSlug: clientSlug, IsActive: schedule.IsActive, CreatedAt: schedule.CreatedAt, UpdatedAt: schedule.UpdatedAt, } } -func ToSchedulesResponseList(schedules []*entity.Schedules) []*schedulesResponse.SchedulesResponse { +func ToSchedulesResponseList(schedules []*entity.Schedules, clientsRepo clientsRepository.ClientsRepository) []*schedulesResponse.SchedulesResponse { var responses []*schedulesResponse.SchedulesResponse for _, schedule := range schedules { - responses = append(responses, ToSchedulesResponse(schedule)) + responses = append(responses, ToSchedulesResponse(schedule, clientsRepo)) } return responses } diff --git a/app/module/schedules/request/schedules.request.go b/app/module/schedules/request/schedules.request.go index 8c2138c..d138843 100644 --- a/app/module/schedules/request/schedules.request.go +++ b/app/module/schedules/request/schedules.request.go @@ -22,6 +22,7 @@ type SchedulesQueryRequest struct { Speakers *string `json:"speakers"` StatusId *int `json:"statusId"` CreatedById *uint `json:"createdById"` + ClientSlug *string `json:"clientSlug"` Pagination *paginator.Pagination `json:"pagination"` } @@ -105,6 +106,7 @@ type SchedulesQueryRequestContext struct { Speakers string `json:"speakers"` StatusId string `json:"statusId"` CreatedById string `json:"createdById"` + ClientSlug string `json:"clientSlug"` } func (req SchedulesQueryRequestContext) ToParamRequest() SchedulesQueryRequest { @@ -157,6 +159,9 @@ func (req SchedulesQueryRequestContext) ToParamRequest() SchedulesQueryRequest { request.CreatedById = &createdByIdUint } } + if clientSlug := req.ClientSlug; clientSlug != "" { + request.ClientSlug = &clientSlug + } return request } diff --git a/app/module/schedules/response/schedules.response.go b/app/module/schedules/response/schedules.response.go index d0cfd80..dff6355 100644 --- a/app/module/schedules/response/schedules.response.go +++ b/app/module/schedules/response/schedules.response.go @@ -23,6 +23,8 @@ type SchedulesResponse struct { CreatedByName *string `json:"createdByName"` StatusId *int `json:"statusId"` StatusName *string `json:"statusName"` + ClientName *string `json:"clientName"` + ClientSlug *string `json:"clientSlug"` IsActive *bool `json:"isActive"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` diff --git a/app/module/schedules/service/schedules.service.go b/app/module/schedules/service/schedules.service.go index 5022210..fc19594 100644 --- a/app/module/schedules/service/schedules.service.go +++ b/app/module/schedules/service/schedules.service.go @@ -1,6 +1,7 @@ package service import ( + clientsRepository "netidhub-saas-be/app/module/clients/repository" "netidhub-saas-be/app/module/schedules/mapper" "netidhub-saas-be/app/module/schedules/repository" "netidhub-saas-be/app/module/schedules/request" @@ -8,6 +9,7 @@ import ( "netidhub-saas-be/utils/paginator" "github.com/google/uuid" + "github.com/rs/zerolog" ) type SchedulesService interface { @@ -21,21 +23,38 @@ type SchedulesService interface { type schedulesService struct { schedulesRepository repository.SchedulesRepository + clientsRepository clientsRepository.ClientsRepository + log zerolog.Logger } -func NewSchedulesService(schedulesRepository repository.SchedulesRepository) SchedulesService { +func NewSchedulesService(schedulesRepository repository.SchedulesRepository, clientsRepository clientsRepository.ClientsRepository, log zerolog.Logger) SchedulesService { return &schedulesService{ schedulesRepository: schedulesRepository, + clientsRepository: clientsRepository, + log: log, } } func (_i *schedulesService) All(clientId *uuid.UUID, req request.SchedulesQueryRequest) ([]*schedulesResponse.SchedulesResponse, *paginator.Pagination, error) { + // Handle clientSlug filter - find client by slug and set clientId + if req.ClientSlug != nil { + findClient, err := _i.clientsRepository.FindBySlug(*req.ClientSlug) + if err != nil { + _i.log.Error().Err(err).Str("clientSlug", *req.ClientSlug).Msg("Failed to find client by slug") + return nil, nil, err + } + if findClient != nil { + clientId = &findClient.ID + _i.log.Info().Str("clientSlug", *req.ClientSlug).Str("clientId", findClient.ID.String()).Msg("Found client by slug") + } + } + schedules, pagination, err := _i.schedulesRepository.All(clientId, req) if err != nil { return nil, nil, err } - responses := mapper.ToSchedulesResponseList(schedules) + responses := mapper.ToSchedulesResponseList(schedules, _i.clientsRepository) return responses, pagination, nil } @@ -45,7 +64,7 @@ func (_i *schedulesService) Show(clientId *uuid.UUID, id uint) (*schedulesRespon return nil, err } - response := mapper.ToSchedulesResponse(schedule) + response := mapper.ToSchedulesResponse(schedule, _i.clientsRepository) return response, nil } @@ -57,7 +76,7 @@ func (_i *schedulesService) Save(clientId *uuid.UUID, req request.SchedulesCreat return nil, err } - response := mapper.ToSchedulesResponse(savedSchedule) + response := mapper.ToSchedulesResponse(savedSchedule, _i.clientsRepository) return response, nil } diff --git a/docs/swagger/docs.go b/docs/swagger/docs.go index 732222a..2a09456 100644 --- a/docs/swagger/docs.go +++ b/docs/swagger/docs.go @@ -13777,6 +13777,11 @@ const docTemplate = `{ "name": "Authorization", "in": "header" }, + { + "type": "string", + "name": "clientSlug", + "in": "query" + }, { "type": "integer", "name": "createdById", diff --git a/docs/swagger/swagger.json b/docs/swagger/swagger.json index cef1079..cd7a72c 100644 --- a/docs/swagger/swagger.json +++ b/docs/swagger/swagger.json @@ -13766,6 +13766,11 @@ "name": "Authorization", "in": "header" }, + { + "type": "string", + "name": "clientSlug", + "in": "query" + }, { "type": "integer", "name": "createdById", diff --git a/docs/swagger/swagger.yaml b/docs/swagger/swagger.yaml index 46ee8a0..a5db342 100644 --- a/docs/swagger/swagger.yaml +++ b/docs/swagger/swagger.yaml @@ -10479,6 +10479,9 @@ paths: in: header name: Authorization type: string + - in: query + name: clientSlug + type: string - in: query name: createdById type: integer