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

@@ -27,7 +27,7 @@ type (
nhNftHolderModel interface {
Insert(ctx context.Context, data *NhNftHolder) (sql.Result, error)
FindOne(ctx context.Context, id uint) (*NhNftHolder, error)
FindOneByAddressTokenId(ctx context.Context, address string, tokenId string) (*NhNftHolder, error)
FindOneByTokenId(ctx context.Context, tokenId string) (*NhNftHolder, error)
Update(ctx context.Context, data *NhNftHolder) error
Delete(ctx context.Context, id uint) error
}
@@ -75,10 +75,10 @@ func (m *defaultNhNftHolderModel) FindOne(ctx context.Context, id uint) (*NhNftH
}
}
func (m *defaultNhNftHolderModel) FindOneByAddressTokenId(ctx context.Context, address string, tokenId string) (*NhNftHolder, error) {
func (m *defaultNhNftHolderModel) FindOneByTokenId(ctx context.Context, tokenId string) (*NhNftHolder, error) {
var resp NhNftHolder
query := fmt.Sprintf("select %s from %s where `address` = ? and `token_id` = ? limit 1", nhNftHolderRows, m.table)
err := m.conn.QueryRowCtx(ctx, &resp, query, address, tokenId)
query := fmt.Sprintf("select %s from %s where `token_id` = ? limit 1", nhNftHolderRows, m.table)
err := m.conn.QueryRowCtx(ctx, &resp, query, tokenId)
switch err {
case nil:
return &resp, nil

View File

@@ -39,6 +39,7 @@ type (
NhTaskNftStakeLog struct {
Id uint `db:"id"`
Uid uint `db:"uid"` // 用户钱包
RoleId uint64 `db:"role_id"` // 角色id
Address string `db:"address"` // 钱包地址
TokenId string `db:"token_id"` // token id
AwardSeq int `db:"award_seq"` // 派奖序列号
@@ -77,14 +78,14 @@ func (m *defaultNhTaskNftStakeLogModel) FindOne(ctx context.Context, id uint) (*
}
func (m *defaultNhTaskNftStakeLogModel) Insert(ctx context.Context, data *NhTaskNftStakeLog) (sql.Result, error) {
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?)", m.table, nhTaskNftStakeLogRowsExpectAutoSet)
ret, err := m.conn.ExecCtx(ctx, query, data.Uid, data.Address, data.TokenId, data.AwardSeq, data.Balance, data.Stake)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?)", m.table, nhTaskNftStakeLogRowsExpectAutoSet)
ret, err := m.conn.ExecCtx(ctx, query, data.Uid, data.RoleId, data.Address, data.TokenId, data.AwardSeq, data.Balance, data.Stake)
return ret, err
}
func (m *defaultNhTaskNftStakeLogModel) Update(ctx context.Context, data *NhTaskNftStakeLog) error {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, nhTaskNftStakeLogRowsWithPlaceHolder)
_, err := m.conn.ExecCtx(ctx, query, data.Uid, data.Address, data.TokenId, data.AwardSeq, data.Balance, data.Stake, data.Id)
_, err := m.conn.ExecCtx(ctx, query, data.Uid, data.RoleId, data.Address, data.TokenId, data.AwardSeq, data.Balance, data.Stake, data.Id)
return err
}

View File

@@ -15,7 +15,7 @@ type (
NhTaskNftStakeModel interface {
nhTaskNftStakeModel
withSession(session sqlx.Session) NhTaskNftStakeModel
StakeNft(ctx context.Context, uid uint, tokens []string) error
StakeNft(ctx context.Context, uid uint, roleId uint64, tokens []string) error
UnStakeNft(ctx context.Context, uid uint, token string) error
FindByUid(ctx context.Context, uid uint) ([]NhTaskNftStake, error)
AllStakeNft(ctx context.Context) ([]NhTaskNftStake, error)
@@ -52,10 +52,10 @@ func (m *customNhTaskNftStakeModel) UnStakeNft(ctx context.Context, uid uint, to
return err
}
func (m *customNhTaskNftStakeModel) StakeNft(ctx context.Context, uid uint, tokens []string) error {
insertOrUpdate := fmt.Sprintf("INSERT INTO %s (`uid`, `token_id`, `state`) VALUES (?, ?, 1) ON DUPLICATE KEY UPDATE `state` = 1", m.table)
func (m *customNhTaskNftStakeModel) StakeNft(ctx context.Context, uid uint, roleId uint64, tokens []string) error {
insertOrUpdate := fmt.Sprintf("INSERT INTO %s (`uid`, `token_id`, `role_id`, `state`) VALUES (?, ?, ?, 1) ON DUPLICATE KEY UPDATE `role_id` = ?, `state` = 1", m.table)
for _, token := range tokens {
_, err := m.conn.ExecCtx(ctx, insertOrUpdate, uid, token)
_, err := m.conn.ExecCtx(ctx, insertOrUpdate, uid, token, roleId, roleId)
if err != nil {
return err
}

View File

@@ -40,6 +40,7 @@ type (
NhTaskNftStake struct {
Id uint `db:"id"`
Uid uint `db:"uid"` // 用户钱包
RoleId uint64 `db:"role_id"` // 角色id
TokenId string `db:"token_id"` // token id
State int8 `db:"state"` // 状态1质押中 0已取消质押
CreatedAt time.Time `db:"created_at"` // 创建时间
@@ -89,14 +90,14 @@ func (m *defaultNhTaskNftStakeModel) FindOneByUidTokenId(ctx context.Context, ui
}
func (m *defaultNhTaskNftStakeModel) Insert(ctx context.Context, data *NhTaskNftStake) (sql.Result, error) {
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?)", m.table, nhTaskNftStakeRowsExpectAutoSet)
ret, err := m.conn.ExecCtx(ctx, query, data.Uid, data.TokenId, data.State)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?)", m.table, nhTaskNftStakeRowsExpectAutoSet)
ret, err := m.conn.ExecCtx(ctx, query, data.Uid, data.RoleId, data.TokenId, data.State)
return ret, err
}
func (m *defaultNhTaskNftStakeModel) Update(ctx context.Context, newData *NhTaskNftStake) error {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, nhTaskNftStakeRowsWithPlaceHolder)
_, err := m.conn.ExecCtx(ctx, query, newData.Uid, newData.TokenId, newData.State, newData.Id)
_, err := m.conn.ExecCtx(ctx, query, newData.Uid, newData.RoleId, newData.TokenId, newData.State, newData.Id)
return err
}

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{

View File

@@ -29,6 +29,7 @@ type (
nhTaskNftStakeRewardModel interface {
Insert(ctx context.Context, data *NhTaskNftStakeReward) (sql.Result, error)
FindOne(ctx context.Context, id uint) (*NhTaskNftStakeReward, error)
FindOneByUidAwardSeq(ctx context.Context, uid uint, awardSeq int) (*NhTaskNftStakeReward, error)
Update(ctx context.Context, data *NhTaskNftStakeReward) error
Delete(ctx context.Context, id uint) error
}
@@ -39,15 +40,16 @@ type (
}
NhTaskNftStakeReward struct {
Id uint `db:"id"`
Uid uint `db:"uid"` // 用户钱包
AwardSeq int `db:"award_seq"` // 派奖序列号
PledgeOutput decimal.NullDecimal `db:"pledge_output"` // 质押产出代币
RandomCoefficient float64 `db:"random_coefficient"` // 随机系数
OccupyPercent int `db:"occupy_percent"` // 占领百分比
Reward decimal.NullDecimal `db:"reward"` // 奖励金额
CreatedAt time.Time `db:"created_at"` // 创建时间
UpdatedAt time.Time `db:"updated_at"` // 修改时间
Id uint `db:"id"`
Uid uint `db:"uid"` // 用户钱包
AwardSeq int `db:"award_seq"` // 派奖序列号
PledgeOutput decimal.Decimal `db:"pledge_output"` // 质押产出代币
RandomCoefficient float64 `db:"random_coefficient"` // 随机系数
OccupyPercent int `db:"occupy_percent"` // 占领百分比
Reward decimal.Decimal `db:"reward"` // 奖励金额
Sent int8 `db:"sent"` // 是否已发放
CreatedAt time.Time `db:"created_at"` // 创建时间
UpdatedAt time.Time `db:"updated_at"` // 修改时间
}
)
@@ -78,15 +80,29 @@ func (m *defaultNhTaskNftStakeRewardModel) FindOne(ctx context.Context, id uint)
}
}
func (m *defaultNhTaskNftStakeRewardModel) FindOneByUidAwardSeq(ctx context.Context, uid uint, awardSeq int) (*NhTaskNftStakeReward, error) {
var resp NhTaskNftStakeReward
query := fmt.Sprintf("select %s from %s where `uid` = ? and `award_seq` = ? limit 1", nhTaskNftStakeRewardRows, m.table)
err := m.conn.QueryRowCtx(ctx, &resp, query, uid, awardSeq)
switch err {
case nil:
return &resp, nil
case sqlx.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}
func (m *defaultNhTaskNftStakeRewardModel) Insert(ctx context.Context, data *NhTaskNftStakeReward) (sql.Result, error) {
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?)", m.table, nhTaskNftStakeRewardRowsExpectAutoSet)
ret, err := m.conn.ExecCtx(ctx, query, data.Uid, data.AwardSeq, data.PledgeOutput, data.RandomCoefficient, data.OccupyPercent, data.Reward)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?)", m.table, nhTaskNftStakeRewardRowsExpectAutoSet)
ret, err := m.conn.ExecCtx(ctx, query, data.Uid, data.AwardSeq, data.PledgeOutput, data.RandomCoefficient, data.OccupyPercent, data.Reward, data.Sent)
return ret, err
}
func (m *defaultNhTaskNftStakeRewardModel) Update(ctx context.Context, data *NhTaskNftStakeReward) error {
func (m *defaultNhTaskNftStakeRewardModel) Update(ctx context.Context, newData *NhTaskNftStakeReward) error {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, nhTaskNftStakeRewardRowsWithPlaceHolder)
_, err := m.conn.ExecCtx(ctx, query, data.Uid, data.AwardSeq, data.PledgeOutput, data.RandomCoefficient, data.OccupyPercent, data.Reward, data.Id)
_, err := m.conn.ExecCtx(ctx, query, newData.Uid, newData.AwardSeq, newData.PledgeOutput, newData.RandomCoefficient, newData.OccupyPercent, newData.Reward, newData.Sent, newData.Id)
return err
}