74 lines
2.5 KiB
Go
74 lines
2.5 KiB
Go
package models
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"github.com/google/uuid"
|
||
|
|
)
|
||
|
|
|
||
|
|
// WalletExchangePreview is GET /customer/wallet/exchange/preview
|
||
|
|
// (docs/prd-point-coin.md F4): the rate, and what exchanging Coins would give.
|
||
|
|
type WalletExchangePreview struct {
|
||
|
|
// The rate: CoinAmount EnakCoin exchange into PointAmount EnakPoint.
|
||
|
|
CoinAmount int64 `json:"coin_amount"`
|
||
|
|
PointAmount int64 `json:"point_amount"`
|
||
|
|
CoinBalance int64 `json:"coin_balance"`
|
||
|
|
Coins int64 `json:"coins"`
|
||
|
|
Points int64 `json:"points"`
|
||
|
|
// Whether Coins can be exchanged now, and why not when it cannot.
|
||
|
|
Valid bool `json:"valid"`
|
||
|
|
Reason string `json:"reason,omitempty"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// WalletMovedLot is part of what an exchange or a transfer delivered, with the
|
||
|
|
// expiry it carried over from the lot it came from (K9).
|
||
|
|
type WalletMovedLot struct {
|
||
|
|
Amount int64 `json:"amount"`
|
||
|
|
// Nil when it never expires.
|
||
|
|
ExpiresAt *time.Time `json:"expires_at"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// WalletExchangeResult is POST /customer/wallet/exchange.
|
||
|
|
type WalletExchangeResult struct {
|
||
|
|
GroupID uuid.UUID `json:"group_id"`
|
||
|
|
Coins int64 `json:"coins"`
|
||
|
|
Points int64 `json:"points"`
|
||
|
|
CoinAmount int64 `json:"coin_amount"`
|
||
|
|
PointAmount int64 `json:"point_amount"`
|
||
|
|
// The EnakPoint received, split by expiry.
|
||
|
|
Lots []WalletMovedLot `json:"lots"`
|
||
|
|
CoinBalance int64 `json:"coin_balance"`
|
||
|
|
PointBalance int64 `json:"point_balance"`
|
||
|
|
// True when this was a retry of an exchange already made; nothing moved again.
|
||
|
|
Replayed bool `json:"replayed"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// WalletTransferRecipient is GET /customer/wallet/transfer/recipient: who a phone
|
||
|
|
// number belongs to, masked, so the sender can check before confirming (F5).
|
||
|
|
type WalletTransferRecipient struct {
|
||
|
|
Name string `json:"name"`
|
||
|
|
PhoneNumber string `json:"phone_number"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// WalletTransfer is what a customer asks to send (F5).
|
||
|
|
type WalletTransfer struct {
|
||
|
|
// POINT or COIN.
|
||
|
|
Currency string
|
||
|
|
Amount int64
|
||
|
|
RecipientPhone string
|
||
|
|
}
|
||
|
|
|
||
|
|
// WalletTransferResult is POST /customer/wallet/transfer.
|
||
|
|
type WalletTransferResult struct {
|
||
|
|
GroupID uuid.UUID `json:"group_id"`
|
||
|
|
Currency string `json:"currency"`
|
||
|
|
Amount int64 `json:"amount"`
|
||
|
|
Recipient WalletTransferRecipient `json:"recipient"`
|
||
|
|
// What the recipient received, split by the expiry it carried over.
|
||
|
|
Lots []WalletMovedLot `json:"lots"`
|
||
|
|
// The sender's balance in the currency sent.
|
||
|
|
Balance int64 `json:"balance"`
|
||
|
|
// True when this was a retry of a transfer already made; nothing moved again.
|
||
|
|
Replayed bool `json:"replayed"`
|
||
|
|
}
|