nft task reward
This commit is contained in:
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user