1
0
Fork 0

refactor: move currency to money package and add new type Price, refactor api and use price there too

This commit is contained in:
Vojtěch Mareš 2024-05-05 18:19:56 +02:00
parent 18d1c98b76
commit ef1526a1ac
Signed by: vojtech.mares
GPG key ID: C6827B976F17240D
7 changed files with 127 additions and 137 deletions

View file

@ -18,7 +18,7 @@ import (
"github.com/gofiber/fiber/v2"
"github.com/oapi-codegen/runtime"
"github.com/shopspring/decimal"
"gitlab.mareshq.com/hq/yggdrasil/internal/currency"
"gitlab.mareshq.com/hq/yggdrasil/internal/money"
"gitlab.mareshq.com/hq/yggdrasil/pkg/training"
)
@ -71,14 +71,20 @@ type NewTraining struct {
// NewTrainingDate defines model for NewTrainingDate.
type NewTrainingDate struct {
Address string `json:"address"`
Capacity int8 `json:"capacity"`
Date time.Time `json:"date"`
Days int8 `json:"days"`
IsOnline bool `json:"isOnline"`
Location string `json:"location"`
Price TrainingDatePrice `json:"price"`
StartTime string `json:"startTime"`
Address string `json:"address"`
Capacity int8 `json:"capacity"`
Date time.Time `json:"date"`
Days int8 `json:"days"`
IsOnline bool `json:"isOnline"`
Location string `json:"location"`
Price Price `json:"price"`
StartTime string `json:"startTime"`
}
// Price defines model for Price.
type Price struct {
Amount decimal.Decimal `json:"amount"`
Currency money.Currency `json:"currency"`
}
// ProblemDetails Schema that carries the details of an error in an HTTP response. See https://datatracker.ietf.org/doc/html/rfc7807 for more information.
@ -110,33 +116,27 @@ type Training struct {
// TrainingDate defines model for TrainingDate.
type TrainingDate struct {
Address string `json:"address"`
Capacity int8 `json:"capacity"`
Date time.Time `json:"date"`
Days int8 `json:"days"`
Id TrainingDateID `json:"id"`
IsOnline bool `json:"isOnline"`
Location string `json:"location"`
Price TrainingDatePrice `json:"price"`
StartTime string `json:"startTime"`
Address string `json:"address"`
Capacity int8 `json:"capacity"`
Date time.Time `json:"date"`
Days int8 `json:"days"`
Id TrainingDateID `json:"id"`
IsOnline bool `json:"isOnline"`
Location string `json:"location"`
Price Price `json:"price"`
StartTime string `json:"startTime"`
}
// TrainingDateID defines model for TrainingDateID.
type TrainingDateID = training.TrainingDateID
// TrainingDatePrice defines model for TrainingDatePrice.
type TrainingDatePrice struct {
Amount decimal.Decimal `json:"amount"`
Currency currency.Currency `json:"currency"`
}
// TrainingID defines model for TrainingID.
type TrainingID = training.TrainingID
// TrainingPrice defines model for TrainingPrice.
type TrainingPrice struct {
Amount decimal.Decimal `json:"amount"`
Currency currency.Currency `json:"currency"`
Currency money.Currency `json:"currency"`
Type TrainingPriceType `json:"type"`
}
@ -1344,37 +1344,37 @@ func (sh *strictHandler) ListTrainingUpcomingDates(ctx *fiber.Ctx, trainingID Tr
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
"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",
"yifra3yrL6v/BwAA//8Lqnf6hDQAAA==",
"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",
"xkX5ZH2Fb3m7/G8AAAD//6DZ/Q5BMwAA",
}
// GetSwagger returns the content of the embedded swagger specification file

View file

@ -5,6 +5,7 @@ import (
"time"
"github.com/gofiber/fiber/v2"
"gitlab.mareshq.com/hq/yggdrasil/internal/money"
"gitlab.mareshq.com/hq/yggdrasil/pkg/training"
)
@ -211,7 +212,7 @@ func (h *APIHandlers) ListTrainingDates(ctx context.Context, req ListTrainingDat
Location: td.Location,
Address: td.Address,
Capacity: td.Capacity,
Price: TrainingDatePrice{
Price: Price{
Amount: td.Price.Amount,
Currency: td.Price.Currency,
},
@ -222,7 +223,7 @@ func (h *APIHandlers) ListTrainingDates(ctx context.Context, req ListTrainingDat
}
func (h *APIHandlers) CreateTrainingDate(ctx context.Context, req CreateTrainingDateRequestObject) (CreateTrainingDateResponseObject, error) {
price := training.TrainingDatePrice{
price := money.Price{
Amount: req.Body.Price.Amount,
Currency: req.Body.Price.Currency,
}
@ -267,7 +268,7 @@ func (h *APIHandlers) CreateTrainingDate(ctx context.Context, req CreateTraining
Location: td.Location,
Address: td.Address,
Capacity: td.Capacity,
Price: TrainingDatePrice{
Price: Price{
Amount: td.Price.Amount,
Currency: td.Price.Currency,
},
@ -320,7 +321,7 @@ func (h *APIHandlers) GetTrainingDate(ctx context.Context, req GetTrainingDateRe
Location: td.Location,
Address: td.Address,
Capacity: td.Capacity,
Price: TrainingDatePrice{
Price: Price{
Amount: td.Price.Amount,
Currency: td.Price.Currency,
},
@ -328,7 +329,7 @@ func (h *APIHandlers) GetTrainingDate(ctx context.Context, req GetTrainingDateRe
}
func (h *APIHandlers) UpdateTrainingDate(ctx context.Context, req UpdateTrainingDateRequestObject) (UpdateTrainingDateResponseObject, error) {
price := training.TrainingDatePrice{
price := money.Price{
Amount: req.Body.Price.Amount,
Currency: req.Body.Price.Currency,
}
@ -374,7 +375,7 @@ func (h *APIHandlers) UpdateTrainingDate(ctx context.Context, req UpdateTraining
Location: td.Location,
Address: td.Address,
Capacity: td.Capacity,
Price: TrainingDatePrice{
Price: Price{
Amount: td.Price.Amount,
Currency: td.Price.Currency,
},
@ -416,7 +417,7 @@ func (h *APIHandlers) ListAllUpcomingTrainingDates(ctx context.Context, req List
Location: td.Location,
Address: td.Address,
Capacity: td.Capacity,
Price: TrainingDatePrice{
Price: Price{
Amount: td.Price.Amount,
Currency: td.Price.Currency,
},
@ -449,7 +450,7 @@ func (h *APIHandlers) ListTrainingUpcomingDates(ctx context.Context, req ListTra
Location: td.Location,
Address: td.Address,
Capacity: td.Capacity,
Price: TrainingDatePrice{
Price: Price{
Amount: td.Price.Amount,
Currency: td.Price.Currency,
},