125 lines
3.7 KiB
Go
125 lines
3.7 KiB
Go
|
package usecase
|
||
|
|
||
|
import (
|
||
|
"code.30cm.net/digimon/app-cloudep-wallet-service/pkg/domain/repository"
|
||
|
"code.30cm.net/digimon/app-cloudep-wallet-service/pkg/domain/usecase"
|
||
|
"code.30cm.net/digimon/app-cloudep-wallet-service/pkg/domain/wallet"
|
||
|
"code.30cm.net/digimon/library-go/errs"
|
||
|
"context"
|
||
|
"sync"
|
||
|
)
|
||
|
|
||
|
type WalletUseCaseParam struct {
|
||
|
WalletRepo repository.WalletRepository
|
||
|
TransactionRepo repository.TransactionRepository
|
||
|
WalletTransactionRepo repository.WalletTransactionRepo
|
||
|
}
|
||
|
|
||
|
type WalletUseCase struct {
|
||
|
WalletUseCaseParam
|
||
|
|
||
|
// 內存讀寫所記錄有哪些玩家已經確認有存在錢包過了,減少確認錢包是否存在頻率
|
||
|
sync.RWMutex
|
||
|
existUIDAsset map[string]struct{}
|
||
|
}
|
||
|
|
||
|
func (use *WalletUseCase) Process(ctx context.Context, req usecase.WalletTransferRequest) error {
|
||
|
//TODO implement me
|
||
|
panic("implement me")
|
||
|
}
|
||
|
|
||
|
// Withdraw 提幣
|
||
|
// 1. 新增一筆提幣交易
|
||
|
// 2. 錢包減少可用餘額
|
||
|
// 3. 錢包變化新增一筆減少可用餘額資料
|
||
|
func (use *WalletUseCase) Withdraw(ctx context.Context, tx usecase.WalletTransferRequest) error {
|
||
|
if !tx.Amount.IsPositive() {
|
||
|
return errs.InvalidRange("failed to get correct amount")
|
||
|
}
|
||
|
tx.TxType = wallet.Withdraw
|
||
|
|
||
|
return use.ProcessTransaction(ctx, tx, userWalletFlow{
|
||
|
UID: tx.FromUID,
|
||
|
Asset: tx.Asset,
|
||
|
Actions: []walletActionOption{use.withLockAvailable(), use.withSubAvailable()}, //use.lockAvailable(), use.subAvailable()
|
||
|
})
|
||
|
|
||
|
}
|
||
|
|
||
|
func (use *WalletUseCase) Deposit(ctx context.Context, tx usecase.WalletTransferRequest) error {
|
||
|
//TODO implement me
|
||
|
panic("implement me")
|
||
|
}
|
||
|
|
||
|
func (use *WalletUseCase) DepositUnconfirmed(ctx context.Context, tx usecase.WalletTransferRequest) error {
|
||
|
//TODO implement me
|
||
|
panic("implement me")
|
||
|
}
|
||
|
|
||
|
func (use *WalletUseCase) Freeze(ctx context.Context, tx usecase.WalletTransferRequest) error {
|
||
|
//TODO implement me
|
||
|
panic("implement me")
|
||
|
}
|
||
|
|
||
|
func (use *WalletUseCase) AppendFreeze(ctx context.Context, tx usecase.WalletTransferRequest) error {
|
||
|
//TODO implement me
|
||
|
panic("implement me")
|
||
|
}
|
||
|
|
||
|
func (use *WalletUseCase) UnFreeze(ctx context.Context, tx usecase.WalletTransferRequest) error {
|
||
|
//TODO implement me
|
||
|
panic("implement me")
|
||
|
}
|
||
|
|
||
|
func (use *WalletUseCase) RollbackFreeze(ctx context.Context, tx usecase.WalletTransferRequest) error {
|
||
|
//TODO implement me
|
||
|
panic("implement me")
|
||
|
}
|
||
|
|
||
|
func (use *WalletUseCase) RollbackFreezeAddAvailable(ctx context.Context, tx usecase.WalletTransferRequest) error {
|
||
|
//TODO implement me
|
||
|
panic("implement me")
|
||
|
}
|
||
|
|
||
|
func (use *WalletUseCase) CancelFreeze(ctx context.Context, tx usecase.WalletTransferRequest) error {
|
||
|
//TODO implement me
|
||
|
panic("implement me")
|
||
|
}
|
||
|
|
||
|
func (use *WalletUseCase) Unconfirmed(ctx context.Context, tx usecase.WalletTransferRequest) error {
|
||
|
//TODO implement me
|
||
|
panic("implement me")
|
||
|
}
|
||
|
|
||
|
func (use *WalletUseCase) Balance(ctx context.Context, req usecase.BalanceReq) ([]usecase.Balance, error) {
|
||
|
//TODO implement me
|
||
|
panic("implement me")
|
||
|
}
|
||
|
|
||
|
func (use *WalletUseCase) HistoryBalance(ctx context.Context, req usecase.BalanceReq) ([]usecase.Balance, error) {
|
||
|
//TODO implement me
|
||
|
panic("implement me")
|
||
|
}
|
||
|
|
||
|
func (use *WalletUseCase) BalanceByAssets(ctx context.Context, uid, cryptoCode string, walletTypes []wallet.Types) (usecase.BalanceAssetsResp, error) {
|
||
|
//TODO implement me
|
||
|
panic("implement me")
|
||
|
}
|
||
|
|
||
|
func (use *WalletUseCase) CheckBalance(ctx context.Context, tx usecase.WalletTransferRequest) error {
|
||
|
//TODO implement me
|
||
|
panic("implement me")
|
||
|
}
|
||
|
|
||
|
func (use *WalletUseCase) GetTodayWithdraw(ctx context.Context, uid, toCrypto string) (usecase.TodayWithdrawResp, error) {
|
||
|
//TODO implement me
|
||
|
panic("implement me")
|
||
|
}
|
||
|
|
||
|
func MustWalletUseCase(param WalletUseCaseParam) usecase.WalletTransferUseCase {
|
||
|
return &WalletUseCase{
|
||
|
WalletUseCaseParam: param,
|
||
|
existUIDAsset: make(map[string]struct{}),
|
||
|
}
|
||
|
}
|