diff --git a/backend/docs/docs.go b/backend/docs/docs.go index 92247c0..6473b70 100644 --- a/backend/docs/docs.go +++ b/backend/docs/docs.go @@ -156,6 +156,51 @@ const docTemplate = `{ } } }, + "/api/v1/ktmtrainbot/booking/{bookingID}/{status}": { + "put": { + "description": "Description", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "ktmtrainbot Booking" + ], + "summary": "Changing booking status", + "parameters": [ + { + "type": "string", + "description": "Booking ID", + "name": "bookingID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Status", + "name": "status", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/ktmtrainbot.BookingResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/common.ErrResponse" + } + } + } + } + }, "/api/v1/ktmtrainbot/current-time": { "get": { "description": "Description", diff --git a/backend/docs/swagger.json b/backend/docs/swagger.json index 68409d0..66a4f1a 100644 --- a/backend/docs/swagger.json +++ b/backend/docs/swagger.json @@ -148,6 +148,51 @@ } } }, + "/api/v1/ktmtrainbot/booking/{bookingID}/{status}": { + "put": { + "description": "Description", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "ktmtrainbot Booking" + ], + "summary": "Changing booking status", + "parameters": [ + { + "type": "string", + "description": "Booking ID", + "name": "bookingID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Status", + "name": "status", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/ktmtrainbot.BookingResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/common.ErrResponse" + } + } + } + } + }, "/api/v1/ktmtrainbot/current-time": { "get": { "description": "Description", diff --git a/backend/docs/swagger.yaml b/backend/docs/swagger.yaml index c8dbc9b..392353c 100644 --- a/backend/docs/swagger.yaml +++ b/backend/docs/swagger.yaml @@ -267,6 +267,36 @@ paths: summary: Delete booking tags: - ktmtrainbot Booking + /api/v1/ktmtrainbot/booking/{bookingID}/{status}: + put: + consumes: + - application/json + description: Description + parameters: + - description: Booking ID + in: path + name: bookingID + required: true + type: string + - description: Status + in: path + name: status + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/ktmtrainbot.BookingResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/common.ErrResponse' + summary: Changing booking status + tags: + - ktmtrainbot Booking /api/v1/ktmtrainbot/current-time: get: description: Description diff --git a/backend/internal/ktmtrainbot/bookingcontroller.go b/backend/internal/ktmtrainbot/bookingcontroller.go index dd848b9..22d7a1b 100644 --- a/backend/internal/ktmtrainbot/bookingcontroller.go +++ b/backend/internal/ktmtrainbot/bookingcontroller.go @@ -83,3 +83,34 @@ func (env *Env) deleteBooking( return &newBooking, nil } + +func (env *Env) updateBookingStatus( + user *user.User, + bookingIDStr string, + status string, +) (*Booking, error) { + var newBooking Booking + + bookingID, err := uuid.Parse(bookingIDStr) + if err != nil { + log.Println(err) + return nil, errors.New("invalid uuid") + } + + err = env.DB.Where(&Booking{ID: bookingID}).Where("user_id = ?", user.ID).First(&newBooking).Error + if err != nil { + log.Println(err) + return nil, errors.New("failed retrieve booking") + } + + newBooking.Status = status + + err = env.DB.Save(&newBooking).Error + + if err != nil { + log.Println(err) + return nil, errors.New("failed to update booking status") + } + + return &newBooking, nil +} diff --git a/backend/internal/ktmtrainbot/bookingroute.go b/backend/internal/ktmtrainbot/bookingroute.go index 8e704ea..c6eb79e 100644 --- a/backend/internal/ktmtrainbot/bookingroute.go +++ b/backend/internal/ktmtrainbot/bookingroute.go @@ -123,3 +123,37 @@ func (env *Env) deleteBookingRoute(w http.ResponseWriter, r *http.Request) { render.Render(w, r, env.NewBookingResponse(booking)) } + +// Change booking status +// @Summary Changing booking status +// @Description Description +// @Tags ktmtrainbot Booking +// @Accept json +// @Produce json +// @Param bookingID path string true "Booking ID" +// @Param status path string true "Status" +// @Success 200 {object} BookingResponse +// @Failure 400 {object} common.ErrResponse +// @Router /api/v1/ktmtrainbot/booking/{bookingID}/{status} [put] +func (env *Env) updateBookingStatusRoute(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") + status := chi.URLParam(r, "status") + + booking, err := env.updateBookingStatus(currUser, bookingID, status) + + if err != nil { + render.Render(w, r, common.ErrInvalidRequest(err)) + return + } + + render.Render(w, r, env.NewBookingResponse(booking)) +} diff --git a/backend/internal/ktmtrainbot/main.go b/backend/internal/ktmtrainbot/main.go index 4d5987f..bc84197 100644 --- a/backend/internal/ktmtrainbot/main.go +++ b/backend/internal/ktmtrainbot/main.go @@ -26,6 +26,7 @@ func KTMTrainBotRoutes(db *gorm.DB) chi.Router { checkLoggedInUserGroup.Get("/booking", env.getBookingRoute) checkLoggedInUserGroup.Post("/booking", env.createBookingRoute) checkLoggedInUserGroup.Delete("/booking/{bookingID}", env.deleteBookingRoute) + checkLoggedInUserGroup.Put("/booking/{bookingID}/{status}", env.updateBookingStatusRoute) return r }