package entity import ( "time" ) type Order struct { ID int64 `gorm:"primaryKey;autoIncrement;column:id"` RefID string `gorm:"type:varchar;column:ref_id"` PartnerID int64 `gorm:"type:int;column:partner_id"` Status string `gorm:"type:varchar;column:status"` Amount float64 `gorm:"type:numeric;not null;column:amount"` CreatedAt time.Time `gorm:"autoCreateTime;column:created_at"` UpdatedAt time.Time `gorm:"autoUpdateTime;column:updated_at"` CreatedBy int64 `gorm:"type:int;column:created_by"` PaymentType string `gorm:"type:varchar;column:payment_type"` UpdatedBy int64 `gorm:"type:int;column:updated_by"` OrderItems []OrderItem `gorm:"foreignKey:OrderID;constraint:OnDelete:CASCADE;"` } type OrderDB struct { Order } func (b *Order) ToOrderDB() *OrderDB { return &OrderDB{ Order: *b, } } func (e *OrderDB) ToSumAmount() *Order { return &Order{ Amount: e.Amount, } } type OrderResponse struct { Order *Order Token string } type ExecuteOrderResponse struct { Order *Order PaymentToken string RedirectURL string } func (Order) TableName() string { return "orders" } type OrderItem struct { ID int64 `gorm:"primaryKey;autoIncrement;column:order_item_id"` OrderID int64 `gorm:"type:int;column:order_id"` ItemID int64 `gorm:"type:int;column:item_id"` ItemType string `gorm:"type:varchar;column:item_type"` Price float64 `gorm:"type:numeric;not null;column:price"` Quantity int64 `gorm:"type:int;column:qty"` CreatedAt time.Time `gorm:"autoCreateTime;column:created_at"` UpdatedAt time.Time `gorm:"autoUpdateTime;column:updated_at"` CreatedBy int64 `gorm:"type:int;column:created_by"` UpdatedBy int64 `gorm:"type:int;column:updated_by"` Product *Product `gorm:"foreignKey:ItemID;references:ID"` } func (OrderItem) TableName() string { return "order_items" } type OrderRequest struct { CreatedBy int64 PartnerID int64 `json:"partner_id" validate:"required"` PaymentMethod string `json:"payment_method" validate:"required"` OrderItems []OrderItemRequest `json:"order_items" validate:"required,dive"` } type OrderItemRequest struct { ProductID int64 `json:"product_id" validate:"required"` Quantity int64 `json:"quantity" validate:"required"` } type OrderExecuteRequest struct { CreatedBy int64 PartnerID int64 Token string } func (o *Order) SetExecutePaymentStatus() { if o.PaymentType == "CASH" { o.Status = "PAID" return } o.Status = "PENDING" } type CallbackRequest struct { TransactionStatus string `json:"transaction_status"` TransactionID string `json:"transaction_id"` } type HistoryOrder struct { ID int64 `gorm:"primaryKey;autoIncrement;column:id"` Employee string `gorm:"type:varchar;column:employee"` Site string `gorm:"type:varchar;column:site"` Timestamp time.Time `gorm:"autoCreateTime;column:timestamp"` BookingTime time.Time `gorm:"autoCreateTime;column:booking_time"` Tickets []string `gorm:"-"` RawTickets string `gorm:"type:text;column:tickets"` PaymentType string `gorm:"type:varchar;column:payment_type"` Status string `gorm:"type:varchar;column:status"` Amount float64 `gorm:"type:numeric;column:amount"` } type HistoryOrderDB struct { HistoryOrder } type OrderSearch struct { PartnerID *int64 IsAdmin bool PaymentType string Limit int Offset int } type HistoryOrderList []*HistoryOrderDB func (b *HistoryOrder) ToHistoryOrderDB() *HistoryOrderDB { return &HistoryOrderDB{ HistoryOrder: *b, } } func (e *HistoryOrderDB) ToHistoryOrder() *HistoryOrder { return &HistoryOrder{ ID: e.ID, Employee: e.Employee, Site: e.Site, Timestamp: e.Timestamp, BookingTime: e.BookingTime, Tickets: e.Tickets, RawTickets: e.RawTickets, PaymentType: e.PaymentType, Status: e.Status, Amount: e.Amount, } } func (b *HistoryOrderList) ToHistoryOrderList() []*HistoryOrder { var HistoryOrders []*HistoryOrder for _, historyOrder := range *b { HistoryOrders = append(HistoryOrders, historyOrder.ToHistoryOrder()) } return HistoryOrders } type TicketSold struct { Count int64 `gorm:"type:int;column:count"` } type TicketSoldDB struct { TicketSold } func (b *TicketSold) ToTicketSoldDB() *TicketSoldDB { return &TicketSoldDB{ TicketSold: *b, } } func (e *TicketSoldDB) ToTicketSold() *TicketSold { return &TicketSold{ Count: e.Count, } }