2024-07-27 16:47:33 +07:00

176 lines
4.5 KiB
Go

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,
}
}