plugai_updsrv/pkg/dal/dao/question_answer.go

130 lines
3.9 KiB
Go

package dao
import (
"fmt"
"github.com/civet148/log"
"github.com/civet148/sqlca/v2"
"intent-system/pkg/dal/models"
)
type QuestionAnswerCondition struct {
PageNo int
PageSize int
Id int64
IsDeleted bool
ContainExtra bool
Asc bool
Search string
Language string
}
type QuestionAnswerDAO struct {
db *sqlca.Engine
}
func NewQuestionAnswerDAO(db *sqlca.Engine) *QuestionAnswerDAO {
return &QuestionAnswerDAO{
db: db,
}
}
// insert into table by data model
func (dao *QuestionAnswerDAO) Insert(do *models.QuestionAnswerDO) (lastInsertId int64, err error) {
return dao.db.Model(&do).Table(models.TableNameQuestionAnswer).Insert()
}
// insert if not exist or update columns on duplicate key...
func (dao *QuestionAnswerDAO) Upsert(do *models.QuestionAnswerDO, columns ...string) (lastInsertId int64, err error) {
return dao.db.Model(&do).Table(models.TableNameQuestionAnswer).Select(columns...).Upsert()
}
// update table set columns where id=xxx
func (dao *QuestionAnswerDAO) Update(do *models.QuestionAnswerDO, columns ...string) (rows int64, err error) {
return dao.db.Model(&do).Table(models.TableNameQuestionAnswer).Select(columns...).Update()
}
// query records by id
func (dao *QuestionAnswerDAO) QueryById(id interface{}, columns ...string) (do *models.QuestionAnswerDO, err error) {
if _, err = dao.db.Model(&do).Table(models.TableNameQuestionAnswer).Id(id).Select(columns...).Query(); err != nil {
return nil, err
}
return
}
// query records by conditions
func (dao *QuestionAnswerDAO) QueryByCondition(conditions map[string]interface{}, columns ...string) (dos []*models.QuestionAnswerDO, err error) {
if len(conditions) == 0 {
return nil, fmt.Errorf("condition must not be empty")
}
e := dao.db.Model(&dos).Table(models.TableNameQuestionAnswer).Select(columns...)
for k, v := range conditions {
e.Eq(k, v)
}
if _, err = e.Query(); err != nil {
return nil, err
}
return
}
func (dao *QuestionAnswerDAO) QueryList(cond *QuestionAnswerCondition) (dos []*models.QuestionAnswerDO, total int64, err error) {
e := dao.db.Model(&dos).
Table(models.TableNameQuestionAnswer).
Select(
models.QUESTION_ANSWER_COLUMN_ID,
models.QUESTION_ANSWER_COLUMN_ORG_ID,
models.QUESTION_ANSWER_COLUMN_QUESTION,
models.QUESTION_ANSWER_COLUMN_ANSWER,
models.QUESTION_ANSWER_COLUMN_STATE,
models.QUESTION_ANSWER_COLUMN_IS_OVERWRITTEN,
models.QUESTION_ANSWER_COLUMN_IS_REPLICATE,
models.QUESTION_ANSWER_COLUMN_IS_DELETED,
models.QUESTION_ANSWER_COLUMN_CREATED_TIME,
models.QUESTION_ANSWER_COLUMN_UPDATED_TIME,
).
Page(cond.PageNo, cond.PageSize)
if cond.Id != 0 {
e.Eq(models.QUESTION_ANSWER_COLUMN_ID, cond.Id)
}
if cond.IsDeleted {
e.Eq(models.QUESTION_ANSWER_COLUMN_IS_DELETED, 1)
} else {
e.Eq(models.QUESTION_ANSWER_COLUMN_IS_DELETED, 0)
}
if cond.ContainExtra {
e.Select(models.QUESTION_ANSWER_COLUMN_EXTRA_DATA)
}
if cond.Language != "" {
e.Eq(models.QUESTION_ANSWER_COLUMN_LANGUAGE, cond.Language)
}
if cond.Search != "" {
e.Like(models.QUESTION_ANSWER_COLUMN_QUESTION, cond.Search)
}
if cond.Asc {
e.Asc(models.QUESTION_ANSWER_COLUMN_UPDATED_TIME, models.QUESTION_ANSWER_COLUMN_ID)
} else {
e.Desc(models.QUESTION_ANSWER_COLUMN_UPDATED_TIME, models.QUESTION_ANSWER_COLUMN_ID)
}
_, total, err = e.QueryEx()
if err != nil {
return nil, 0, log.Errorf(err.Error())
}
return
}
func (dao *QuestionAnswerDAO) UpdateByOrgId(do *models.QuestionAnswerDO, columns ...string) (rows int64, err error) {
return dao.db.Model(&do).Table(models.TableNameQuestionAnswer).Eq(models.QUESTION_ANSWER_COLUMN_ORG_ID, do.OrgId).Select(columns...).Update()
}
// query max news id
func (dao *QuestionAnswerDAO) QueryMaxSyncId(lang models.LanguageType) (lastId int64, err error) {
if _, err = dao.db.Model(&lastId).
Table(models.TableNameQuestionAnswer).
Max(models.QUESTION_ANSWER_COLUMN_ORG_ID).
Eq(models.QUESTION_ANSWER_COLUMN_LANGUAGE, lang).
Query(); err != nil {
return 0, err
}
return
}