You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
5.4 KiB
193 lines
5.4 KiB
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 |
|
}
|
|
|