go-common/app/admin/main/card/dao/mysql.go
2019-04-22 18:49:16 +08:00

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
}