package domain import "time" type PaymentStatus string const ( PaymentStatusPending PaymentStatus = "PENDING" PaymentStatusProcessing PaymentStatus = "PROCESSING" PaymentStatusSuccess PaymentStatus = "SUCCESS" PaymentStatusFailed PaymentStatus = "FAILED" PaymentStatusCancelled PaymentStatus = "CANCELLED" PaymentStatusExpired PaymentStatus = "EXPIRED" ) type Payment struct { ID int64 UserID int64 PlanID *int64 SubscriptionID *int64 SessionID *string TransactionID *string Nonce string Amount float64 Currency string PaymentMethod *string Status string PaymentURL *string PaidAt *time.Time ExpiresAt *time.Time CreatedAt time.Time UpdatedAt *time.Time PlanName *string } type CreatePaymentInput struct { UserID int64 PlanID *int64 Amount float64 Currency string PaymentMethod *string Nonce string ExpiresAt *time.Time } type InitiateSubscriptionPaymentRequest struct { PlanID int64 `json:"plan_id" validate:"required"` Phone string `json:"phone" validate:"required"` Email string `json:"email" validate:"required,email"` } type InitiateSubscriptionPaymentResponse struct { PaymentID int64 `json:"payment_id"` SessionID string `json:"session_id"` PaymentURL string `json:"payment_url"` Amount float64 `json:"amount"` Currency string `json:"currency"` ExpiresAt string `json:"expires_at"` } type VerifyPaymentRequest struct { SessionID string `json:"session_id"` } type PaymentWebhookData struct { SessionID string TransactionID string Nonce string TransactionStatus string PaymentMethod string TotalAmount float64 }