160 lines
4.5 KiB
Go
160 lines
4.5 KiB
Go
package dao
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/civet148/log"
|
|
"github.com/civet148/sqlca/v2"
|
|
"intent-system/pkg/dal/models"
|
|
)
|
|
|
|
const (
|
|
CustomerState_Enabled = 1
|
|
CustomerState_Disabled = 2
|
|
)
|
|
|
|
type CustomerDAO struct {
|
|
db *sqlca.Engine
|
|
}
|
|
|
|
func NewCustomerDAO(db *sqlca.Engine) *CustomerDAO {
|
|
return &CustomerDAO{
|
|
db: db,
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// insert into table by data model
|
|
func (dao *CustomerDAO) Insert(do *models.CustomerDO) (lastInsertId int64, err error) {
|
|
return dao.db.Model(&do).Table(models.TableNameCustomer).Insert()
|
|
}
|
|
|
|
// insert if not exist or update columns on duplicate key...
|
|
func (dao *CustomerDAO) Upsert(do *models.CustomerDO, columns ...string) (lastInsertId int64, err error) {
|
|
if len(columns) == 0 {
|
|
return 0, fmt.Errorf("no columns to update")
|
|
}
|
|
return dao.db.Model(&do).Table(models.TableNameCustomer).Select(columns...).Upsert()
|
|
}
|
|
|
|
// update table set columns where id=xxx
|
|
func (dao *CustomerDAO) Update(do *models.CustomerDO, columns ...string) (rows int64, err error) {
|
|
if len(columns) == 0 {
|
|
return 0, fmt.Errorf("no columns to update")
|
|
}
|
|
return dao.db.Model(&do).Table(models.TableNameCustomer).Select(columns...).Update()
|
|
}
|
|
|
|
func (dao *CustomerDAO) UpdateByEmail(do *models.CustomerDO, columns ...string) (rows int64, err error) {
|
|
if len(columns) == 0 {
|
|
return 0, fmt.Errorf("no columns to update")
|
|
}
|
|
return dao.db.Model(&do).
|
|
Table(models.TableNameCustomer).
|
|
Eq(models.CUSTOMER_COLUMN_EMAIL, do.Email).
|
|
Eq(models.CUSTOMER_COLUMN_DELETED, 0).
|
|
Select(columns...).
|
|
Update()
|
|
}
|
|
|
|
// query records by id
|
|
func (dao *CustomerDAO) QueryById(id interface{}, columns ...string) (do *models.CustomerDO, err error) {
|
|
if _, err = dao.db.Model(&do).Table(models.TableNameCustomer).Id(id).Select(columns...).Query(); err != nil {
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
|
|
// query records by conditions
|
|
func (dao *CustomerDAO) QueryByCondition(conditions map[string]interface{}, columns ...string) (dos []*models.CustomerDO, err error) {
|
|
if len(conditions) == 0 {
|
|
return nil, fmt.Errorf("condition must not be empty")
|
|
}
|
|
e := dao.db.Model(&dos).Table(models.TableNameCustomer).Select(columns...)
|
|
for k, v := range conditions {
|
|
e.Eq(k, v)
|
|
}
|
|
if _, err = e.Query(); err != nil {
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *CustomerDAO) QueryList(pageNo, pageSize int, id int32, email string, columns ...string) (dos []*models.CustomerDO, total int64, err error) {
|
|
e := dao.db.Model(&dos).Table(models.TableNameCustomer).Select(columns...).Page(pageNo, pageSize).Desc(models.CUSTOMER_COLUMN_ID)
|
|
if id != 0 {
|
|
e.Eq(models.CUSTOMER_COLUMN_ID, id)
|
|
}
|
|
if email != "" {
|
|
e.Like(models.CUSTOMER_COLUMN_EMAIL, email)
|
|
}
|
|
if _, total, err = e.QueryEx(); err != nil {
|
|
return nil, 0, log.Errorf(err.Error())
|
|
}
|
|
return
|
|
}
|
|
|
|
func (dao *CustomerDAO) UpdateByName(do *models.CustomerDO, columns ...string) (err error) {
|
|
if _, err = dao.db.Model(do).
|
|
Table(models.TableNameCustomer).
|
|
Select(columns...).
|
|
Exclude(models.CUSTOMER_COLUMN_USER_NAME, models.CUSTOMER_COLUMN_IS_ADMIN, models.CUSTOMER_COLUMN_EMAIL).
|
|
Eq(models.CUSTOMER_COLUMN_USER_NAME, do.UserName).
|
|
Update(); err != nil {
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
// user name
|
|
func (dao *CustomerDAO) SelectCustomerByName(strName string) (do *models.CustomerDO, err error) {
|
|
if _, err = dao.db.Model(&do).
|
|
Table(models.TableNameCustomer).
|
|
Select(
|
|
models.CUSTOMER_COLUMN_ID,
|
|
models.CUSTOMER_COLUMN_USER_NAME,
|
|
models.CUSTOMER_COLUMN_PASSWORD,
|
|
models.CUSTOMER_COLUMN_REFERRER,
|
|
models.CUSTOMER_COLUMN_REFERRAL_CODE,
|
|
models.CUSTOMER_COLUMN_FIRST_NAME,
|
|
models.CUSTOMER_COLUMN_LAST_NAME,
|
|
models.CUSTOMER_COLUMN_TITLE,
|
|
models.CUSTOMER_COLUMN_COMPANY,
|
|
models.CUSTOMER_COLUMN_SALT,
|
|
models.CUSTOMER_COLUMN_USER_ALIAS,
|
|
models.CUSTOMER_COLUMN_PHONE_NUMBER,
|
|
models.CUSTOMER_COLUMN_IS_ADMIN,
|
|
models.CUSTOMER_COLUMN_EMAIL,
|
|
models.CUSTOMER_COLUMN_ADDRESS,
|
|
models.CUSTOMER_COLUMN_REMARK,
|
|
models.CUSTOMER_COLUMN_STATE,
|
|
models.CUSTOMER_COLUMN_LOGIN_IP,
|
|
models.CUSTOMER_COLUMN_LOGIN_TIME,
|
|
models.CUSTOMER_COLUMN_CREATED_TIME,
|
|
models.CUSTOMER_COLUMN_UPDATED_TIME,
|
|
).
|
|
Eq(models.CUSTOMER_COLUMN_USER_NAME, strName).
|
|
Eq(models.CUSTOMER_COLUMN_DELETED, 0).
|
|
Query(); err != nil {
|
|
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
// user email
|
|
func (dao *CustomerDAO) SelectCustomerByEmail(strEmail string) (do *models.CustomerDO, err error) {
|
|
if _, err = dao.db.Model(&do).
|
|
Table(models.TableNameCustomer).
|
|
Eq(models.CUSTOMER_COLUMN_EMAIL, strEmail).
|
|
Eq(models.CUSTOMER_COLUMN_DELETED, 0).
|
|
Query(); err != nil {
|
|
|
|
log.Errorf(err.Error())
|
|
return
|
|
}
|
|
return
|
|
}
|