92 lines
2.8 KiB
Go
92 lines
2.8 KiB
Go
package transformer
|
|
|
|
import (
|
|
"apskel-pos-be/internal/constants"
|
|
"apskel-pos-be/internal/contract"
|
|
"apskel-pos-be/internal/models"
|
|
)
|
|
|
|
// Contract to Model conversions
|
|
func CreateOrganizationRequestToModel(req *contract.CreateOrganizationRequest) *models.CreateOrganizationRequest {
|
|
return &models.CreateOrganizationRequest{
|
|
OrganizationName: req.OrganizationName,
|
|
OrganizationEmail: req.OrganizationEmail,
|
|
OrganizationPhoneNumber: req.OrganizationPhoneNumber,
|
|
PlanType: constants.PlanType(req.PlanType),
|
|
AdminName: req.AdminName,
|
|
AdminEmail: req.AdminEmail,
|
|
AdminPassword: req.AdminPassword,
|
|
OutletName: req.OutletName,
|
|
OutletAddress: req.OutletAddress,
|
|
OutletTimezone: req.OutletTimezone,
|
|
OutletCurrency: req.OutletCurrency,
|
|
}
|
|
}
|
|
|
|
func UpdateOrganizationRequestToModel(req *contract.UpdateOrganizationRequest) *models.UpdateOrganizationRequest {
|
|
modelReq := &models.UpdateOrganizationRequest{
|
|
Name: req.Name,
|
|
Email: req.Email,
|
|
PhoneNumber: req.PhoneNumber,
|
|
}
|
|
|
|
if req.PlanType != nil {
|
|
planType := constants.PlanType(*req.PlanType)
|
|
modelReq.PlanType = &planType
|
|
}
|
|
|
|
return modelReq
|
|
}
|
|
|
|
// Model to Contract conversions
|
|
func OrganizationModelResponseToResponse(org *models.OrganizationResponse) *contract.OrganizationResponse {
|
|
return &contract.OrganizationResponse{
|
|
ID: org.ID,
|
|
Name: org.Name,
|
|
Email: org.Email,
|
|
PhoneNumber: org.PhoneNumber,
|
|
PlanType: string(org.PlanType),
|
|
CreatedAt: org.CreatedAt,
|
|
UpdatedAt: org.UpdatedAt,
|
|
}
|
|
}
|
|
|
|
func CreateOrganizationResponseToContract(resp *models.CreateOrganizationResponse) *contract.CreateOrganizationResponse {
|
|
return &contract.CreateOrganizationResponse{
|
|
Organization: *OrganizationModelResponseToResponse(resp.Organization),
|
|
AdminUser: *UserModelResponseToResponse(resp.AdminUser),
|
|
DefaultOutlet: *OutletModelResponseToContract(resp.DefaultOutlet),
|
|
}
|
|
}
|
|
|
|
func OutletModelResponseToContract(outlet *models.OutletResponse) *contract.OutletResponse {
|
|
address := ""
|
|
if outlet.Address != nil {
|
|
address = *outlet.Address
|
|
}
|
|
|
|
return &contract.OutletResponse{
|
|
ID: outlet.ID,
|
|
OrganizationID: outlet.OrganizationID,
|
|
Name: outlet.Name,
|
|
Address: address,
|
|
Currency: outlet.Currency,
|
|
TaxRate: outlet.TaxRate,
|
|
IsActive: outlet.IsActive,
|
|
CreatedAt: outlet.CreatedAt,
|
|
UpdatedAt: outlet.UpdatedAt,
|
|
}
|
|
}
|
|
|
|
// Slice conversions
|
|
func OrganizationsToResponses(organizations []models.OrganizationResponse) []contract.OrganizationResponse {
|
|
responses := make([]contract.OrganizationResponse, len(organizations))
|
|
for i, org := range organizations {
|
|
response := OrganizationModelResponseToResponse(&org)
|
|
if response != nil {
|
|
responses[i] = *response
|
|
}
|
|
}
|
|
return responses
|
|
}
|