Skip to content

Commit

Permalink
refac: routes and dto flow
Browse files Browse the repository at this point in the history
  • Loading branch information
HyggeHalcyon committed Mar 28, 2024
1 parent 4a1005a commit 9ec1178
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 108 deletions.
40 changes: 8 additions & 32 deletions controller/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -31,51 +27,31 @@ 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)
ctx.AbortWithStatusJSON(http.StatusNotFound, 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)
}
19 changes: 3 additions & 16 deletions dto/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"`
}
)
10 changes: 5 additions & 5 deletions migrations/seeder/json/event.json
Original file line number Diff line number Diff line change
@@ -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"
}
]
]
9 changes: 7 additions & 2 deletions migrations/seeder/seeders/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
9 changes: 3 additions & 6 deletions routes/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
85 changes: 38 additions & 47 deletions service/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand All @@ -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) {
Expand All @@ -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
}

0 comments on commit 9ec1178

Please sign in to comment.