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