106 lines
3.4 KiB
Go
Executable File
106 lines
3.4 KiB
Go
Executable File
package model
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
|
)
|
|
|
|
var _ NhTaskNftStakeModel = (*customNhTaskNftStakeModel)(nil)
|
|
|
|
type (
|
|
// NhTaskNftStakeModel is an interface to be customized, add more methods here,
|
|
// and implement the added methods in customNhTaskNftStakeModel.
|
|
NhTaskNftStakeModel interface {
|
|
nhTaskNftStakeModel
|
|
withSession(session sqlx.Session) NhTaskNftStakeModel
|
|
StakeNft(ctx context.Context, uid uint, roleId uint64, tokenId string, tarotType int8) error
|
|
UnStakeNft(ctx context.Context, uid uint, token string, isTransferOut bool) error
|
|
FindByUid(ctx context.Context, uid uint) ([]NhTaskNftStake, error)
|
|
AllStakeNft(ctx context.Context) ([]NhTaskNftStake, error)
|
|
}
|
|
|
|
customNhTaskNftStakeModel struct {
|
|
*defaultNhTaskNftStakeModel
|
|
log NhTaskNftStakeLogModel
|
|
}
|
|
)
|
|
|
|
func (m *customNhTaskNftStakeModel) AllStakeNft(ctx context.Context) ([]NhTaskNftStake, error) {
|
|
query := fmt.Sprintf("SELECT %s FROM %s WHERE `state` = 1", nhTaskNftStakeRows, m.table)
|
|
var result []NhTaskNftStake
|
|
err := m.conn.QueryRowsCtx(ctx, &result, query)
|
|
if err != nil && !errors.Is(err, sqlx.ErrNotFound) {
|
|
return nil, err
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (m *customNhTaskNftStakeModel) FindByUid(ctx context.Context, uid uint) ([]NhTaskNftStake, error) {
|
|
query := fmt.Sprintf("SELECT %s FROM %s WHERE `uid` = ?", nhTaskNftStakeRows, m.table)
|
|
var list []NhTaskNftStake
|
|
err := m.conn.QueryRowsCtx(ctx, &list, query, uid)
|
|
if err != nil && !errors.Is(err, sqlx.ErrNotFound) {
|
|
return nil, err
|
|
}
|
|
return list, nil
|
|
}
|
|
|
|
func (m *customNhTaskNftStakeModel) UnStakeNft(ctx context.Context, uid uint, token string, isTransferOut bool) error {
|
|
update := fmt.Sprintf("UPDATE %s SET `state` = 0 WHERE `token_id` = ? AND `uid` = ?", m.table)
|
|
result, err := m.conn.ExecCtx(ctx, update, token, uid)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
row, err := result.RowsAffected()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if row > 0 {
|
|
var operate int8
|
|
if isTransferOut {
|
|
operate = 3
|
|
} else {
|
|
operate = 2
|
|
}
|
|
_, err = m.log.Insert(ctx, &NhTaskNftStakeLog{
|
|
Uid: uid,
|
|
TokenId: token,
|
|
Operate: operate,
|
|
})
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (m *customNhTaskNftStakeModel) StakeNft(ctx context.Context, uid uint, roleId uint64, tokenId string, tarotType int8) error {
|
|
insertOrUpdate := fmt.Sprintf("INSERT INTO %s (`uid`, `token_id`, `role_id`, `type`, `state`) VALUES (?, ?, ?, ?, 1) ON DUPLICATE KEY UPDATE `uid` = ?, `role_id` = ?, `state` = 1", m.table)
|
|
_, err := m.conn.ExecCtx(ctx, insertOrUpdate, uid, tokenId, roleId, tarotType, uid, roleId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = m.log.Insert(ctx, &NhTaskNftStakeLog{
|
|
Uid: uid,
|
|
RoleId: roleId,
|
|
TokenId: tokenId,
|
|
Operate: 1,
|
|
})
|
|
if err != nil {
|
|
logx.Errorw("insert stake log failed", logx.Field("err", err), logx.Field("uid", uid), logx.Field("tokenId", tokenId), logx.Field("role", roleId))
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// NewNhTaskNftStakeModel returns a model for the database table.
|
|
func NewNhTaskNftStakeModel(conn sqlx.SqlConn) NhTaskNftStakeModel {
|
|
return &customNhTaskNftStakeModel{
|
|
defaultNhTaskNftStakeModel: newNhTaskNftStakeModel(conn),
|
|
log: NewNhTaskNftStakeLogModel(conn),
|
|
}
|
|
}
|
|
|
|
func (m *customNhTaskNftStakeModel) withSession(session sqlx.Session) NhTaskNftStakeModel {
|
|
return NewNhTaskNftStakeModel(sqlx.NewSqlConnFromSession(session))
|
|
}
|