package request import ( "furtuna-be/internal/common/mycontext" "furtuna-be/internal/constants/transaction" "furtuna-be/internal/entity" "time" ) type Order struct { PartnerID int64 `json:"partner_id" validate:"required"` PaymentMethod transaction.PaymentMethod `json:"payment_method" validate:"required"` OrderItems []OrderItem `json:"order_items" validate:"required"` } type CustomerOrder struct { PartnerID int64 `json:"partner_id" validate:"required"` PaymentMethod transaction.PaymentMethod `json:"payment_method" validate:"required,oneof=ONLINE"` OrderItems []OrderItem `json:"order_items" validate:"required,min=1"` VisitDate string `json:"visit_date" validate:"required"` } func (o *CustomerOrder) ToEntity(createdBy int64) *entity.OrderRequest { orderItems := make([]entity.OrderItemRequest, len(o.OrderItems)) for i, item := range o.OrderItems { orderItems[i] = entity.OrderItemRequest{ ProductID: item.ProductID, Quantity: item.Quantity, } } return &entity.OrderRequest{ PartnerID: o.PartnerID, PaymentMethod: string(o.PaymentMethod), OrderItems: orderItems, CreatedBy: createdBy, Source: "ONLINE", VisitDate: o.VisitDate, } } type OrderParam struct { PaymentType string `form:"payment_type" json:"payment_type" example:"CASH"` StartDate string `form:"start_date" json:"start_date"` EndDate string `form:"end_date" json:"end_date"` Status string `form:"status" json:"status"` Limit int `form:"limit" json:"limit" example:"10"` Offset int `form:"offset" json:"offset" example:"0"` Period string `form:"period" json:"period" example:"1d,7d,1m"` Source string `form:"source" json:"source" example:"tes"` } type Checkin struct { QRCode string `json:"qr_code" validate:"required"` } type CheckinExecute struct { Token string `json:"token" validate:"required"` } func (o *OrderParam) ToOrderEntity(ctx mycontext.Context) entity.OrderSearch { if o.Limit == 0 { o.Limit = 10 } return entity.OrderSearch{ PartnerID: ctx.GetPartnerID(), SiteID: ctx.GetSiteID(), IsAdmin: ctx.IsAdmin(), PaymentType: o.PaymentType, Limit: o.Limit, Offset: o.Offset, StartDate: o.StartDate, EndDate: o.EndDate, Status: o.Status, Period: o.Period, Source: o.Source, } } type OrderItem struct { ProductID int64 `json:"product_id" validate:"required"` Quantity int64 `json:"quantity" validate:"required"` } func (o *Order) ToEntity(createdBy int64) *entity.OrderRequest { orderItems := make([]entity.OrderItemRequest, len(o.OrderItems)) for i, item := range o.OrderItems { orderItems[i] = entity.OrderItemRequest{ ProductID: item.ProductID, Quantity: item.Quantity, } } return &entity.OrderRequest{ PartnerID: o.PartnerID, PaymentMethod: string(o.PaymentMethod), OrderItems: orderItems, CreatedBy: createdBy, Source: "POS", VisitDate: time.Now().Format("2006-01-02"), } } type Execute struct { PartnerID int64 `json:"partner_id" validate:"required"` Token string `json:"token"` } func (e Execute) ToOrderExecuteRequest(createdBy int64) *entity.OrderExecuteRequest { return &entity.OrderExecuteRequest{ CreatedBy: createdBy, PartnerID: e.PartnerID, Token: e.Token, } } type OrderParamCustomer struct { ID int64 `form:"id" json:"id" example:"10"` ReferenceID string `form:"reference_id" json:"reference_id" example:"10"` Limit int `form:"limit" json:"limit" example:"10"` Offset int `form:"offset" json:"offset" example:"0"` } func (o *OrderParamCustomer) ToOrderEntity(ctx mycontext.Context) entity.OrderSearch { if o.Limit == 0 { o.Limit = 10 } return entity.OrderSearch{ PartnerID: ctx.GetPartnerID(), SiteID: ctx.GetSiteID(), IsAdmin: ctx.IsAdmin(), Limit: o.Limit, Offset: o.Offset, CreatedBy: ctx.RequestedBy(), IsCustomer: true, } } type OrderPrintDetail struct { ID int64 `form:"id" json:"id" example:"10"` }