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 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"` } 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" }