Files
novatask/internal/model/nh_task_nft_stake_model.go
2024-12-27 18:06:13 +08:00

53 lines
1.6 KiB
Go
Executable File

package model
import (
"context"
"fmt"
"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, tokens []string) error
UnStakeNft(ctx context.Context, uid uint, token string) error
}
customNhTaskNftStakeModel struct {
*defaultNhTaskNftStakeModel
}
)
func (m *customNhTaskNftStakeModel) UnStakeNft(ctx context.Context, uid uint, token string) error {
update := fmt.Sprintf("UPDATE %s SET `state` = 0 WHERE `uid` = ? AND `token_id` = ?", m.table)
_, err := m.conn.ExecCtx(ctx, update, uid, token)
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)
for _, token := range tokens {
_, err := m.conn.ExecCtx(ctx, insertOrUpdate, uid, token)
if err != nil {
return err
}
}
return nil
}
// NewNhTaskNftStakeModel returns a model for the database table.
func NewNhTaskNftStakeModel(conn sqlx.SqlConn) NhTaskNftStakeModel {
return &customNhTaskNftStakeModel{
defaultNhTaskNftStakeModel: newNhTaskNftStakeModel(conn),
}
}
func (m *customNhTaskNftStakeModel) withSession(session sqlx.Session) NhTaskNftStakeModel {
return NewNhTaskNftStakeModel(sqlx.NewSqlConnFromSession(session))
}