194 lines
5.4 KiB
Go
194 lines
5.4 KiB
Go
package dao
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"strconv"
|
|
|
|
"go-common/app/admin/main/card/model"
|
|
"go-common/library/xstr"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// AddGroup add group info.
|
|
func (d *Dao) AddGroup(c context.Context, arg *model.AddGroup) error {
|
|
return d.DB.Table("card_group").Create(arg).Error
|
|
}
|
|
|
|
// UpdateGroup update group info.
|
|
func (d *Dao) UpdateGroup(c context.Context, arg *model.UpdateGroup) error {
|
|
return d.DB.Table("card_group").Where("id=?", arg.ID).Update(map[string]interface{}{
|
|
"name": arg.Name,
|
|
"state": arg.State,
|
|
"operator": arg.Operator,
|
|
}).Error
|
|
}
|
|
|
|
// Cards query cards.
|
|
func (d *Dao) Cards(c context.Context) (res []*model.Card, err error) {
|
|
err = d.DB.Table("card_info").Order("order_num desc").Where("state = 0 AND deleted = 0").Find(&res).Error
|
|
return
|
|
}
|
|
|
|
// CardsByGid query cards by group id.
|
|
func (d *Dao) CardsByGid(c context.Context, gid int64) (res []*model.Card, err error) {
|
|
err = d.DB.Table("card_info").Order("order_num desc").Where("group_id=?", gid).Where("deleted = 0").Find(&res).Error
|
|
return
|
|
}
|
|
|
|
// CardsByIds query cards by ids.
|
|
func (d *Dao) CardsByIds(c context.Context, ids []int64) (res []*model.Card, err error) {
|
|
err = d.DB.Table("card_info").Order("order_num desc").Where("id in (?)", ids).Where("deleted = 0").Find(&res).Error
|
|
return
|
|
}
|
|
|
|
// GroupsByIds query groups by ids.
|
|
func (d *Dao) GroupsByIds(c context.Context, ids []int64) (res []*model.CardGroup, err error) {
|
|
err = d.DB.Table("card_group").Order("order_num desc").Where("id in (?)", ids).Where("deleted = 0").Find(&res).Error
|
|
return
|
|
}
|
|
|
|
// AddCard add card.
|
|
func (d *Dao) AddCard(arg *model.AddCard) error {
|
|
return d.DB.Table("card_info").Create(arg).Error
|
|
}
|
|
|
|
// CardByName get card by name.
|
|
func (d *Dao) CardByName(name string) (res *model.Card, err error) {
|
|
res = new(model.Card)
|
|
q := d.DB.Table("card_info").Where("name=?", name).First(res)
|
|
if q.Error != nil {
|
|
if q.RecordNotFound() {
|
|
err = nil
|
|
res = nil
|
|
return
|
|
}
|
|
err = errors.Wrapf(err, "card by name")
|
|
}
|
|
return
|
|
}
|
|
|
|
// GroupByName get group by name.
|
|
func (d *Dao) GroupByName(name string) (res *model.CardGroup, err error) {
|
|
res = new(model.CardGroup)
|
|
q := d.DB.Table("card_group").Where("name=?", name).First(res)
|
|
if q.Error != nil {
|
|
if q.RecordNotFound() {
|
|
err = nil
|
|
res = nil
|
|
return
|
|
}
|
|
err = errors.Wrapf(err, "card_group by name")
|
|
}
|
|
return
|
|
}
|
|
|
|
// UpdateCard update card.
|
|
func (d *Dao) UpdateCard(req *model.UpdateCard) error {
|
|
args := map[string]interface{}{}
|
|
args["name"] = req.Name
|
|
args["state"] = req.State
|
|
args["is_hot"] = req.IsHot
|
|
args["operator"] = req.Operator
|
|
if req.CardURL != "" {
|
|
args["card_url"] = req.CardURL
|
|
}
|
|
if req.BigCradURL != "" {
|
|
args["big_crad_url"] = req.BigCradURL
|
|
}
|
|
return d.DB.Table("card_info").Where("id=?", req.ID).Update(args).Error
|
|
}
|
|
|
|
// UpdateCardState update card state.
|
|
func (d *Dao) UpdateCardState(c context.Context, id int64, state int8) error {
|
|
return d.DB.Table("card_info").Where("id=?", id).Update("state", state).Error
|
|
}
|
|
|
|
// DeleteCard delete card.
|
|
func (d *Dao) DeleteCard(c context.Context, id int64) error {
|
|
return d.DB.Table("card_info").Where("id=?", id).Delete(&model.Card{}).Error
|
|
}
|
|
|
|
// DeleteGroup delete group.
|
|
func (d *Dao) DeleteGroup(c context.Context, id int64) error {
|
|
return d.DB.Table("card_group").Where("id=?", id).Delete(&model.CardGroup{}).Error
|
|
}
|
|
|
|
// UpdateGroupState update group state.
|
|
func (d *Dao) UpdateGroupState(c context.Context, id int64, state int8) error {
|
|
return d.DB.Table("card_group").Where("id=?", id).Update("state", state).Error
|
|
}
|
|
|
|
// MaxCardOrder max card order num.
|
|
func (d *Dao) MaxCardOrder() (max int64, err error) {
|
|
err = d.DB.Table("card_info").Select("MAX(order_num)").Row().Scan(&max)
|
|
return
|
|
}
|
|
|
|
// MaxGroupOrder max card group order num.
|
|
func (d *Dao) MaxGroupOrder() (max int64, err error) {
|
|
err = d.DB.Table("card_group").Select("MAX(order_num)").Row().Scan(&max)
|
|
return
|
|
}
|
|
|
|
// BatchUpdateCardOrder update card order.
|
|
func (d *Dao) BatchUpdateCardOrder(c context.Context, cs []*model.Card) error {
|
|
var (
|
|
buf bytes.Buffer
|
|
ids []int64
|
|
)
|
|
buf.WriteString("UPDATE card_info SET order_num = CASE id")
|
|
for _, v := range cs {
|
|
buf.WriteString(" WHEN ")
|
|
buf.WriteString(strconv.FormatInt(v.ID, 10))
|
|
buf.WriteString(" THEN ")
|
|
buf.WriteString(strconv.FormatInt(v.OrderNum, 10))
|
|
ids = append(ids, v.ID)
|
|
}
|
|
buf.WriteString(" END WHERE id IN (")
|
|
buf.WriteString(xstr.JoinInts(ids))
|
|
buf.WriteString(");")
|
|
return d.DB.Exec(buf.String()).Error
|
|
}
|
|
|
|
// BatchUpdateCardGroupOrder update card order.
|
|
func (d *Dao) BatchUpdateCardGroupOrder(c context.Context, cs []*model.CardGroup) error {
|
|
var (
|
|
buf bytes.Buffer
|
|
ids []int64
|
|
)
|
|
buf.WriteString("UPDATE card_group SET order_num = CASE id")
|
|
for _, v := range cs {
|
|
buf.WriteString(" WHEN ")
|
|
buf.WriteString(strconv.FormatInt(v.ID, 10))
|
|
buf.WriteString(" THEN ")
|
|
buf.WriteString(strconv.FormatInt(v.OrderNum, 10))
|
|
ids = append(ids, v.ID)
|
|
}
|
|
buf.WriteString(" END WHERE id IN (")
|
|
buf.WriteString(xstr.JoinInts(ids))
|
|
buf.WriteString(");")
|
|
return d.DB.Exec(buf.String()).Error
|
|
}
|
|
|
|
// Groups query groups.
|
|
func (d *Dao) Groups(c context.Context, arg *model.ArgQueryGroup) (res []*model.CardGroup, err error) {
|
|
q := d.DB.Table("card_group").Where("deleted = 0")
|
|
if arg.GroupID > 0 {
|
|
q = q.Where("id = ?", arg.GroupID)
|
|
}
|
|
if arg.State > -1 {
|
|
q = q.Where("state = ?", arg.State)
|
|
}
|
|
if err = q.Order("order_num desc").Find(&res).Error; err != nil {
|
|
if q.RecordNotFound() {
|
|
err = nil
|
|
return
|
|
}
|
|
err = errors.Wrapf(err, "card group list")
|
|
return
|
|
}
|
|
return
|
|
}
|