复制项目
This commit is contained in:
116
pkg/common/db/table/chat/wallet.go
Normal file
116
pkg/common/db/table/chat/wallet.go
Normal file
@@ -0,0 +1,116 @@
|
||||
// Copyright © 2023 OpenIM open source community. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package chat
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/openimsdk/tools/db/pagination"
|
||||
)
|
||||
|
||||
// BalanceRecordType 余额变动类型
|
||||
const (
|
||||
BalanceRecordTypeRecharge = 1 // 充值
|
||||
BalanceRecordTypeWithdraw = 2 // 提现/提款
|
||||
BalanceRecordTypeConsume = 3 // 消费
|
||||
BalanceRecordTypeRefund = 4 // 退款
|
||||
BalanceRecordTypeReward = 5 // 奖励
|
||||
BalanceRecordTypeAdminRecharge = 6 // 后台充值
|
||||
BalanceRecordTypeSendRedPacket = 7 // 发红包(减少余额)
|
||||
BalanceRecordTypeGrabRedPacket = 8 // 抢红包(增加余额)
|
||||
BalanceRecordTypeOther = 99 // 其他
|
||||
)
|
||||
|
||||
// WithdrawAccountType 提现账号类型
|
||||
const (
|
||||
WithdrawAccountTypeAlipay = 1 // 支付宝
|
||||
WithdrawAccountTypeWeChat = 2 // 微信
|
||||
WithdrawAccountTypeBankCard = 3 // 银行卡
|
||||
)
|
||||
|
||||
// RealNameAuth 实名认证信息
|
||||
type RealNameAuth struct {
|
||||
IDCard string `bson:"id_card"` // 身份证号
|
||||
IDCardPhotoFront string `bson:"id_card_photo_front"` // 身份证正面照片URL
|
||||
IDCardPhotoBack string `bson:"id_card_photo_back"` // 身份证反面照片URL
|
||||
Name string `bson:"name"` // 真实姓名
|
||||
AuditStatus int32 `bson:"audit_status"` // 审核状态:0-未审核,1-审核通过,2-审核拒绝
|
||||
}
|
||||
|
||||
// Wallet 钱包模型
|
||||
type Wallet struct {
|
||||
UserID string `bson:"user_id"` // 用户ID
|
||||
Balance int64 `bson:"balance"` // 用户余额(单位:分)
|
||||
PaymentPassword string `bson:"payment_password"` // 支付密码(加密存储)
|
||||
WithdrawAccount string `bson:"withdraw_account"` // 提现账号
|
||||
WithdrawAccountType int32 `bson:"withdraw_account_type"` // 提现账号类型:1-支付宝,2-微信,3-银行卡
|
||||
RealNameAuth RealNameAuth `bson:"real_name_auth"` // 实名认证信息
|
||||
WithdrawReceiveAccount string `bson:"withdraw_receive_account"` // 提现收款账号
|
||||
CreateTime time.Time `bson:"create_time"` // 创建时间
|
||||
UpdateTime time.Time `bson:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
func (Wallet) TableName() string {
|
||||
return "wallets"
|
||||
}
|
||||
|
||||
type WalletInterface interface {
|
||||
Create(ctx context.Context, wallets ...*Wallet) error
|
||||
Take(ctx context.Context, userID string) (*Wallet, error)
|
||||
Find(ctx context.Context, userIDs []string) ([]*Wallet, error)
|
||||
Update(ctx context.Context, userID string, data map[string]any) error
|
||||
UpdateBalance(ctx context.Context, userID string, balance int64) error
|
||||
IncrementBalance(ctx context.Context, userID string, amount int64) (beforeBalance int64, afterBalance int64, err error) // 原子更新余额,返回更新前后的余额
|
||||
UpdatePaymentPassword(ctx context.Context, userID string, paymentPassword string) error
|
||||
UpdateWithdrawAccount(ctx context.Context, userID string, withdrawAccount string) error // 更新提款账号(兼容旧接口)
|
||||
UpdateWithdrawAccountWithType(ctx context.Context, userID string, withdrawAccount string, accountType int32) error // 更新提款账号(带类型)
|
||||
UpdateRealNameAuth(ctx context.Context, userID string, realNameAuth RealNameAuth) error // 更新实名认证信息
|
||||
Delete(ctx context.Context, userIDs []string) error
|
||||
Page(ctx context.Context, pagination pagination.Pagination) (int64, []*Wallet, error)
|
||||
PageByRealNameAuthAuditStatus(ctx context.Context, auditStatus int32, userID string, pagination pagination.Pagination) (int64, []*Wallet, error) // 按实名认证审核状态分页查询(支持用户ID搜索)
|
||||
SearchByRealNameAuth(ctx context.Context, realNameKeyword string, idCardKeyword string) ([]string, error) // 按实名认证信息搜索钱包(返回userIDs)
|
||||
}
|
||||
|
||||
// WalletBalanceRecord 钱包余额记录
|
||||
type WalletBalanceRecord struct {
|
||||
ID string `bson:"_id"` // 记录ID
|
||||
UserID string `bson:"user_id"` // 用户ID
|
||||
Amount int64 `bson:"amount"` // 变动金额(单位:分,正数表示增加,负数表示减少)
|
||||
Type int32 `bson:"type"` // 变动类型:1-充值,2-提现/提款,3-消费,4-退款,5-奖励,6-后台充值,7-发红包,8-抢红包,99-其他
|
||||
BeforeBalance int64 `bson:"before_balance"` // 变动前余额(单位:分)
|
||||
AfterBalance int64 `bson:"after_balance"` // 变动后余额(单位:分)
|
||||
OrderID string `bson:"order_id"` // 关联订单ID(可选)
|
||||
TransactionID string `bson:"transaction_id"` // 交易ID(可选)
|
||||
RedPacketID string `bson:"red_packet_id"` // 红包ID(用于发红包和抢红包记录关联,可选)
|
||||
Remark string `bson:"remark"` // 备注
|
||||
CreateTime time.Time `bson:"create_time"` // 创建时间
|
||||
}
|
||||
|
||||
func (WalletBalanceRecord) TableName() string {
|
||||
return "wallet_balance_records"
|
||||
}
|
||||
|
||||
type WalletBalanceRecordInterface interface {
|
||||
Create(ctx context.Context, records ...*WalletBalanceRecord) error
|
||||
Take(ctx context.Context, recordID string) (*WalletBalanceRecord, error)
|
||||
FindByUserID(ctx context.Context, userID string, pagination pagination.Pagination) (int64, []*WalletBalanceRecord, error)
|
||||
FindByUserIDAndType(ctx context.Context, userID string, recordType int32, pagination pagination.Pagination) (int64, []*WalletBalanceRecord, error)
|
||||
FindByOrderID(ctx context.Context, orderID string) (*WalletBalanceRecord, error)
|
||||
FindByTransactionID(ctx context.Context, transactionID string) (*WalletBalanceRecord, error)
|
||||
FindByRedPacketID(ctx context.Context, redPacketID string) ([]*WalletBalanceRecord, error)
|
||||
GetUserBalanceHistory(ctx context.Context, userID string, startTime, endTime *time.Time, pagination pagination.Pagination) (int64, []*WalletBalanceRecord, error)
|
||||
CountByUserID(ctx context.Context, userID string) (int64, error)
|
||||
}
|
||||
Reference in New Issue
Block a user