package models import ( "fmt" "strings" ) type PayoutType int64 const ( TypeSBP PayoutType = iota TypeYooMoney TypeCard TypeCardWidget ) func (r PayoutType) String() string { switch r { case TypeSBP: return "spb" case TypeYooMoney: return "yoo_money" case TypeCard: return "bank_card" case TypeCardWidget: return "widget" } return "unknown" } func (r PayoutType) MarshalText() (text []byte, err error) { return []byte(r.String()), nil } func (r *PayoutType) UnmarshalText(text []byte) (err error) { s := strings.ToLower(string(text)) switch s { case "spb": *r = TypeSBP case "yoo_money": *r = TypeYooMoney case "bank_card": *r = TypeCard case "widget": *r = TypeCardWidget default: err = fmt.Errorf("invalid payout type: %s", s) } return err } type PayoutStatus int64 const ( StatusCreated PayoutStatus = iota StatusCanceled StatusPending StatusSucceeded StatusFailed ) func (r PayoutStatus) String() string { switch r { case StatusCreated: return "created" case StatusCanceled: return "canceled" case StatusPending: return "pending" case StatusSucceeded: return "succeeded" case StatusFailed: return "failed" } return "unknown" } func (r PayoutStatus) MarshalText() (text []byte, err error) { return []byte(r.String()), nil } func (r *PayoutStatus) UnmarshalText(text []byte) (err error) { s := strings.ToLower(string(text)) switch s { case "canceled": *r = StatusCanceled case "created": *r = StatusCreated case "pending": *r = StatusPending case "succeeded": *r = StatusSucceeded case "failed": *r = StatusFailed default: err = fmt.Errorf("invalid payout type: %s", s) } return err } type SBPBank struct { BankID string `json:"bank_id"` Name string `json:"name"` Bic string `json:"bic"` } type PayoutReq struct { PayoutType PayoutType `json:"payout_type"` PayoutToken string `json:"payout_token"` AccountNumber string `json:"account_number"` BankID string `json:"bank_id"` CardNumber string `json:"card_number"` Amount float32 `json:"amount"` } type PayoutResp struct { ID string `json:"payout_id,omitempty"` Status PayoutStatus `json:"payout_status,omitempty"` }