1
0
Fork 0

feat: add endpoints to update payment and attendance status of training date attendee

This commit is contained in:
Vojtěch Mareš 2024-05-13 12:55:13 +02:00
parent 140ec493bf
commit f5e632a46f
Signed by: vojtech.mares
GPG key ID: C6827B976F17240D
3 changed files with 555 additions and 37 deletions

View file

@ -386,6 +386,66 @@ paths:
"500":
$ref: "#/components/responses/InternalError"
/v1/trainings/{trainingID}/dates/{trainingDateID}/attendees/{trainingDateAttendeeID}/paid:
put:
summary: Update status of a training date attendee payment
operationId: updateTrainingDateAttendeePayment
tags:
- Trainings
parameters:
- $ref: "#/components/parameters/TrainingID"
- $ref: "#/components/parameters/TrainingDateID"
- $ref: "#/components/parameters/TrainingDateAttendeeID"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/TrainingDateAttendeePaymentUpdateRequest"
responses:
"200":
description: Training date attendee payment status updated
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateTrainingDateAttendeeResponse"
"400":
$ref: "#/components/responses/InvalidInputError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalError"
/v1/trainings/{trainingID}/dates/{trainingDateID}/attendees/{trainingDateAttendeeID}/attended:
put:
summary: Update status of a training date attendee attendance
operationId: updateTrainingDateAttendeeAttendance
tags:
- Trainings
parameters:
- $ref: "#/components/parameters/TrainingID"
- $ref: "#/components/parameters/TrainingDateID"
- $ref: "#/components/parameters/TrainingDateAttendeeID"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/TrainingDateAttendeeAttendanceUpdateRequest"
responses:
"200":
description: Training date attendee attendance status updated
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateTrainingDateAttendeeResponse"
"400":
$ref: "#/components/responses/InvalidInputError"
"404":
$ref: "#/components/responses/NotFoundError"
"500":
$ref: "#/components/responses/InternalError"
/v1/trainings/{trainingID}/dates/{trainingDateID}/attendees/count:
get:
summary: Get a training date attendee count
@ -630,6 +690,22 @@ components:
required:
- count
TrainingDateAttendeePaymentUpdateRequest:
type: object
properties:
paid:
type: boolean
required:
- paid
TrainingDateAttendeeAttendanceUpdateRequest:
type: object
properties:
attended:
type: boolean
required:
- attended
TrainingDateAttendeeID:
type: string
format: uuid

View file

