nft task reward

This commit is contained in:
lianghuanjie
2024-12-31 20:39:02 +08:00
parent 029289e84c
commit ea86ab71e8
20 changed files with 945 additions and 170 deletions

View File

@@ -1,6 +1,13 @@
package model
import "github.com/zeromicro/go-zero/core/stores/sqlx"
import (
"context"
"errors"
"fmt"
"github.com/shopspring/decimal"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"math/rand"
)
var _ NhTaskNftStakeRewardModel = (*customNhTaskNftStakeRewardModel)(nil)
@@ -10,6 +17,8 @@ type (
NhTaskNftStakeRewardModel interface {
nhTaskNftStakeRewardModel
withSession(session sqlx.Session) NhTaskNftStakeRewardModel
GetRandomCoefficientByUid(ctx context.Context, uid uint, awardSeq int, min, max float64) (float64, error)
SetReward(ctx context.Context, uid uint, awardSeq, occupyPercent int, pledgeOutput, reward decimal.Decimal) error
}
customNhTaskNftStakeRewardModel struct {
@@ -17,6 +26,43 @@ type (
}
)
func (m *customNhTaskNftStakeRewardModel) SetReward(ctx context.Context, uid uint, awardSeq, occupyPercent int, pledgeOutput, reward decimal.Decimal) error {
update := fmt.Sprintf("UPDATE %s SET `occupy_percent` = ?, `pledge_output` = ?, `reward` = ? WHERE `uid` = ? AND `award_seq` = ?", m.table)
result, err := m.conn.ExecCtx(ctx, update, occupyPercent, pledgeOutput, reward, uid, awardSeq)
if err != nil {
return err
}
rowsAffected, err := result.RowsAffected()
if err != nil {
return err
}
if rowsAffected == 0 {
return ErrNoRowUpdate
}
return nil
}
func (m *customNhTaskNftStakeRewardModel) GetRandomCoefficientByUid(ctx context.Context, uid uint, awardSeq int, min, max float64) (float64, error) {
query := fmt.Sprintf("SELECT `random_coefficient` FROM %s WHERE `uid` = ? AND `award_seq` = ?", m.table)
var randomCoefficient float64
err := m.conn.QueryRowCtx(ctx, &randomCoefficient, query, uid, awardSeq)
if err == nil {
return randomCoefficient, nil
}
if !errors.Is(err, sqlx.ErrNotFound) {
return 0, err
}
randomCoefficient = float64(int(min*100)+rand.Intn(int(max*100-min*100))) / 100
_, err = m.Insert(ctx, &NhTaskNftStakeReward{
Uid: uid,
AwardSeq: awardSeq,
RandomCoefficient: randomCoefficient,
})
return randomCoefficient, err
}
// NewNhTaskNftStakeRewardModel returns a model for the database table.
func NewNhTaskNftStakeRewardModel(conn sqlx.SqlConn) NhTaskNftStakeRewardModel {
return &customNhTaskNftStakeRewardModel{