221 lines
6.2 KiB
Go
221 lines
6.2 KiB
Go
package dao
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/civet148/log"
|
|
"github.com/civet148/sqlca/v2"
|
|
"intent-system/pkg/dal/models"
|
|
)
|
|
|
|
type InviteCodeCondition struct {
|
|
RandomCode string `json:"invite_code"`
|
|
Account string `json:"account"`
|
|
State int `json:"state"`
|
|
PageNo int `json:"page_no"`
|
|
PageSize int `json:"page_size"`
|
|
}
|
|
|
|
const (
|
|
InviteCodeStateUnused = 1 //等待校验
|
|
InviteCodeStateUsed = 2 //已校验
|
|
)
|
|
|
|
type InviteCodeDAO struct {
|
|
db *sqlca.Engine
|
|
}
|
|
|
|
func NewInviteCodeDAO(db *sqlca.Engine) *InviteCodeDAO {
|
|
return &InviteCodeDAO{
|
|
db: db,
|
|
}
|
|
}
|
|
|
|
// insert if not exist or update columns on duplicate key...
|
|
func (dao *InviteCodeDAO) Upsert(do *models.InviteCodeDO, columns ...string) (lastInsertId int64, err error) {
|
|
return dao.db.Model(&do).Table(models.TableNameInviteCode).Select(columns...).Upsert()
|
|
}
|
|
|
|
// query records by id
|
|
func (dao *InviteCodeDAO) QueryById(id interface{}, columns ...string) (do *models.InviteCodeDO, err error) {
|
|
if _, err = dao.db.Model(&do).Table(models.TableNameInviteCode).Id(id).Select(columns...).Query(); err != nil {
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
|
|
// query records by conditions
|
|
func (dao *InviteCodeDAO) QueryByCondition(conditions map[string]interface{}, columns ...string) (dos []*models.InviteCodeDO, err error) {
|
|
if len(conditions) == 0 {
|
|
return nil, fmt.Errorf("condition must not be empty")
|
|
}
|
|
e := dao.db.Model(&dos).Table(models.TableNameInviteCode).Select(columns...)
|
|
for k, v := range conditions {
|
|
e.Eq(k, v)
|
|
}
|
|
if _, err = e.Query(); err != nil {
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *InviteCodeDAO) CheckInviteCodeValid(strRandomCode string) (ok bool, err error) {
|
|
var do *models.InviteCodeDO
|
|
_, err = dao.db.Model(&do).
|
|
Table(models.TableNameInviteCode).
|
|
Equal(models.INVITE_CODE_COLUMN_RANDOM_CODE, strRandomCode).
|
|
Equal(models.INVITE_CODE_COLUMN_STATE, InviteCodeStateUnused).
|
|
Equal(models.INVITE_CODE_COLUMN_DELETED, 0).
|
|
Query()
|
|
if err != nil {
|
|
return false, log.Errorf(err.Error())
|
|
}
|
|
if do.Id == 0 {
|
|
return false, nil
|
|
}
|
|
if do.UserId != 0 && do.State == InviteCodeStateUsed {
|
|
return false, nil
|
|
}
|
|
return true, nil
|
|
}
|
|
|
|
func (dao *InviteCodeDAO) CheckUserInviteCode(strUserAcc, strRandomCode string) (ok bool, err error) {
|
|
var do *models.InviteCodeDO
|
|
_, err = dao.db.Model(&do).
|
|
Table(models.TableNameInviteCode).
|
|
Equal(models.INVITE_CODE_COLUMN_USER_ACC, strUserAcc).
|
|
Equal(models.INVITE_CODE_COLUMN_RANDOM_CODE, strRandomCode).
|
|
Equal(models.INVITE_CODE_COLUMN_DELETED, 0).
|
|
Query()
|
|
if err != nil {
|
|
return false, log.Errorf(err.Error())
|
|
}
|
|
if do.Id == 0 {
|
|
return false, nil
|
|
}
|
|
if do.State == InviteCodeStateUsed {
|
|
return false, nil
|
|
}
|
|
return true, nil
|
|
}
|
|
|
|
func (dao *InviteCodeDAO) Insert(do *models.InviteCodeDO) (lastId int64, err error) {
|
|
var id int32
|
|
_, err = dao.db.Model(&id).
|
|
Table(models.TableNameInviteCode).
|
|
Equal(models.INVITE_CODE_COLUMN_RANDOM_CODE, do.RandomCode).
|
|
Query()
|
|
if err != nil {
|
|
return 0, log.Errorf(err.Error())
|
|
}
|
|
if id != 0 {
|
|
return 0, log.Errorf("invite code already exists")
|
|
}
|
|
if lastId, err = dao.db.Model(&do).Table(models.TableNameInviteCode).Insert(); err != nil {
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *InviteCodeDAO) Update(do *models.InviteCodeDO, columns ...string) (lastId int64, err error) {
|
|
if lastId, err = dao.db.Model(&do).
|
|
Table(models.TableNameInviteCode).
|
|
Select(columns...).
|
|
Update(); err != nil {
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *InviteCodeDAO) UpdateByUserAndInviteCode(strUserAcc, strRandomCode string) (lastId int64, err error) {
|
|
if lastId, err = dao.db.Model(InviteCodeStateUsed).
|
|
Table(models.TableNameInviteCode).
|
|
Select(models.INVITE_CODE_COLUMN_STATE).
|
|
Equal(models.INVITE_CODE_COLUMN_USER_ACC, strUserAcc).
|
|
Equal(models.INVITE_CODE_COLUMN_RANDOM_CODE, strRandomCode).
|
|
Equal(models.INVITE_CODE_COLUMN_DELETED, 0).
|
|
Update(); err != nil {
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
func (dao *InviteCodeDAO) DeleteById(id int32) (lastId int64, err error) {
|
|
if lastId, err = dao.db.Model(1).
|
|
Select(models.INVITE_CODE_COLUMN_DELETED).
|
|
Table(models.TableNameInviteCode).
|
|
Equal(models.INVITE_CODE_COLUMN_ID, id).
|
|
Update(); err != nil {
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *InviteCodeDAO) DeleteByInviteCodeUnused(strRandomCode string) (lastId int64, err error) {
|
|
if lastId, err = dao.db.Model(1).
|
|
Select(models.INVITE_CODE_COLUMN_DELETED).
|
|
Table(models.TableNameInviteCode).
|
|
Equal(models.INVITE_CODE_COLUMN_STATE, InviteCodeStateUnused).
|
|
Equal(models.INVITE_CODE_COLUMN_RANDOM_CODE, strRandomCode).
|
|
Equal(models.INVITE_CODE_COLUMN_DELETED, 0).
|
|
Update(); err != nil {
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *InviteCodeDAO) DeleteUnusedCodeByUserAcc(strUserAcc string) (lastId int64, err error) {
|
|
if lastId, err = dao.db.Model(1).
|
|
Select(models.INVITE_CODE_COLUMN_DELETED).
|
|
Table(models.TableNameInviteCode).
|
|
Equal(models.INVITE_CODE_COLUMN_STATE, InviteCodeStateUnused).
|
|
Equal(models.INVITE_CODE_COLUMN_USER_ACC, strUserAcc).
|
|
Update(); err != nil {
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *InviteCodeDAO) SelectByCondition(cond *InviteCodeCondition) (dos []*models.InviteCodeDO, total int64, err error) {
|
|
e := dao.db.Model(&dos).
|
|
Table(models.TableNameInviteCode).
|
|
Page(cond.PageNo, cond.PageSize).
|
|
Desc(models.INVITE_CODE_COLUMN_CREATED_TIME).
|
|
Equal(models.INVITE_CODE_COLUMN_DELETED, 0)
|
|
|
|
if cond.RandomCode != "" {
|
|
e.Equal(models.INVITE_CODE_COLUMN_RANDOM_CODE, cond.RandomCode)
|
|
}
|
|
if cond.Account != "" {
|
|
e.Equal(models.INVITE_CODE_COLUMN_USER_ACC, cond.Account)
|
|
}
|
|
if cond.State != 0 {
|
|
e.Equal(models.INVITE_CODE_COLUMN_STATE, cond.State)
|
|
}
|
|
_, total, err = e.QueryEx()
|
|
if err != nil {
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *InviteCodeDAO) SelectByAccAndCode(strUserAcc, strRandomCode string) (do *models.InviteCodeDO, err error) {
|
|
_, err = dao.db.Model(&do).
|
|
Table(models.TableNameInviteCode).
|
|
Equal(models.INVITE_CODE_COLUMN_DELETED, 0).
|
|
Equal(models.INVITE_CODE_COLUMN_USER_ACC, strUserAcc).
|
|
Equal(models.INVITE_CODE_COLUMN_RANDOM_CODE, strRandomCode).
|
|
Equal(models.INVITE_CODE_COLUMN_DELETED, 0).
|
|
Query()
|
|
if err != nil {
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|