@ -168,9 +168,19 @@ type TrainingDateAttendee struct {
Position string `json:"position"`
}
// TrainingDateAttendeeAttendanceUpdateRequest defines model for TrainingDateAttendeeAttendanceUpdateRequest.
type TrainingDateAttendeeAttendanceUpdateRequest struct {
Attended bool `json:"attended"`
}
// TrainingDateAttendeeID defines model for TrainingDateAttendeeID.
type TrainingDateAttendeeID = training.TrainingDateAttendeeID
// TrainingDateAttendeePaymentUpdateRequest defines model for TrainingDateAttendeePaymentUpdateRequest.
type TrainingDateAttendeePaymentUpdateRequest struct {
Paid bool `json:"paid"`
}
// TrainingDateID defines model for TrainingDateID.
type TrainingDateID = training.TrainingDateID
@ -232,6 +242,12 @@ type CreateTrainingDateAttendeeJSONRequestBody = CreateTrainingDateAttendeeReque
// UpdateTrainingDateAttendeeJSONRequestBody defines body for UpdateTrainingDateAttendee for application/json ContentType.
type UpdateTrainingDateAttendeeJSONRequestBody = UpdateTrainingDateAttendeeRequest
// UpdateTrainingDateAttendeeAttendanceJSONRequestBody defines body for UpdateTrainingDateAttendeeAttendance for application/json ContentType.
type UpdateTrainingDateAttendeeAttendanceJSONRequestBody = TrainingDateAttendeeAttendanceUpdateRequest
// UpdateTrainingDateAttendeePaymentJSONRequestBody defines body for UpdateTrainingDateAttendeePayment for application/json ContentType.
type UpdateTrainingDateAttendeePaymentJSONRequestBody = TrainingDateAttendeePaymentUpdateRequest
// ServerInterface represents all server handlers.
type ServerInterface interface {
// List all trainings
@ -285,6 +301,12 @@ type ServerInterface interface {
// Update a training date attendee by ID
// (PUT /v1/trainings/{trainingID}/dates/{trainingDateID}/attendees/{trainingDateAttendeeID})
UpdateTrainingDateAttendee(c *fiber.Ctx, trainingID TrainingID, trainingDateID TrainingDateID, trainingDateAttendeeID TrainingDateAttendeeID) error
// Update status of a training date attendee attendance
// (PUT /v1/trainings/{trainingID}/dates/{trainingDateID}/attendees/{trainingDateAttendeeID}/attended)
UpdateTrainingDateAttendeeAttendance(c *fiber.Ctx, trainingID TrainingID, trainingDateID TrainingDateID, trainingDateAttendeeID TrainingDateAttendeeID) error
// Update status of a training date attendee payment
// (PUT /v1/trainings/{trainingID}/dates/{trainingDateID}/attendees/{trainingDateAttendeeID}/paid)
UpdateTrainingDateAttendeePayment(c *fiber.Ctx, trainingID TrainingID, trainingDateID TrainingDateID, trainingDateAttendeeID TrainingDateAttendeeID) error
// List upcoming dates of a training
// (GET /v1/trainings/{trainingID}/upcoming-dates)
ListTrainingUpcomingDates(c *fiber.Ctx, trainingID TrainingID) error
@ -635,6 +657,70 @@ func (siw *ServerInterfaceWrapper) UpdateTrainingDateAttendee(c *fiber.Ctx) erro
return siw.Handler.UpdateTrainingDateAttendee(c, trainingID, trainingDateID, trainingDateAttendeeID)
}
// UpdateTrainingDateAttendeeAttendance operation middleware
func (siw *ServerInterfaceWrapper) UpdateTrainingDateAttendeeAttendance(c *fiber.Ctx) error {
var err error
// ------------- Path parameter "trainingID" -------------
var trainingID TrainingID
err = runtime.BindStyledParameterWithOptions("simple", "trainingID", c.Params("trainingID"), &trainingID, runtime.BindStyledParameterOptions{Explode: false, Required: true})
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter trainingID: %w", err).Error())
}
// ------------- Path parameter "trainingDateID" -------------
var trainingDateID TrainingDateID
err = runtime.BindStyledParameterWithOptions("simple", "trainingDateID", c.Params("trainingDateID"), &trainingDateID, runtime.BindStyledParameterOptions{Explode: false, Required: true})
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter trainingDateID: %w", err).Error())
}
// ------------- Path parameter "trainingDateAttendeeID" -------------
var trainingDateAttendeeID TrainingDateAttendeeID
err = runtime.BindStyledParameterWithOptions("simple", "trainingDateAttendeeID", c.Params("trainingDateAttendeeID"), &trainingDateAttendeeID, runtime.BindStyledParameterOptions{Explode: false, Required: true})
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter trainingDateAttendeeID: %w", err).Error())
}
return siw.Handler.UpdateTrainingDateAttendeeAttendance(c, trainingID, trainingDateID, trainingDateAttendeeID)
}
// UpdateTrainingDateAttendeePayment operation middleware
func (siw *ServerInterfaceWrapper) UpdateTrainingDateAttendeePayment(c *fiber.Ctx) error {
var err error
// ------------- Path parameter "trainingID" -------------
var trainingID TrainingID
err = runtime.BindStyledParameterWithOptions("simple", "trainingID", c.Params("trainingID"), &trainingID, runtime.BindStyledParameterOptions{Explode: false, Required: true})
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter trainingID: %w", err).Error())
}
// ------------- Path parameter "trainingDateID" -------------
var trainingDateID TrainingDateID
err = runtime.BindStyledParameterWithOptions("simple", "trainingDateID", c.Params("trainingDateID"), &trainingDateID, runtime.BindStyledParameterOptions{Explode: false, Required: true})
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter trainingDateID: %w", err).Error())
}
// ------------- Path parameter "trainingDateAttendeeID" -------------
var trainingDateAttendeeID TrainingDateAttendeeID
err = runtime.BindStyledParameterWithOptions("simple", "trainingDateAttendeeID", c.Params("trainingDateAttendeeID"), &trainingDateAttendeeID, runtime.BindStyledParameterOptions{Explode: false, Required: true})
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter trainingDateAttendeeID: %w", err).Error())
}
return siw.Handler.UpdateTrainingDateAttendeePayment(c, trainingID, trainingDateID, trainingDateAttendeeID)
}
// ListTrainingUpcomingDates operation middleware
func (siw *ServerInterfaceWrapper) ListTrainingUpcomingDates(c *fiber.Ctx) error {
@ -706,6 +792,10 @@ func RegisterHandlersWithOptions(router fiber.Router, si ServerInterface, option
router.Put(options.BaseURL+"/v1/trainings/:trainingID/dates/:trainingDateID/attendees/:trainingDateAttendeeID", wrapper.UpdateTrainingDateAttendee)
router.Put(options.BaseURL+"/v1/trainings/:trainingID/dates/:trainingDateID/attendees/:trainingDateAttendeeID/attended", wrapper.UpdateTrainingDateAttendeeAttendance)
router.Put(options.BaseURL+"/v1/trainings/:trainingID/dates/:trainingDateID/attendees/:trainingDateAttendeeID/paid", wrapper.UpdateTrainingDateAttendeePayment)
router.Get(options.BaseURL+"/v1/trainings/:trainingID/upcoming-dates", wrapper.ListTrainingUpcomingDates)
}
@ -1424,6 +1514,112 @@ func (response UpdateTrainingDateAttendee500ApplicationProblemPlusJSONResponse)
return ctx.JSON(&response)
}
type UpdateTrainingDateAttendeeAttendanceRequestObject struct {
TrainingID TrainingID `json:"trainingID"`
TrainingDateID TrainingDateID `json:"trainingDateID"`
TrainingDateAttendeeID TrainingDateAttendeeID `json:"trainingDateAttendeeID"`
Body *UpdateTrainingDateAttendeeAttendanceJSONRequestBody
}
type UpdateTrainingDateAttendeeAttendanceResponseObject interface {
VisitUpdateTrainingDateAttendeeAttendanceResponse(ctx *fiber.Ctx) error
}
type UpdateTrainingDateAttendeeAttendance200JSONResponse UpdateTrainingDateAttendeeResponse
func (response UpdateTrainingDateAttendeeAttendance200JSONResponse) VisitUpdateTrainingDateAttendeeAttendanceResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/json")
ctx.Status(200)
return ctx.JSON(&response)
}
type UpdateTrainingDateAttendeeAttendance400ApplicationProblemPlusJSONResponse struct {
InvalidInputErrorApplicationProblemPlusJSONResponse
}
func (response UpdateTrainingDateAttendeeAttendance400ApplicationProblemPlusJSONResponse) VisitUpdateTrainingDateAttendeeAttendanceResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/problem+json")
ctx.Status(400)
return ctx.JSON(&response)
}
type UpdateTrainingDateAttendeeAttendance404ApplicationProblemPlusJSONResponse struct {
NotFoundErrorApplicationProblemPlusJSONResponse
}
func (response UpdateTrainingDateAttendeeAttendance404ApplicationProblemPlusJSONResponse) VisitUpdateTrainingDateAttendeeAttendanceResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/problem+json")
ctx.Status(404)
return ctx.JSON(&response)
}
type UpdateTrainingDateAttendeeAttendance500ApplicationProblemPlusJSONResponse struct {
InternalErrorApplicationProblemPlusJSONResponse
}
func (response UpdateTrainingDateAttendeeAttendance500ApplicationProblemPlusJSONResponse) VisitUpdateTrainingDateAttendeeAttendanceResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/problem+json")
ctx.Status(500)
return ctx.JSON(&response)
}
type UpdateTrainingDateAttendeePaymentRequestObject struct {
TrainingID TrainingID `json:"trainingID"`
TrainingDateID TrainingDateID `json:"trainingDateID"`
TrainingDateAttendeeID TrainingDateAttendeeID `json:"trainingDateAttendeeID"`
Body *UpdateTrainingDateAttendeePaymentJSONRequestBody
}
type UpdateTrainingDateAttendeePaymentResponseObject interface {
VisitUpdateTrainingDateAttendeePaymentResponse(ctx *fiber.Ctx) error
}
type UpdateTrainingDateAttendeePayment200JSONResponse UpdateTrainingDateAttendeeResponse
func (response UpdateTrainingDateAttendeePayment200JSONResponse) VisitUpdateTrainingDateAttendeePaymentResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/json")
ctx.Status(200)
return ctx.JSON(&response)
}
type UpdateTrainingDateAttendeePayment400ApplicationProblemPlusJSONResponse struct {
InvalidInputErrorApplicationProblemPlusJSONResponse
}
func (response UpdateTrainingDateAttendeePayment400ApplicationProblemPlusJSONResponse) VisitUpdateTrainingDateAttendeePaymentResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/problem+json")
ctx.Status(400)
return ctx.JSON(&response)
}
type UpdateTrainingDateAttendeePayment404ApplicationProblemPlusJSONResponse struct {
NotFoundErrorApplicationProblemPlusJSONResponse
}
func (response UpdateTrainingDateAttendeePayment404ApplicationProblemPlusJSONResponse) VisitUpdateTrainingDateAttendeePaymentResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/problem+json")
ctx.Status(404)
return ctx.JSON(&response)
}
type UpdateTrainingDateAttendeePayment500ApplicationProblemPlusJSONResponse struct {
InternalErrorApplicationProblemPlusJSONResponse
}
func (response UpdateTrainingDateAttendeePayment500ApplicationProblemPlusJSONResponse) VisitUpdateTrainingDateAttendeePaymentResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/problem+json")
ctx.Status(500)
return ctx.JSON(&response)
}
type ListTrainingUpcomingDatesRequestObject struct {
TrainingID TrainingID `json:"trainingID"`
}
@ -1516,6 +1712,12 @@ type StrictServerInterface interface {
// Update a training date attendee by ID
// (PUT /v1/trainings/{trainingID}/dates/{trainingDateID}/attendees/{trainingDateAttendeeID})
UpdateTrainingDateAttendee(ctx context.Context, request UpdateTrainingDateAttendeeRequestObject) (UpdateTrainingDateAttendeeResponseObject, error)
// Update status of a training date attendee attendance
// (PUT /v1/trainings/{trainingID}/dates/{trainingDateID}/attendees/{trainingDateAttendeeID}/attended)
UpdateTrainingDateAttendeeAttendance(ctx context.Context, request UpdateTrainingDateAttendeeAttendanceRequestObject) (UpdateTrainingDateAttendeeAttendanceResponseObject, error)
// Update status of a training date attendee payment
// (PUT /v1/trainings/{trainingID}/dates/{trainingDateID}/attendees/{trainingDateAttendeeID}/paid)
UpdateTrainingDateAttendeePayment(ctx context.Context, request UpdateTrainingDateAttendeePaymentRequestObject) (UpdateTrainingDateAttendeePaymentResponseObject, error)
// List upcoming dates of a training
// (GET /v1/trainings/{trainingID}/upcoming-dates)
ListTrainingUpcomingDates(ctx context.Context, request ListTrainingUpcomingDatesRequestObject) (ListTrainingUpcomingDatesResponseObject, error)
@ -2035,6 +2237,76 @@ func (sh *strictHandler) UpdateTrainingDateAttendee(ctx *fiber.Ctx, trainingID T
return nil
}
// UpdateTrainingDateAttendeeAttendance operation middleware
func (sh *strictHandler) UpdateTrainingDateAttendeeAttendance(ctx *fiber.Ctx, trainingID TrainingID, trainingDateID TrainingDateID, trainingDateAttendeeID TrainingDateAttendeeID) error {
var request UpdateTrainingDateAttendeeAttendanceRequestObject
request.TrainingID = trainingID
request.TrainingDateID = trainingDateID
request.TrainingDateAttendeeID = trainingDateAttendeeID
var body UpdateTrainingDateAttendeeAttendanceJSONRequestBody
if err := ctx.BodyParser(&body); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
request.Body = &body
handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) {
return sh.ssi.UpdateTrainingDateAttendeeAttendance(ctx.UserContext(), request.(UpdateTrainingDateAttendeeAttendanceRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "UpdateTrainingDateAttendeeAttendance")
}
response, err := handler(ctx, request)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if validResponse, ok := response.(UpdateTrainingDateAttendeeAttendanceResponseObject); ok {
if err := validResponse.VisitUpdateTrainingDateAttendeeAttendanceResponse(ctx); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
} else if response != nil {
return fmt.Errorf("unexpected response type: %T", response)
}
return nil
}
// UpdateTrainingDateAttendeePayment operation middleware
func (sh *strictHandler) UpdateTrainingDateAttendeePayment(ctx *fiber.Ctx, trainingID TrainingID, trainingDateID TrainingDateID, trainingDateAttendeeID TrainingDateAttendeeID) error {
var request UpdateTrainingDateAttendeePaymentRequestObject
request.TrainingID = trainingID
request.TrainingDateID = trainingDateID
request.TrainingDateAttendeeID = trainingDateAttendeeID
var body UpdateTrainingDateAttendeePaymentJSONRequestBody
if err := ctx.BodyParser(&body); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
request.Body = &body
handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) {
return sh.ssi.UpdateTrainingDateAttendeePayment(ctx.UserContext(), request.(UpdateTrainingDateAttendeePaymentRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "UpdateTrainingDateAttendeePayment")
}
response, err := handler(ctx, request)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if validResponse, ok := response.(UpdateTrainingDateAttendeePaymentResponseObject); ok {
if err := validResponse.VisitUpdateTrainingDateAttendeePaymentResponse(ctx); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
} else if response != nil {
return fmt.Errorf("unexpected response type: %T", response)
}
return nil
}
// ListTrainingUpcomingDates operation middleware
func (sh *strictHandler) ListTrainingUpcomingDates(ctx *fiber.Ctx, trainingID TrainingID) error {
var request ListTrainingUpcomingDatesRequestObject
@ -2065,43 +2337,45 @@ func (sh *strictHandler) ListTrainingUpcomingDates(ctx *fiber.Ctx, trainingID Tr
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
"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",
"W/w/AAD//zpRcbTXTQAA",
"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",
"AAA=",
}
// GetSwagger returns the content of the embedded swagger specification file

View file

@ -797,3 +797,171 @@ func (h *APIHandlers) UpdateTrainingDateAttendee(ctx context.Context, req Update
},
}, nil
}
func (h *APIHandlers) UpdateTrainingDateAttendeePayment(ctx context.Context, req UpdateTrainingDateAttendeePaymentRequestObject) (UpdateTrainingDateAttendeePaymentResponseObject, error) {
_, err := h.trainingRepository.FindByID(req.TrainingID)
if err != nil {
if errors.Is(err, training.ErrTrainingNotFound) {
return UpdateTrainingDateAttendeePayment404ApplicationProblemPlusJSONResponse{
NotFoundErrorApplicationProblemPlusJSONResponse: NotFoundErrorApplicationProblemPlusJSONResponse{
Status: fiber.StatusNotFound,
Title: "Not Found: Training not found",
}}, nil
} else {
return UpdateTrainingDateAttendeePayment500ApplicationProblemPlusJSONResponse{
InternalErrorApplicationProblemPlusJSONResponse: InternalErrorApplicationProblemPlusJSONResponse{
Status: fiber.StatusInternalServerError,
Title: "Internal Server Error: Failed to get training",
Detail: err.Error(),
}}, nil
}
}
_, err = h.trainingDateRepository.FindByID(req.TrainingDateID)
if err != nil {
if errors.Is(err, training.ErrTrainingDateNotFound) {
return UpdateTrainingDateAttendeePayment404ApplicationProblemPlusJSONResponse{
NotFoundErrorApplicationProblemPlusJSONResponse: NotFoundErrorApplicationProblemPlusJSONResponse{
Status: fiber.StatusNotFound,
Title: "Not Found: Training date not found",
}}, nil
} else {
return UpdateTrainingDateAttendeePayment500ApplicationProblemPlusJSONResponse{
InternalErrorApplicationProblemPlusJSONResponse: InternalErrorApplicationProblemPlusJSONResponse{
Status: fiber.StatusInternalServerError,
Title: "Internal Server Error: Failed to get training date",
Detail: err.Error(),
}}, nil
}
}
ta, err := h.trainingDateAttendeeRepository.FindByID(req.TrainingDateAttendeeID)
if err != nil {
if errors.Is(err, training.ErrTrainingDateAttendeeNotFound) {
return UpdateTrainingDateAttendeePayment404ApplicationProblemPlusJSONResponse{
NotFoundErrorApplicationProblemPlusJSONResponse: NotFoundErrorApplicationProblemPlusJSONResponse{
Status: fiber.StatusNotFound,
Title: "Not Found: Training date attendee not found",
}}, nil
} else {
return UpdateTrainingDateAttendeePayment500ApplicationProblemPlusJSONResponse{
InternalErrorApplicationProblemPlusJSONResponse: InternalErrorApplicationProblemPlusJSONResponse{
Status: fiber.StatusInternalServerError,
Title: "Internal Server Error: Failed to get training date attendee",
Detail: err.Error(),
}}, nil
}
}
ta.HasPaid = req.Body.Paid
err = h.trainingDateAttendeeRepository.Update(ta)
if err != nil {
return UpdateTrainingDateAttendeePayment500ApplicationProblemPlusJSONResponse{
InternalErrorApplicationProblemPlusJSONResponse: InternalErrorApplicationProblemPlusJSONResponse{
Status: fiber.StatusInternalServerError,
Title: "Internal Server Error: Failed to update training date attendee",
Detail: err.Error(),
}}, nil
}
return UpdateTrainingDateAttendeePayment200JSONResponse{
Id: ta.ID,
Name: ta.Name,
Email: types.Email(ta.Email),
Phone: ta.Phone,
Company: ta.Company,
Position: ta.Position,
IsStudent: &ta.IsStudent,
HasAttended: ta.HasAttended,
HasPaid: ta.HasPaid,
Bill: Price{
Amount: ta.Bill.Amount.String(),
Currency: ta.Bill.Currency,
},
}, nil
}
func (h *APIHandlers) UpdateTrainingDateAttendeeAttendance(ctx context.Context, req UpdateTrainingDateAttendeeAttendanceRequestObject) (UpdateTrainingDateAttendeeAttendanceResponseObject, error) {
_, err := h.trainingRepository.FindByID(req.TrainingID)
if err != nil {
if errors.Is(err, training.ErrTrainingNotFound) {
return UpdateTrainingDateAttendeeAttendance404ApplicationProblemPlusJSONResponse{
NotFoundErrorApplicationProblemPlusJSONResponse: NotFoundErrorApplicationProblemPlusJSONResponse{
Status: fiber.StatusNotFound,
Title: "Not Found: Training not found",
}}, nil
} else {
return UpdateTrainingDateAttendeeAttendance500ApplicationProblemPlusJSONResponse{
InternalErrorApplicationProblemPlusJSONResponse: InternalErrorApplicationProblemPlusJSONResponse{
Status: fiber.StatusInternalServerError,
Title: "Internal Server Error: Failed to get training",
Detail: err.Error(),
}}, nil
}
}
_, err = h.trainingDateRepository.FindByID(req.TrainingDateID)
if err != nil {
if errors.Is(err, training.ErrTrainingDateNotFound) {
return UpdateTrainingDateAttendeeAttendance404ApplicationProblemPlusJSONResponse{
NotFoundErrorApplicationProblemPlusJSONResponse: NotFoundErrorApplicationProblemPlusJSONResponse{
Status: fiber.StatusNotFound,
Title: "Not Found: Training date not found",
}}, nil
} else {
return UpdateTrainingDateAttendeeAttendance500ApplicationProblemPlusJSONResponse{
InternalErrorApplicationProblemPlusJSONResponse: InternalErrorApplicationProblemPlusJSONResponse{
Status: fiber.StatusInternalServerError,
Title: "Internal Server Error: Failed to get training date",
Detail: err.Error(),
}}, nil
}
}
ta, err := h.trainingDateAttendeeRepository.FindByID(req.TrainingDateAttendeeID)
if err != nil {
if errors.Is(err, training.ErrTrainingDateAttendeeNotFound) {
return UpdateTrainingDateAttendeeAttendance404ApplicationProblemPlusJSONResponse{
NotFoundErrorApplicationProblemPlusJSONResponse: NotFoundErrorApplicationProblemPlusJSONResponse{
Status: fiber.StatusNotFound,
Title: "Not Found: Training date attendee not found",
}}, nil
} else {
return UpdateTrainingDateAttendeeAttendance500ApplicationProblemPlusJSONResponse{
InternalErrorApplicationProblemPlusJSONResponse: InternalErrorApplicationProblemPlusJSONResponse{
Status: fiber.StatusInternalServerError,
Title: "Internal Server Error: Failed to get training date attendee",
Detail: err.Error(),
}}, nil
}
}
ta.HasAttended = req.Body.Attended
err = h.trainingDateAttendeeRepository.Update(ta)
if err != nil {
return UpdateTrainingDateAttendeeAttendance500ApplicationProblemPlusJSONResponse{
InternalErrorApplicationProblemPlusJSONResponse: InternalErrorApplicationProblemPlusJSONResponse{
Status: fiber.StatusInternalServerError,
Title: "Internal Server Error: Failed to update training date attendee",
Detail: err.Error(),
}}, nil
}
return UpdateTrainingDateAttendeeAttendance200JSONResponse{
Id: ta.ID,
Name: ta.Name,
Email: types.Email(ta.Email),
Phone: ta.Phone,
Company: ta.Company,
Position: ta.Position,
IsStudent: &ta.IsStudent,
HasAttended: ta.HasAttended,
HasPaid: ta.HasPaid,
Bill: Price{
Amount: ta.Bill.Amount.String(),
Currency: ta.Bill.Currency,
},
}, nil
}