/
serializers.go
100 lines (87 loc) · 2.91 KB
/
serializers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package office
import (
"github.com/eibrahimarisoy/car_rental/internal/location"
"github.com/eibrahimarisoy/car_rental/internal/models"
"github.com/eibrahimarisoy/car_rental/internal/vendors"
pgHelper "github.com/eibrahimarisoy/car_rental/pkg/pagination"
"github.com/google/uuid"
)
type OfficeRequest struct {
OpeningHours models.JsonTime `json:"opening_hours"`
ClosingHours models.JsonTime `json:"closing_hours"`
VendorID uuid.UUID `json:"vendor_id"`
LocationID uuid.UUID `json:"location_id"`
WorkingDays []uint `json:"working_days"`
}
// Validate validates the OfficeRequest
func (r *OfficeRequest) Validate() error {
_, err := uuid.Parse(r.VendorID.String())
if err != nil {
return err
}
return nil
}
// ToOffice converts the OfficeRequest to Office
func (r *OfficeRequest) ToOffice() *models.Office {
workingDays := []models.WorkingDay{}
for _, day := range r.WorkingDays {
workingDays = append(workingDays, models.WorkingDay{
Value: day,
})
}
return &models.Office{
OpeningHours: r.OpeningHours,
ClosingHours: r.ClosingHours,
VendorID: r.VendorID,
LocationID: r.LocationID,
WorkingDays: workingDays,
}
}
// OfficeListResponse is the response for the list of offices
type OfficeListResponse struct {
pgHelper.Pagination
Data []OfficeResponse `json:"data"`
}
type OfficeResponse struct {
ID uuid.UUID `json:"id"`
OpeningHours models.JsonTime `json:"opening_hours"`
ClosingHours models.JsonTime `json:"closing_hours"`
Vendor vendors.VendorResponse `json:"vendor"`
Location location.LocationResponse `json:"location"`
WorkingDays []string `json:"working_days"`
}
type OfficeSimpleResponse struct {
ID uuid.UUID `json:"id"`
OpeningHours models.JsonTime `json:"opening_hours"`
ClosingHours models.JsonTime `json:"closing_hours"`
Location uuid.UUID `json:"location"`
}
// OfficeToResponse converts the Office to OfficeResponse
func OfficeToResponse(office *models.Office) *OfficeResponse {
res := OfficeResponse{
ID: office.ID,
OpeningHours: office.OpeningHours,
ClosingHours: office.ClosingHours,
Vendor: *vendors.VendorToResponse(&office.Vendor),
Location: *location.LocationToResponse(&office.Location),
}
return &res
}
func OfficeToSimpleResponse(office *models.Office) *OfficeSimpleResponse {
res := OfficeSimpleResponse{
ID: office.ID,
OpeningHours: office.OpeningHours,
ClosingHours: office.ClosingHours,
Location: office.LocationID,
}
return &res
}
// OfficesToOfficeListResponse converts a list of offices to a response
func OfficesToOfficeListResponse(offices *[]models.Office, pg *pgHelper.Pagination) *OfficeListResponse {
response := &OfficeListResponse{}
response.Pagination = *pg
for _, office := range *offices {
response.Data = append(response.Data, *OfficeToResponse(&office))
}
return response
}