package service import ( "encoding/json" "time" ) type PaymentStatus string const ( PaymentStatusPending PaymentStatus = "Pending" PaymentStatusSuccess PaymentStatus = "Success" PaymentStatusFailed PaymentStatus = "Failed" PaymentStatusCancelled PaymentStatus = "Cancelled" //... ) type Currency string const ( CurrencyIRR Currency = "IRR" CurrencyUSD Currency = "USD" ) type TransactionType string const ( TransactionTypeRequest TransactionType = "request" TransactionTypeVerify TransactionType = "verify" ) type TransactionStatus string const ( TransactionStatusPending = "Pending" TransactionStatusSuccess = "Success" TransactionStatusFailed = "Failed" ) type PayableType string const ( PayableTypeDonate PayableType = "Donate" PayableTypeOrder PayableType = "Order" PayableTypeWalet PayableType = "WaletCharge" ) type PaymentMethod struct { ID uint Name string IsActive bool CreatedAt time.Time UpdatedAt time.Time } type Gateway struct { ID uint Name string Code string IsActive bool Config json.RawMessage CreatedAt time.Time UpdatedAt time.Time } type Payment struct { ID uint UserID uint MethodID uint GatewayID uint PayableType PayableType PayableID uint TotalAmount int64 PaidAmount int64 Currency Currency Status PaymentStatus Description string CreatedAt time.Time UpdatedAt time.Time PaidAt *time.Time } type PaymentTransaction struct { ID uint PaymentID uint Type TransactionType RequestData json.RawMessage ResponseData json.RawMessage RefID string Status TransactionStatus GatewayToken string ErrorMessage string CreatedAt time.Time UpdatedAt time.Time }