diff --git a/controller/event.go b/controller/event.go index 5a090c8..9ab88d0 100644 --- a/controller/event.go +++ b/controller/event.go @@ -12,12 +12,8 @@ import ( type ( EventController interface { - FindAll(ctx *gin.Context, userRole string) - FindAllAdmin(ctx *gin.Context) - FindAllUser(ctx *gin.Context) - FindByID(ctx *gin.Context, id string, userRole string) - FindByIDAdmin(ctx *gin.Context) - FindByIDUser(ctx *gin.Context) + FindAll(ctx *gin.Context) + FindByID(ctx *gin.Context) } eventController struct { @@ -31,43 +27,24 @@ func NewEventController(es service.EventService) EventController { } } -func (c *eventController) FindAllAdmin(ctx *gin.Context) { - userRole := ctx.MustGet(constants.CTX_KEY_ROLE_NAME).(string) - c.FindAll(ctx, userRole) -} - -func (c *eventController) FindAllUser(ctx *gin.Context) { - userRole := "user" - c.FindAll(ctx, userRole) -} +func (c *eventController) FindAll(ctx *gin.Context) { + userRole := ctx.GetString(constants.CTX_KEY_ROLE_NAME) -func (c *eventController) FindAll(ctx *gin.Context, userRole string) { result, err := c.eventService.FindAll(ctx, userRole) - if err != nil { response := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_EVENT, err.Error(), nil) ctx.AbortWithStatusJSON(http.StatusBadRequest, response) return } - response := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_GET_EVENT, result.Data) - + response := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_GET_EVENT, result) ctx.JSON(http.StatusOK, response) } -func (c *eventController) FindByIDAdmin(ctx *gin.Context) { - userRole := ctx.MustGet(constants.CTX_KEY_ROLE_NAME).(string) +func (c *eventController) FindByID(ctx *gin.Context) { + userRole := ctx.GetString(constants.CTX_KEY_ROLE_NAME) id := ctx.Param("id") - c.FindByID(ctx, id, userRole) -} -func (c *eventController) FindByIDUser(ctx *gin.Context) { - userRole := "user" - id := ctx.Param("id") - c.FindByID(ctx, id, userRole) -} - -func (c *eventController) FindByID(ctx *gin.Context, id string, userRole string) { result, err := c.eventService.FindByID(ctx, id, userRole) if err != nil { response := utils.BuildResponseFailed(dto.MESSAGE_EVENT_NOT_FOUND, err.Error(), nil) @@ -75,7 +52,6 @@ func (c *eventController) FindByID(ctx *gin.Context, id string, userRole string) return } - response := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_GET_EVENT, result.Data) - + response := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_GET_EVENT, result) ctx.JSON(http.StatusOK, response) } diff --git a/dto/event.go b/dto/event.go index 6261787..9740198 100644 --- a/dto/event.go +++ b/dto/event.go @@ -17,27 +17,14 @@ var ( ) type ( - AdminEventResponse struct { - ID string `json:"id"` - Name string `json:"name"` - Description string `json:"description"` - Price int `json:"price"` - Capacity int `json:"capacity"` - Registers int `json:"registers"` - StartDate time.Time `json:"start_date"` - EndDate time.Time `json:"end_date"` - } - - UserEventResponse struct { + EventResponse struct { ID string `json:"id"` Name string `json:"name"` Description string `json:"description"` Price int `json:"price"` + Capacity int `json:"capacity,omitempty"` + Registers int `json:"registers,omitempty"` StartDate time.Time `json:"start_date"` EndDate time.Time `json:"end_date"` } - - EventResponse struct { - Data interface{} `json:"data"` - } ) diff --git a/migrations/seeder/json/event.json b/migrations/seeder/json/event.json index ff7466a..25b1a72 100644 --- a/migrations/seeder/json/event.json +++ b/migrations/seeder/json/event.json @@ -1,11 +1,11 @@ [ { "id": "7de24efe-0aec-469a-bf0c-8fa8cae3ff3f", - "name": "Pre-Event 2", + "name": "pre-event 2", "description": "This is a Description", - "price": 2000, + "price": 0, "capacity": 40, - "start_date": "2024-01-01 12:00:00", - "end_date": "2024-12-12 12:00:00" + "start_date": "2024-04-10T12:00:00Z", + "end_date": "2024-04-17T12:00:00Z" } -] \ No newline at end of file +] diff --git a/migrations/seeder/seeders/event.go b/migrations/seeder/seeders/event.go index 60070fb..7a8d5ba 100644 --- a/migrations/seeder/seeders/event.go +++ b/migrations/seeder/seeders/event.go @@ -21,10 +21,15 @@ func EventSeeder(db *gorm.DB) error { if err != nil { return err } - jsonData, _ := io.ReadAll(jsonFile) + jsonData, err := io.ReadAll(jsonFile) + if err != nil { + return err + } var eventList []entity.Event - json.Unmarshal(jsonData, &eventList) + if err := json.Unmarshal(jsonData, &eventList); err != nil { + return err + } for _, data := range eventList { if err := db.Save(&data).Error; err != nil { diff --git a/routes/event.go b/routes/event.go index 3169739..3f52cc4 100644 --- a/routes/event.go +++ b/routes/event.go @@ -8,12 +8,9 @@ import ( ) func Event(route *gin.Engine, eventController controller.EventController, jwtService service.JWTService) { - routes := route.Group("/api/event") + routes := route.Group("/api/events") { - routes.GET("/", eventController.FindAllUser) - routes.GET("/:id", eventController.FindByIDUser) - - routes.GET("/admin", middleware.Authenticate(jwtService), eventController.FindAllAdmin) - routes.GET("/:id/admin", middleware.Authenticate(jwtService), eventController.FindByIDAdmin) + routes.GET("/", middleware.Authenticate(jwtService), eventController.FindAll) + routes.GET("/:id", middleware.Authenticate(jwtService), eventController.FindByID) } } diff --git a/service/event.go b/service/event.go index 86ca034..dd1c9ce 100644 --- a/service/event.go +++ b/service/event.go @@ -3,13 +3,14 @@ package service import ( "context" + "github.com/TEDxITS/website-backend-2024/constants" "github.com/TEDxITS/website-backend-2024/dto" "github.com/TEDxITS/website-backend-2024/repository" ) type ( EventService interface { - FindAll(ctx context.Context, userRole string) (dto.EventResponse, error) + FindAll(ctx context.Context, userRole string) ([]dto.EventResponse, error) FindByID(ctx context.Context, id string, userRole string) (dto.EventResponse, error) } @@ -24,40 +25,36 @@ func NewEventService(er repository.EventRepository) EventService { } } -func (s *eventService) FindAll(ctx context.Context, userRole string) (dto.EventResponse, error) { +func (s *eventService) FindAll(ctx context.Context, userRole string) ([]dto.EventResponse, error) { events, err := s.eventRepo.FindAll() if err != nil { - return dto.EventResponse{}, err + return []dto.EventResponse{}, err } - var eventResponses []interface{} + var result []dto.EventResponse for _, event := range events { - var eventResponse interface{} - if userRole == "admin" { - eventResponse = dto.AdminEventResponse{ - ID: event.ID.String(), - Name: event.Name, - Description: event.Description, - Price: event.Price, - Capacity: event.Capacity, - Registers: event.Registers, - StartDate: event.StartDate, - EndDate: event.EndDate, - } - } else { - eventResponse = dto.UserEventResponse{ - ID: event.ID.String(), - Name: event.Name, - Description: event.Description, - Price: event.Price, - StartDate: event.StartDate, - EndDate: event.EndDate, + eventResponse := dto.EventResponse{ + ID: event.ID.String(), + Name: event.Name, + Description: event.Description, + Price: event.Price, + StartDate: event.StartDate, + EndDate: event.EndDate, + } + + if userRole == constants.ENUM_ROLE_ADMIN { + if event.Registers == 0 { + event.Registers = 1 } + + eventResponse.Capacity = event.Capacity + eventResponse.Registers = event.Registers } - eventResponses = append(eventResponses, eventResponse) + + result = append(result, eventResponse) } - return dto.EventResponse{Data: eventResponses}, nil + return result, nil } func (s *eventService) FindByID(ctx context.Context, id string, userRole string) (dto.EventResponse, error) { @@ -66,29 +63,23 @@ func (s *eventService) FindByID(ctx context.Context, id string, userRole string) return dto.EventResponse{}, err } - var eventResponse interface{} + result := dto.EventResponse{ + ID: event.ID.String(), + Name: event.Name, + Description: event.Description, + Price: event.Price, + StartDate: event.StartDate, + EndDate: event.EndDate, + } - if userRole == "admin" { - eventResponse = dto.AdminEventResponse{ - ID: event.ID.String(), - Name: event.Name, - Description: event.Description, - Price: event.Price, - Capacity: event.Capacity, - Registers: event.Registers, - StartDate: event.StartDate, - EndDate: event.EndDate, - } - } else { - eventResponse = dto.UserEventResponse{ - ID: event.ID.String(), - Name: event.Name, - Description: event.Description, - Price: event.Price, - StartDate: event.StartDate, - EndDate: event.EndDate, + if userRole == constants.ENUM_ROLE_ADMIN { + if event.Registers == 0 { + event.Registers = 1 } + + result.Capacity = event.Capacity + result.Registers = event.Registers } - return dto.EventResponse{Data: eventResponse}, nil + return result, nil }