Skip to content

Commit

Permalink
feat: pe3 register & status
Browse files Browse the repository at this point in the history
  • Loading branch information
HyggeHalcyon committed May 15, 2024
1 parent bea9c3a commit a01a02a
Show file tree
Hide file tree
Showing 12 changed files with 311 additions and 815 deletions.
4 changes: 3 additions & 1 deletion constants/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package constants

const (
PE2Name = "Pre-event 2"
PE3Name = "Pre-event 3"
MainEventEarlyBirdWithMerch = "Early Bird with merchandise bundle"
MainEventPreSaleWithMerch = "Pre Sale with merchandise bundle"
MainEventNormalWithMerch = "Normal with merchandise bundle"
Expand All @@ -12,7 +13,7 @@ const (

const (
MainEventEarlyBirdWithMerchCapacity = 7
MainEventPreSaleWithMerchCapacity = 13
MainEventPreSaleWithMerchCapacity = 14
MainEventNormalWithMerchCapacity = 20
MainEventEarlyBirdNoMerchCapacity = 13
MainEventPreSaleNoMerchCapacity = 57
Expand All @@ -27,4 +28,5 @@ const (
MainEventPreSaleWithMerchID = "edef91cb-f43f-4a30-a5f0-43acd0d6853f"
MainEventNormalWithMerchID = "0594226b-c314-42e7-9743-c76fdd6b7099"
PreEvent2ID = "7de24efe-0aec-469a-bf0c-8fa8cae3ff3f"
PreEvent3ID = "d436ff9d-5956-48a5-acb1-1e96d94fc3c4"
)
59 changes: 59 additions & 0 deletions controller/pre-event-3.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package controller

import (
"net/http"

"github.com/TEDxITS/website-backend-2024/constants"
"github.com/TEDxITS/website-backend-2024/dto"
"github.com/TEDxITS/website-backend-2024/service"
"github.com/TEDxITS/website-backend-2024/utils"
"github.com/gin-gonic/gin"
)

type (
PreEvent3Controller interface {
RegisterPreEvent3(ctx *gin.Context)
GetPreEvent3Status(ctx *gin.Context)
}

preEvent3Controller struct {
preEvent3Service service.PreEvent3Service
}
)

func NewPreEvent3Controller(service service.PreEvent3Service) PreEvent3Controller {
return &preEvent3Controller{
preEvent3Service: service,
}
}

func (c *preEvent3Controller) RegisterPreEvent3(ctx *gin.Context) {
var req dto.PE3RSVPRegister
if err := ctx.ShouldBind(&req); err != nil {
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_DATA_FROM_BODY, err.Error(), nil)
ctx.AbortWithStatusJSON(http.StatusBadRequest, res)
return
}

err := c.preEvent3Service.RegisterPE3(req, ctx.GetString(constants.CTX_KEY_USER_ID))
if err != nil {
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_CREATE_TICKET, err.Error(), nil)
ctx.JSON(http.StatusBadRequest, res)
return
}

res := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_CREATE_TICKET, nil)
ctx.JSON(http.StatusOK, res)
}

func (c *preEvent3Controller) GetPreEvent3Status(ctx *gin.Context) {
status, err := c.preEvent3Service.GetStatus()
if err != nil {
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_PE3_STATUS, err.Error(), nil)
ctx.JSON(http.StatusBadRequest, res)
return
}

res := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_GET_PE3_STATUS, status)
ctx.JSON(http.StatusOK, res)
}
29 changes: 29 additions & 0 deletions dto/pre-event-3.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package dto

import (
"errors"
"mime/multipart"
"time"
)

const (
MESSAGE_FAILED_GET_PE3_STATUS = "Failed to get pre-Event 3 status"
MESSAGE_SUCCESS_GET_PE3_STATUS = "Successfully get pre-Event 3 status"
)

var (
ErrPreEvent3NotYetOpen = errors.New("pre-Event 3 registration is not yet open")
ErrPreEvent3Closed = errors.New("pre-Event 3 registration is closed")
)

type (
PE3RSVPRegister struct {
Handphone string `json:"handphone" form:"handphone" binding:"required"`
Birthdate time.Time `json:"birthdate" form:"birthdate" binding:"required"`
PaymentFile *multipart.FileHeader `json:"payment_file" form:"payment_file" binding:"required"`
}

PE3RSVPStatus struct {
Status *bool `json:"status"`
}
)
36 changes: 0 additions & 36 deletions dto/ticket-queue.go

This file was deleted.

