package order import ( "time" "hfb_sys/backend/internal/auditlog" "gorm.io/datatypes" ) type OrderDTO struct { ID uint64 `json:"id"` OrderNo string `json:"order_no"` ListingID uint64 `json:"listing_id"` AccountID uint64 `json:"account_id"` OwnerID uint64 `json:"owner_id"` RenterID uint64 `json:"renter_id"` OwnerPhone string `json:"owner_phone,omitempty"` RenterPhone string `json:"renter_phone,omitempty"` Title string `json:"title"` ServerRegion string `json:"server_region"` LoginPlatform string `json:"login_platform"` RentedAt *time.Time `json:"rented_at"` EstimatedDurationHours int `json:"estimated_duration_hours"` PriceRole string `json:"price_role,omitempty"` DisplayAmount float64 `json:"display_amount"` RentAmount *float64 `json:"rent_amount,omitempty"` OwnerRentAmount *float64 `json:"owner_rent_amount,omitempty"` DepositAmount float64 `json:"deposit_amount"` PlatformFee *float64 `json:"platform_fee,omitempty"` AccountSnapshot datatypes.JSON `json:"account_snapshot"` Status string `json:"status"` HandoffStatus string `json:"handoff_status"` SettlementStatus string `json:"settlement_status"` Checkout *CheckoutDTO `json:"checkout,omitempty"` PaymentDeadlineAt *time.Time `json:"payment_deadline_at,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type CreateRequest struct { ListingID uint64 `json:"listing_id" binding:"required"` } type SubmitHandoffRequest struct { Content string `json:"content" binding:"required"` } type SubmitReturnRequest struct { Content string `json:"content" binding:"required"` } type SubmitCheckoutRequest struct { Content string `json:"content" binding:"required"` ConsumableAmount float64 `json:"consumable_amount"` CoinConsumedM float64 `json:"coin_consumed_m"` OtherAmount float64 `json:"other_amount"` EvidenceURLS []string `json:"evidence_urls"` } type CounterCheckoutRequest struct { ConsumableAmount float64 `json:"consumable_amount"` CoinConsumedM float64 `json:"coin_consumed_m"` OtherAmount float64 `json:"other_amount"` DepositDeductAmount float64 `json:"deposit_deduct_amount"` Reason string `json:"reason" binding:"required"` EvidenceURLS []string `json:"evidence_urls"` } type AdminActionRequest struct { Reason string `json:"reason" binding:"required"` } type AuditMeta = auditlog.Meta type PaginatedResult struct { Items []OrderDTO `json:"items"` Total int64 `json:"total"` Page int `json:"page"` PageSize int `json:"page_size"` } type RefundStatusDTO struct { OrderID uint64 `json:"order_id"` OrderNo string `json:"order_no"` RefundStatus string `json:"refund_status"` RefundAmountCent int64 `json:"refund_amount_cent"` RefundedAt *time.Time `json:"refunded_at,omitempty"` TotalAmount float64 `json:"total_amount"` } type HandoffRecordDTO struct { ID uint64 `json:"id"` OrderID uint64 `json:"order_id"` FromUserID uint64 `json:"from_user_id"` ToUserID uint64 `json:"to_user_id"` Type string `json:"type"` Content string `json:"content"` ConfirmedByRenterAt *time.Time `json:"confirmed_by_renter_at"` ConfirmedByOwnerAt *time.Time `json:"confirmed_by_owner_at"` CreatedAt time.Time `json:"created_at"` } type CheckoutDTO struct { ID uint64 `json:"id"` OrderID uint64 `json:"order_id"` InitiatedBy uint64 `json:"initiated_by"` Status string `json:"status"` PriceRole string `json:"price_role,omitempty"` DisplayAmount float64 `json:"display_amount"` RentAmount *float64 `json:"rent_amount,omitempty"` OwnerRentAmount *float64 `json:"owner_rent_amount,omitempty"` PlatformFee *float64 `json:"platform_fee,omitempty"` DepositAmount float64 `json:"deposit_amount"` ConsumableAmount float64 `json:"consumable_amount"` CoinConsumedM float64 `json:"coin_consumed_m"` OtherAmount float64 `json:"other_amount"` DepositDeductAmount float64 `json:"deposit_deduct_amount"` RenterRefundAmount *float64 `json:"renter_refund_amount,omitempty"` OwnerIncomeAmount *float64 `json:"owner_income_amount,omitempty"` Content string `json:"content"` EvidenceURLS []string `json:"evidence_urls"` OwnerAdjustmentReason string `json:"owner_adjustment_reason"` OwnerAdjustedAt *time.Time `json:"owner_adjusted_at"` RenterConfirmedAt *time.Time `json:"renter_confirmed_at"` RenterRejectedAt *time.Time `json:"renter_rejected_at"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` }