apskel-pos-backend/internal/transformer/organization_transformer.go
aditya.siregar 4f5950543e init
2025-07-18 20:10:29 +07:00

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
}