14 changes: 3 additions & 11 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,18 +39,14 @@ func main() {
ticketRepository repository.TicketRepository = repository.NewTicketRepository(db)
bucketRepository repository.BucketRepository = repository.NewSupabaseBucketRepository(bucket)

// websocket hub
// earlyBirdHub websocket.QueueHub = websocket.RunConnHub(eventRepository, 4, constants.MainEventEarlyBirdNoMerchID, constants.MainEventEarlyBirdWithMerchID)
// preSaleHub websocket.QueueHub = websocket.RunConnHub(eventRepository, 4, constants.MainEventPreSaleNoMerchID, constants.MainEventPreSaleWithMerchID)
// normalHub websocket.QueueHub = websocket.RunConnHub(eventRepository, 4, constants.MainEventNormalNoMerchID, constants.MainEventNormalWithMerchID)

// services
userService service.UserService = service.NewUserService(userRepository, roleRepo)
linkShortenerService service.LinkShortenerService = service.NewLinkShortenerService(linkShortenerRepository)
preEvent2Service service.PreEvent2Service = service.NewPreEvent2Service(eventRepository, pe2RSVPRepo)
eventService service.EventService = service.NewEventService(eventRepository)
mainEventService service.MainEventService = service.NewMainEventService(userRepository, ticketRepository, eventRepository, bucketRepository)
storageService service.StorageService = service.NewStorageService(bucketRepository)
preEvent3Service service.PreEvent3Service = service.NewPreEvent3Service(userRepository, ticketRepository, eventRepository, bucketRepository)

// controllers
userController controller.UserController = controller.NewUserController(userService, jwtService)
Expand All @@ -59,11 +55,7 @@ func main() {
preEvent2Controller controller.PreEvent2Controller = controller.NewPreEvent2Controller(preEvent2Service)
mainEventController controller.MainEventController = controller.NewMainEventController(mainEventService)
storageController controller.StorageController = controller.NewStorageController(storageService)

// websocket handler
// earlyBirdQueue websocket.TicketQueue = websocket.NewTicketQueue(earlyBirdHub, jwtService)
// preSaleQueue websocket.TicketQueue = websocket.NewTicketQueue(preSaleHub, jwtService)
// normalQueue websocket.TicketQueue = websocket.NewTicketQueue(normalHub, jwtService)
preEvent3Controller controller.PreEvent3Controller = controller.NewPreEvent3Controller(preEvent3Service)
)

server := gin.Default()
Expand All @@ -76,8 +68,8 @@ func main() {
routes.Event(server, eventController, jwtService)
routes.PreEvent2(server, preEvent2Controller, jwtService)
routes.MainEvent(server, mainEventController, jwtService)
// routes.TicketQueue(server, earlyBirdQueue, preSaleQueue, normalQueue)
routes.Storage(server, storageController, jwtService)
routes.PreEvent3(server, preEvent3Controller, jwtService)

// https://github.com/gin-contrib/cors
// https://stackoverflow.com/questions/76196547/websocket-returning-403-every-time
Expand Down
12 changes: 11 additions & 1 deletion migrations/seeder/seeders/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,17 @@ func EventSeeder(db *gorm.DB) error {
Registers: 0,
StartDate: time.Date(2024, time.May, 16, 15, 0, 0, 0, time.Now().UTC().Location()),
EndDate: time.Date(2024, time.May, 24, 12, 0, 0, 0, time.Now().UTC().Location()),
})
}, entity.Event{
ID: uuid.MustParse(constants.PreEvent3ID),
Name: constants.PE3Name,
Price: 0,
WithKit: &False,
Capacity: 999,
Registers: 0,
StartDate: time.Date(2024, time.May, 19, 15, 0, 0, 0, time.Now().UTC().Location()),
EndDate: time.Date(2024, time.May, 24, 12, 0, 0, 0, time.Now().UTC().Location()),
},
)

for _, data := range eventList {
event := entity.Event{}
Expand Down
16 changes: 16 additions & 0 deletions routes/pre-event-3.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package routes

import (
"github.com/TEDxITS/website-backend-2024/config"
"github.com/TEDxITS/website-backend-2024/controller"
"github.com/TEDxITS/website-backend-2024/middleware"
"github.com/gin-gonic/gin"
)

func PreEvent3(r *gin.Engine, c controller.PreEvent3Controller, jwt config.JWTService) {
preEvent3 := r.Group("/api/ticket/pre-event-3")
{
preEvent3.POST("", middleware.Authenticate(jwt), c.RegisterPreEvent3)
preEvent3.GET("/status", c.GetPreEvent3Status)
}
}
15 changes: 0 additions & 15 deletions routes/ticket-queue.go

This file was deleted.

Loading

0 comments on commit a01a02a

Please sign in to comment.