Feat(ktm-booking): Initial commit
Some checks failed
ktm-booking-bot/ktm-booking-bot/pipeline/head Something is wrong with the build of this commit

This commit is contained in:
2022-09-27 02:50:07 +08:00
commit 7cf10b07d4
44 changed files with 4569 additions and 0 deletions

View File

@@ -0,0 +1,124 @@
package ktmtrainbot
import (
"errors"
"net/http"
"git.samuelpua.com/telboon/ktm-train-bot/backend/internal/common"
"git.samuelpua.com/telboon/ktm-train-bot/backend/internal/user"
"github.com/go-chi/chi"
"github.com/go-chi/render"
"github.com/go-playground/validator/v10"
)
// Get All Bookings
// @Summary Get All Booking
// @Description Description
// @Tags ktmtrainbot Booking
// @Accept json
// @Produce json
// @Success 200 {object} []BookingResponse
// @Failure 400 {object} common.ErrResponse
// @Router /api/v1/ktmtrainbot/booking [get]
func (env *Env) getBookingRoute(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
currUser, ok := ctx.Value(user.UserContextKey).(*user.User)
if !ok {
err := errors.New("user not logged in")
render.Render(w, r, common.ErrInternalError(err))
return
}
_ = currUser
booking, err := env.getAllBooking(currUser)
if err != nil {
render.Render(w, r, common.ErrInvalidRequest(err))
return
}
render.Render(w, r, env.NewBookingListResponse(booking))
}
// Create New Booking
// @Summary Create New Booking
// @Description Description
// @Tags ktmtrainbot Booking
// @Accept json
// @Produce json
// @Param user body BookingCreateRequest true "Booking Create Request"
// @Success 200 {object} BookingResponse
// @Failure 400 {object} common.ErrResponse
// @Router /api/v1/ktmtrainbot/booking [post]
func (env *Env) createBookingRoute(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
currUser, ok := ctx.Value(user.UserContextKey).(*user.User)
if !ok {
err := errors.New("user not logged in")
render.Render(w, r, common.ErrInternalError(err))
return
}
_ = currUser
data := &BookingCreateRequest{}
err := render.DecodeJSON(r.Body, data)
if err != nil {
render.Render(w, r, common.ErrInvalidRequest(err))
return
}
err = validator.New().Struct(data)
if err != nil {
render.Render(w, r, common.ErrValidationError(err))
return
}
booking, err := env.createBooking(
currUser,
data.TravelDate,
data.TimeCode,
data.Name,
data.Gender,
data.Passport,
data.PassportExpiry,
data.Contact,
)
if err != nil {
render.Render(w, r, common.ErrInvalidRequest(err))
return
}
render.Render(w, r, env.NewBookingResponse(booking))
}
// Delete booking
// @Summary Delete booking
// @Description Description
// @Tags ktmtrainbot Booking
// @Accept json
// @Produce json
// @Param bookingID path string true "Booking ID"
// @Success 200 {object} BookingResponse
// @Failure 400 {object} common.ErrResponse
// @Router /api/v1/ktmtrainbot/booking/{bookingID} [delete]
func (env *Env) deleteBookingRoute(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
currUser, ok := ctx.Value(user.UserContextKey).(*user.User)
if !ok {
err := errors.New("user not logged in")
render.Render(w, r, common.ErrInternalError(err))
return
}
_ = currUser
bookingID := chi.URLParam(r, "bookingID")
booking, err := env.deleteBooking(currUser, bookingID)
if err != nil {
render.Render(w, r, common.ErrInvalidRequest(err))
return
}
render.Render(w, r, env.NewBookingResponse(booking))
}