130 lines
4.4 KiB
Go
130 lines
4.4 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"`
|
|
Notes string `json:"notes"`
|
|
}
|
|
|
|
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"`
|
|
TableNumber string `json:"table_number"`
|
|
OrderType string `json:"order_type"`
|
|
}
|
|
|
|
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: formatPayment(result.Order.PaymentType, result.Order.PaymentProvider),
|
|
CreatedAt: result.Order.CreatedAt,
|
|
Items: MapToOrderItemResponses(result.Order.OrderItems),
|
|
CustomerName: result.Order.CustomerName,
|
|
TableNumber: result.Order.TableNumber,
|
|
OrderType: result.Order.OrderType,
|
|
}
|
|
|
|
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),
|
|
Notes: item.Notes,
|
|
})
|
|
}
|
|
return result
|
|
}
|
|
|
|
func formatPayment(payment, provider string) string {
|
|
if payment == "CASH" {
|
|
return payment
|
|
}
|
|
|
|
return payment + " " + provider
|
|
}
|