Skip to content

Commit

Permalink
[refactor] 反馈
Browse files Browse the repository at this point in the history
  • Loading branch information
kyrie committed Feb 12, 2023
1 parent dc645d5 commit 0199e6a
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 28 deletions.
6 changes: 3 additions & 3 deletions internal/app/api/handler/bilbil_picture.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,9 @@ func BilibiliRandomPic(s *service.BilbilPicture) func(ctx *gin.Context) {
}
}

func BilibiliPicFeedback(s *service.BilbilPicture) func(ctx *gin.Context) {
func BilibiliPicVerify(s *service.BilbilPicture) func(ctx *gin.Context) {
return func(ctx *gin.Context) {
var req idl.BilibiliPictureFeedbackReq
var req idl.BilibiliPictureVerifyReq
if err := ctx.ShouldBindJSON(&req); err != nil {
_ = ctx.Error(apperrors.NewValidationError(400, err.Error()).Wrap(err))
return
Expand All @@ -70,7 +70,7 @@ func BilibiliPicFeedback(s *service.BilbilPicture) func(ctx *gin.Context) {
_ = ctx.Error(apperrors.NewValidationError(400, "invalid dynamic_id"))
return
}
if err := s.FeedBack(ctx, req.FeedBack, dynamicID); err != nil {
if err := s.Verify(ctx, req, dynamicID); err != nil {
_ = ctx.Error(err)
return
} else {
Expand Down
6 changes: 4 additions & 2 deletions internal/app/api/idl/bilibili_picture.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,10 @@ type BilibiliPictureLatestReq struct {
TopicID int `form:"topic_id"`
}

type BilibiliPictureFeedbackReq struct {
type BilibiliPictureVerifyReq struct {
DynamicIDStr string `json:"dynamic_id_str"`
FeedBack DynamicFeedback `json:"feedback"`
ImgID uint64 `json:"img_id"`
}
type BilibiliPictureRecommendReq struct {
Page int `form:"page,default=1" binding:"omitempty,gt=0"`
Expand Down Expand Up @@ -160,6 +161,7 @@ type BilibiliDynamicDTO struct {
Pictures BilibiliDynamicPictures `json:"pictures"`
SentAt uint64 `json:"sent_at"`
DynamicIDStr string `json:"dynamic_id_str"`
Verify bool `json:"verify"`
}
type BilibiliRandomPictures []BilibiliRandomPicture
type BilibiliRandomPicture struct {
Expand Down Expand Up @@ -211,5 +213,5 @@ type BilibiliPictureRepository interface {
Latest(page, size, topicID int) (list []*BilibiliDynamic, err error)
Recommend(from, to time.Time, page, size, topicID int) (list []*BilibiliDynamic, err error)
Random(rand float64) (list []*BilibiliPicture, err error)
FeedBack(feedback DynamicFeedback, dynamicID uint64) error
Verify(req BilibiliPictureVerifyReq, dynamicID uint64) error
}
2 changes: 1 addition & 1 deletion internal/app/api/router/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ func InitRouters(
picApi.GET("/latest", handler.BilibiliLatestPics(picService))
picApi.GET("/recommend", handler.BilibiliRecommendPics(picService))
picApi.GET("/random", handler.BilibiliRandomPic(picService))
picApi.POST("/feedback", handler.BilibiliPicFeedback(picService))
picApi.POST("/feedback", handler.BilibiliPicVerify(picService))
}
// Auth相关
authApi := r.Group("/v1/auth")
Expand Down
18 changes: 16 additions & 2 deletions internal/app/api/service/bilbil_picture.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,14 +129,21 @@ func (service *BilbilPicture) Latest(ctx context.Context, req idl.BilibiliPictur
SentAt: list[i].SentAt,
DynamicIDStr: fmt.Sprintf("%d", list[i].DynamicID),
}
verifyCount := 0
for j := range list[i].Pics {
if list[i].Pics[j].Verify {
verifyCount += 1
}
pic := idl.BilibiliDynamicPicture{
ImgSrc: list[i].Pics[j].ImgSrc,
ImgID: list[i].Pics[j].ID,
}
pic.BilibiliPictureAttr = list[i].Pics[j].ImgAttr
dto.Pictures = append(dto.Pictures, pic)
}
if verifyCount == len(list[i].Pics) {
dto.Verify = true
}
resp.Result = append(resp.Result, dto)
}
return &resp, nil
Expand All @@ -160,14 +167,21 @@ func (service *BilbilPicture) Recommend(ctx context.Context, req idl.BilibiliPic
SentAt: list[i].SentAt,
DynamicIDStr: fmt.Sprintf("%d", list[i].DynamicID),
}
verifyCount := 0
for j := range list[i].Pics {
if list[i].Pics[j].Verify {
verifyCount += 1
}
pic := idl.BilibiliDynamicPicture{
ImgSrc: list[i].Pics[j].ImgSrc,
ImgID: list[i].Pics[j].ID,
}
pic.BilibiliPictureAttr = list[i].Pics[j].ImgAttr
dto.Pictures = append(dto.Pictures, pic)
}
if verifyCount == len(list[i].Pics) {
dto.Verify = true
}
resp.Result = append(resp.Result, dto)
}
return &resp, nil
Expand Down Expand Up @@ -230,8 +244,8 @@ func (service *BilbilPicture) Random(ctx context.Context) (*idl.BilibiliPictureR
return resp, nil
}

func (service *BilbilPicture) FeedBack(ctx context.Context, feedback idl.DynamicFeedback, dynamicID uint64) error {
func (service *BilbilPicture) Verify(ctx context.Context, req idl.BilibiliPictureVerifyReq, dynamicID uint64) error {
tx := service.db.WithContext(ctx)
picRepository := repository.NewBilibiliPicture(tx)
return picRepository.FeedBack(feedback, dynamicID)
return picRepository.Verify(req, dynamicID)
}
49 changes: 29 additions & 20 deletions internal/repository/bilibili_picture.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ func (impl *BilibiliPictureMysqlImpl) FindMaxDynamicID(topicName string) (*uint6

func (impl *BilibiliPictureMysqlImpl) FindAllByPubDate(from, to time.Time, page, size int64) (list []*idl.BilibiliDynamic, err error) {
err = impl.tx.Table(idl.BilibiliDynamic{}.TableName()).
Where("sent_at >= ? AND sent_at <= ?", from.Unix(), to.Unix()).
Where("sent_at >= ? AND sent_at <= ? AND pictures_num > 0", from.Unix(), to.Unix()).
Select("dynamic_id").
Offset(int((page - 1) * size)).Limit(int(size)).
Order("sent_at DESC").
Expand All @@ -105,10 +105,10 @@ func (impl *BilibiliPictureMysqlImpl) Latest(page, size, topicID int) (list []*i
if offset < 0 {
offset = -1
}
err = conn.Where("pictures_num <> 0").Select("dynamic_id,sent_at").
err = conn.Where("pictures_num > 0").Select("dynamic_id,sent_at").
Order("sent_at DESC").
Offset(offset).
Limit(size).Preload("Pics").Find(&list).Error
Limit(size).Preload("Pics", "feedback = ?", 0).Find(&list).Error
if err != nil {
return nil, err
}
Expand All @@ -125,10 +125,10 @@ func (impl *BilibiliPictureMysqlImpl) Recommend(from, to time.Time, page, size,
offset = -1
}
err = conn.Select("dynamic_id,sent_at").
Where("sent_at >= ? AND sent_at <= ? AND pictures_num <> 0", from.Unix(), to.Unix()).
Where("sent_at >= ? AND sent_at <= ? AND pictures_num > 0", from.Unix(), to.Unix()).
Order("favor DESC").
Offset(offset).
Limit(size).Preload("Pics").Find(&list).Error
Limit(size).Preload("Pics", "feedback = ?", 0).Find(&list).Error
if err != nil {
return nil, err
}
Expand All @@ -147,7 +147,7 @@ func (impl *BilibiliPictureMysqlImpl) Random(rand float64) (list []*idl.Bilibili
return nil, err
}
offset := math.Floor((pair.MaxId - pair.MinId) * rand)
err = conn.Where("id >= ?", uint64(pair.MinId+offset)).
err = conn.Where("id >= ? AND feedback = 0", uint64(pair.MinId+offset)).
Select("id,dynamic_id,img_src,img_attr,verify").
Preload("Dynamic").Limit(5).Find(&list).Error
if err != nil {
Expand All @@ -156,18 +156,27 @@ func (impl *BilibiliPictureMysqlImpl) Random(rand float64) (list []*idl.Bilibili
return list, nil
}

func (impl *BilibiliPictureMysqlImpl) FeedBack(feedback idl.DynamicFeedback, dynamicID uint64) error {
var dynamic idl.BilibiliDynamic
err := impl.tx.Table(idl.BilibiliDynamic{}.TableName()).
Where("dynamic_id = ?", dynamicID).
Select("verify").First(&dynamic).Error
if err != nil {
return err
}
if dynamic.Verify {
return nil
}
return impl.tx.Table(idl.BilibiliDynamic{}.TableName()).
Where("dynamic_id = ?", dynamicID).
UpdateColumn("feedback", feedback).Error
func (impl *BilibiliPictureMysqlImpl) Verify(req idl.BilibiliPictureVerifyReq, dynamicID uint64) error {
return impl.tx.Transaction(func(_tx *gorm.DB) error {
conn := _tx.Table(idl.BilibiliPicture{}.TableName())
if req.ImgID != 0 {
conn = conn.Where("id = ?", req.ImgID)
} else {
conn = conn.Where("dynamic_id = ?", dynamicID)
}
updates := map[string]interface{}{
"feedback": req.FeedBack,
"verify": true,
}
conn = conn.Where("verify = ?", false).Updates(&updates)
if conn.Error != nil {
return conn.Error
}
if conn.RowsAffected == 0 || req.FeedBack == 0 {
return nil
}
return _tx.Table(idl.BilibiliDynamic{}.TableName()).
Where("dynamic_id = ?", dynamicID).
UpdateColumn("pictures_num", gorm.Expr("pictures_num - ?", conn.RowsAffected)).Error
})
}

0 comments on commit 0199e6a

Please sign in to comment.