You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
6.5 KiB
161 lines
6.5 KiB
package controller
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/database"
|
|
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/model"
|
|
)
|
|
|
|
// RedPacketDatabase is a façade aggregating all redpacket-related collections.
|
|
// It mirrors the legacy Repository interface so the rpc service layer stays
|
|
// unaware of the underlying storage.
|
|
type RedPacketDatabase interface {
|
|
CreateRedPacket(ctx context.Context, rp *model.RedPacket) error
|
|
GetRedPacketByBizID(ctx context.Context, bizID string) (*model.RedPacket, error)
|
|
GetRedPacketByPacketID(ctx context.Context, packetID string) (*model.RedPacket, error)
|
|
UpdateRedPacketCreated(ctx context.Context, rp *model.RedPacket) error
|
|
UpdateRedPacketStatus(ctx context.Context, packetID, status string) error
|
|
UpdateRedPacketClaimProgress(ctx context.Context, packetID, claimedAmount, status string) error
|
|
GetExpiredPendingPackets(ctx context.Context, nowUnix int64) ([]*model.RedPacket, error)
|
|
|
|
CreateClaimAuth(ctx context.Context, auth *model.RedPacketClaimAuth) error
|
|
GetClaimAuth(ctx context.Context, packetID, claimer string) (*model.RedPacketClaimAuth, error)
|
|
MarkClaimAuthUsed(ctx context.Context, authNonce string) error
|
|
|
|
SaveClaim(ctx context.Context, claim *model.RedPacketClaim) error
|
|
GetClaimByPacketIDAndClaimer(ctx context.Context, packetID, claimer string) (*model.RedPacketClaim, error)
|
|
GetClaimByPacketIDAndUserID(ctx context.Context, packetID, userID string) (*model.RedPacketClaim, error)
|
|
GetClaimsByPacketID(ctx context.Context, packetID string) ([]*model.RedPacketClaim, error)
|
|
|
|
SaveRefund(ctx context.Context, refund *model.RedPacketRefund) error
|
|
GetRefundByPacketID(ctx context.Context, packetID string) (*model.RedPacketRefund, error)
|
|
|
|
CreateWalletBindingChallenge(ctx context.Context, challenge *model.WalletBindingChallenge) error
|
|
GetWalletBindingChallenge(ctx context.Context, challengeID string) (*model.WalletBindingChallenge, error)
|
|
UpdateWalletBindingChallenge(ctx context.Context, challenge *model.WalletBindingChallenge) error
|
|
|
|
UpsertWalletBinding(ctx context.Context, binding *model.WalletBinding) error
|
|
GetActiveWalletBinding(ctx context.Context, userID, chainType, walletAddress string) (*model.WalletBinding, error)
|
|
|
|
CreateAdminAuditLog(ctx context.Context, entry *model.AdminAuditLog) error
|
|
}
|
|
|
|
type redPacketDatabase struct {
|
|
rp database.RedPacket
|
|
claim database.RedPacketClaim
|
|
claimAuth database.RedPacketClaimAuth
|
|
refund database.RedPacketRefund
|
|
challenge database.WalletBindingChallenge
|
|
binding database.WalletBinding
|
|
auditLog database.AdminAuditLog
|
|
}
|
|
|
|
func NewRedPacketDatabase(
|
|
rp database.RedPacket,
|
|
claim database.RedPacketClaim,
|
|
claimAuth database.RedPacketClaimAuth,
|
|
refund database.RedPacketRefund,
|
|
challenge database.WalletBindingChallenge,
|
|
binding database.WalletBinding,
|
|
auditLog database.AdminAuditLog,
|
|
) RedPacketDatabase {
|
|
return &redPacketDatabase{
|
|
rp: rp,
|
|
claim: claim,
|
|
claimAuth: claimAuth,
|
|
refund: refund,
|
|
challenge: challenge,
|
|
binding: binding,
|
|
auditLog: auditLog,
|
|
}
|
|
}
|
|
|
|
func (d *redPacketDatabase) CreateRedPacket(ctx context.Context, rp *model.RedPacket) error {
|
|
return d.rp.Create(ctx, rp)
|
|
}
|
|
|
|
func (d *redPacketDatabase) GetRedPacketByBizID(ctx context.Context, bizID string) (*model.RedPacket, error) {
|
|
return d.rp.GetByBizID(ctx, bizID)
|
|
}
|
|
|
|
func (d *redPacketDatabase) GetRedPacketByPacketID(ctx context.Context, packetID string) (*model.RedPacket, error) {
|
|
return d.rp.GetByPacketID(ctx, packetID)
|
|
}
|
|
|
|
func (d *redPacketDatabase) UpdateRedPacketCreated(ctx context.Context, rp *model.RedPacket) error {
|
|
return d.rp.UpdateCreated(ctx, rp)
|
|
}
|
|
|
|
func (d *redPacketDatabase) UpdateRedPacketStatus(ctx context.Context, packetID, status string) error {
|
|
return d.rp.UpdateStatus(ctx, packetID, status)
|
|
}
|
|
|
|
func (d *redPacketDatabase) UpdateRedPacketClaimProgress(ctx context.Context, packetID, claimedAmount, status string) error {
|
|
return d.rp.UpdateClaimProgress(ctx, packetID, claimedAmount, status)
|
|
}
|
|
|
|
func (d *redPacketDatabase) CreateClaimAuth(ctx context.Context, auth *model.RedPacketClaimAuth) error {
|
|
return d.claimAuth.Create(ctx, auth)
|
|
}
|
|
|
|
func (d *redPacketDatabase) GetClaimAuth(ctx context.Context, packetID, claimer string) (*model.RedPacketClaimAuth, error) {
|
|
return d.claimAuth.Get(ctx, packetID, claimer)
|
|
}
|
|
|
|
func (d *redPacketDatabase) MarkClaimAuthUsed(ctx context.Context, authNonce string) error {
|
|
return d.claimAuth.MarkUsed(ctx, authNonce)
|
|
}
|
|
|
|
func (d *redPacketDatabase) SaveClaim(ctx context.Context, claim *model.RedPacketClaim) error {
|
|
return d.claim.Save(ctx, claim)
|
|
}
|
|
|
|
func (d *redPacketDatabase) GetClaimByPacketIDAndClaimer(ctx context.Context, packetID, claimer string) (*model.RedPacketClaim, error) {
|
|
return d.claim.GetByPacketIDAndClaimer(ctx, packetID, claimer)
|
|
}
|
|
|
|
func (d *redPacketDatabase) GetClaimByPacketIDAndUserID(ctx context.Context, packetID, userID string) (*model.RedPacketClaim, error) {
|
|
return d.claim.GetByPacketIDAndUserID(ctx, packetID, userID)
|
|
}
|
|
|
|
func (d *redPacketDatabase) GetClaimsByPacketID(ctx context.Context, packetID string) ([]*model.RedPacketClaim, error) {
|
|
return d.claim.ListByPacketID(ctx, packetID)
|
|
}
|
|
|
|
func (d *redPacketDatabase) SaveRefund(ctx context.Context, refund *model.RedPacketRefund) error {
|
|
return d.refund.Save(ctx, refund)
|
|
}
|
|
|
|
func (d *redPacketDatabase) GetRefundByPacketID(ctx context.Context, packetID string) (*model.RedPacketRefund, error) {
|
|
return d.refund.GetByPacketID(ctx, packetID)
|
|
}
|
|
|
|
func (d *redPacketDatabase) GetExpiredPendingPackets(ctx context.Context, nowUnix int64) ([]*model.RedPacket, error) {
|
|
return d.rp.GetExpiredPending(ctx, nowUnix)
|
|
}
|
|
|
|
func (d *redPacketDatabase) CreateAdminAuditLog(ctx context.Context, entry *model.AdminAuditLog) error {
|
|
return d.auditLog.Create(ctx, entry)
|
|
}
|
|
|
|
func (d *redPacketDatabase) CreateWalletBindingChallenge(ctx context.Context, challenge *model.WalletBindingChallenge) error {
|
|
return d.challenge.Create(ctx, challenge)
|
|
}
|
|
|
|
func (d *redPacketDatabase) GetWalletBindingChallenge(ctx context.Context, challengeID string) (*model.WalletBindingChallenge, error) {
|
|
return d.challenge.Get(ctx, challengeID)
|
|
}
|
|
|
|
func (d *redPacketDatabase) UpdateWalletBindingChallenge(ctx context.Context, challenge *model.WalletBindingChallenge) error {
|
|
return d.challenge.Update(ctx, challenge)
|
|
}
|
|
|
|
func (d *redPacketDatabase) UpsertWalletBinding(ctx context.Context, binding *model.WalletBinding) error {
|
|
return d.binding.Upsert(ctx, binding)
|
|
}
|
|
|
|
func (d *redPacketDatabase) GetActiveWalletBinding(ctx context.Context, userID, chainType, walletAddress string) (*model.WalletBinding, error) {
|
|
return d.binding.GetActive(ctx, userID, chainType, walletAddress)
|
|
}
|