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.
109 lines
3.5 KiB
109 lines
3.5 KiB
package dao |
|
|
|
import ( |
|
"context" |
|
"crypto/md5" |
|
"encoding/base64" |
|
"fmt" |
|
"net/url" |
|
"strings" |
|
"time" |
|
|
|
"go-common/app/admin/main/activity/model" |
|
"go-common/library/log" |
|
"go-common/library/xstr" |
|
|
|
"github.com/jinzhu/gorm" |
|
"github.com/pkg/errors" |
|
) |
|
|
|
const ( |
|
_likeBatchSQL = "INSERT INTO likes(`sid`,`wid`,`mid`,`type`,`state`,`stick_top`,`ctime`,`mtime`) VALUES %s" |
|
_likeContentBatchSQL = "INSERT INTO like_content(`id`,`ipv6`,`ctime`,`mtime`) VALUES %s" |
|
) |
|
|
|
func imgAddKey(uri string) (url string) { |
|
if strings.Contains(uri, "http://drawyoo.hdslb.com") { |
|
path := strings.Replace(uri, "http://drawyoo.hdslb.com", "", -1) |
|
expire := time.Now().Unix() + 3600 |
|
md5Byte := md5.Sum([]byte(fmt.Sprintf("rjZOPr8w%s%d", path, expire))) |
|
md5Key := md5Byte[:] |
|
afterKey := strings.Replace(base64.StdEncoding.EncodeToString(md5Key), "+/", "-_", -1) |
|
return uri + "?key=" + strings.Replace(afterKey, "=", "", -1) + "&expires=" + fmt.Sprintf("%d", expire) |
|
} |
|
return uri |
|
} |
|
|
|
// GetLikeContent . |
|
func (d *Dao) GetLikeContent(c context.Context, ids []int64) (outRes map[int64]*model.LikeContent, err error) { |
|
var likeContent []*model.LikeContent |
|
if err = d.DB.Where("id in (?)", ids).Find(&likeContent).Error; err != nil && err != gorm.ErrRecordNotFound { |
|
log.Error("s.DB.Where(id in %v).Find(),error(%v)", ids, err) |
|
return |
|
} |
|
outRes = make(map[int64]*model.LikeContent, len(likeContent)) |
|
for _, item := range likeContent { |
|
outRes[item.ID] = item |
|
outRes[item.ID].Image = imgAddKey(item.Image) |
|
} |
|
return |
|
} |
|
|
|
// ActSubject get likesubject from db. |
|
func (d *Dao) ActSubject(c context.Context, sid int64) (rp *model.ActSubject, err error) { |
|
rp = new(model.ActSubject) |
|
if err = d.DB.Where("id = ?", sid).First(rp).Error; err != nil { |
|
log.Error(" s.DB.Where(id ,%d).First() error(%v)", sid, err) |
|
} |
|
return |
|
} |
|
|
|
// Musics get music info . |
|
func (d *Dao) Musics(c context.Context, aids []int64, ip string) (music *model.MusicRes, err error) { |
|
params := url.Values{} |
|
params.Set("songIds", xstr.JoinInts(aids)) |
|
if err = d.client.Post(c, d.songsURL, ip, params, &music); err != nil { |
|
err = errors.Wrapf(err, "d.client.Post(%s)", d.songsURL) |
|
} |
|
if music.Code != 0 { |
|
err = errors.New("get music error") |
|
} |
|
return |
|
} |
|
|
|
// BatchLike . |
|
func (d *Dao) BatchLike(c context.Context, item *model.Like, wids []int64, ipv6 []byte) (err error) { |
|
var ( |
|
likesVal []*model.Like |
|
) |
|
if len(wids) == 0 { |
|
return |
|
} |
|
lidString := make([]string, 0, len(wids)) |
|
rowStrings := make([]string, 0, len(wids)) |
|
ctime := time.Now() |
|
for _, v := range wids { |
|
rowStrings = append(rowStrings, fmt.Sprintf("(%d,%d,%d,%d,%d,%d,'%s','%s')", item.Sid, v, item.Mid, item.Type, item.State, item.StickTop, ctime, ctime)) |
|
} |
|
tx := d.DB.Begin() |
|
if err = tx.Model(&model.Like{}).Exec(fmt.Sprintf(_likeBatchSQL, strings.Join(rowStrings, ","))).Error; err != nil { |
|
err = errors.Wrapf(err, " d.DB.Model(&model.Like{}).Exec(%s)", _likeBatchSQL) |
|
tx.Rollback() |
|
return |
|
} |
|
if err = tx.Model(&model.Like{}).Where(fmt.Sprintf("sid = ? and wid in (%s)", xstr.JoinInts(wids)), item.Sid).Find(&likesVal).Error; err != nil { |
|
err = errors.Wrapf(err, " d.DB.Model(&model.Like{}).find()") |
|
tx.Rollback() |
|
return |
|
} |
|
for _, itm := range likesVal { |
|
lidString = append(lidString, fmt.Sprintf("(%d,'%s','%s','%s')", itm.ID, ipv6, ctime, ctime)) |
|
} |
|
if err = tx.Model(&model.LikeContent{}).Exec(fmt.Sprintf(_likeContentBatchSQL, strings.Join(lidString, ","))).Error; err != nil { |
|
err = errors.Wrapf(err, " d.DB.Model(&model.LikeContent{}).Exec(%s)", _likeContentBatchSQL) |
|
tx.Rollback() |
|
return |
|
} |
|
err = tx.Commit().Error |
|
return |
|
}
|
|
|