user_bookmark.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package user
  2. import (
  3. "eta/eta_mini_ht_api/models"
  4. "gorm.io/gorm/clause"
  5. "time"
  6. )
  7. type Status string
  8. type SourceType string
  9. const (
  10. Marked Status = "marked"
  11. Unmark Status = "unmark"
  12. Report SourceType = "report"
  13. Chart SourceType = "chart"
  14. )
  15. type UserBookmark struct {
  16. ID int `gorm:"primaryKey;column:id;type:int(11);not null;comment:主键"`
  17. UserID int `gorm:"column:user_id;type:int(11);not null;comment:用户Id"`
  18. SourceID int `gorm:"column:source_id;type:int(11);not null;comment:资源Id"`
  19. SourceType SourceType `gorm:"column:source_type;type:enum('report','chart');not null;comment:资源类型:report-研报 chart-图表"`
  20. Status Status `gorm:"column:status;type:enum('marked','unmark');not null;comment:是否收藏 :marked-收藏 ,unmark-取消收藏"`
  21. CreatedTime time.Time `gorm:"column:created_time;type:datetime;comment:创建时间"`
  22. UpdatedTime time.Time `gorm:"column:updated_time;type:datetime;default:null;onUpdate:CURRENT_TIMESTAMP;comment:更新时间"`
  23. }
  24. func (UserBookmark) TableName() string {
  25. return "user_bookmarks"
  26. }
  27. func BookMark(templateUserId int, sourceId int, sourceType SourceType) (err error) {
  28. db := models.Main()
  29. OnConflictFunc := clause.OnConflict{
  30. Columns: []clause.Column{{Name: "source_id"}, {Name: "source_type"}},
  31. DoUpdates: clause.AssignmentColumns([]string{"status"}),
  32. }
  33. err = db.Clauses(OnConflictFunc).Create(&UserBookmark{
  34. UserID: templateUserId,
  35. SourceID: sourceId,
  36. SourceType: sourceType,
  37. Status: Marked,
  38. CreatedTime: time.Now(),
  39. }).Error
  40. return
  41. }
  42. func UnBookMark(templateUserId int, sourceId int, sourceType SourceType) (err error) {
  43. db := models.Main()
  44. err = db.Model(&UserBookmark{}).Where("user_id = ? AND source_id = ? AND source_type = ?", templateUserId, sourceId, sourceType).Update("status", Unmark).Error
  45. return
  46. }
  47. func CheckBookMarkStatus(templateUserId int, sourceId int, sourceType SourceType) (bookmark UserBookmark, err error) {
  48. db := models.Main()
  49. err = db.Model(&UserBookmark{}).Select("*").Where("user_id = ? AND source_id = ? AND source_type = ?", templateUserId, sourceId, sourceType).First(&bookmark).Error
  50. return
  51. }