aditya.siregar 93ddfdaecc update order
2025-05-06 00:40:43 +07:00

115 lines
3.9 KiB
Go

package response
import (
"enaklo-pos-be/internal/entity"
"time"
)
type OrderInquiryResponse struct {
ID string `json:"id"`
Status string `json:"status"`
Amount float64 `json:"amount"`
Tax float64 `json:"tax"`
Total float64 `json:"total"`
CustomerID int64 `json:"customer_id"`
PaymentType string `json:"payment_type"`
CustomerName string `json:"customer_name"`
CustomerPhoneNumber string `json:"customer_phone_number"`
CustomerEmail string `json:"customer_email"`
ExpiresAt time.Time `json:"expires_at"`
CreatedAt time.Time `json:"created_at"`
Items []OrderItemResponse `json:"items"`
Token string `json:"token"`
}
type OrderItemResponse struct {
ProductID int64 `json:"product_id"`
ProductName string `json:"product_name"`
Price float64 `json:"price"`
Quantity int `json:"quantity"`
Subtotal float64 `json:"subtotal"`
}
func mapToOrderItemResponses(items []entity.OrderItem) []OrderItemResponse {
result := make([]OrderItemResponse, 0, len(items))
for _, item := range items {
productName := ""
if item.Product != nil {
productName = item.Product.Name
}
result = append(result, OrderItemResponse{
ProductID: item.ItemID,
ProductName: productName,
Price: item.Price,
Quantity: item.Quantity,
Subtotal: item.Price * float64(item.Quantity),
})
}
return result
}
func MapToInquiryResponse(result *entity.OrderInquiryResponse) OrderInquiryResponse {
resp := OrderInquiryResponse{
ID: result.OrderInquiry.ID,
Status: result.OrderInquiry.Status,
Amount: result.OrderInquiry.Amount,
Tax: result.OrderInquiry.Tax,
Total: result.OrderInquiry.Total,
CustomerID: result.OrderInquiry.CustomerID,
PaymentType: result.OrderInquiry.PaymentType,
ExpiresAt: result.OrderInquiry.ExpiresAt,
CreatedAt: result.OrderInquiry.CreatedAt,
Items: mapToOrderItemResponses(result.OrderInquiry.OrderItems),
Token: result.Token,
CustomerName: result.OrderInquiry.CustomerName,
CustomerEmail: result.OrderInquiry.CustomerEmail,
CustomerPhoneNumber: result.OrderInquiry.CustomerPhoneNumber,
}
return resp
}
type OrderResponse struct {
ID int64 `json:"id"`
Status string `json:"status"`
Amount float64 `json:"amount"`
Tax float64 `json:"tax"`
Total float64 `json:"total"`
CustomerName string `json:"customer_name,omitempty"`
PaymentType string `json:"payment_type"`
Source string `json:"source"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt *time.Time `json:"updated_at,omitempty"`
Items []OrderItemResponse `json:"items"`
}
func MapToOrderResponse(result *entity.OrderResponse) OrderResponse {
resp := OrderResponse{
ID: result.Order.ID,
Status: result.Order.Status,
Amount: result.Order.Amount,
Tax: result.Order.Tax,
Total: result.Order.Total,
PaymentType: result.Order.PaymentType,
CreatedAt: result.Order.CreatedAt,
Items: MapToOrderItemResponses(result.Order.OrderItems),
}
return resp
}
func MapToOrderItemResponses(items []entity.OrderItem) []OrderItemResponse {
result := make([]OrderItemResponse, 0, len(items))
for _, item := range items {
result = append(result, OrderItemResponse{
ProductID: item.ItemID,
ProductName: item.ItemName,
Price: item.Price,
Quantity: item.Quantity,
Subtotal: item.Price * float64(item.Quantity),
})
}
return result
}