You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

dataset_star.go 1.7 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package models
  2. import "code.gitea.io/gitea/modules/timeutil"
  3. type DatasetStar struct {
  4. ID int64 `xorm:"pk autoincr"`
  5. UID int64 `xorm:"UNIQUE(s)"`
  6. DatasetID int64 `xorm:"UNIQUE(s)"`
  7. CreatedUnix timeutil.TimeStamp `xorm:"created"`
  8. }
  9. // StarRepo or unstar repository.
  10. func StarDataset(userID, datasetID int64, star bool) error {
  11. sess := x.NewSession()
  12. defer sess.Close()
  13. if err := sess.Begin(); err != nil {
  14. return err
  15. }
  16. if star {
  17. if isDatasetStaring(sess, userID, datasetID) {
  18. return nil
  19. }
  20. if _, err := sess.Insert(&DatasetStar{UID: userID, DatasetID: datasetID}); err != nil {
  21. return err
  22. }
  23. if _, err := sess.Exec("UPDATE `dataset` SET num_stars = num_stars + 1 WHERE id = ?", datasetID); err != nil {
  24. return err
  25. }
  26. if _, err := sess.Exec("UPDATE `user` SET num_dataset_stars = num_dataset_stars + 1 WHERE id = ?", userID); err != nil {
  27. return err
  28. }
  29. } else {
  30. if !isDatasetStaring(sess, userID, datasetID) {
  31. return nil
  32. }
  33. if _, err := sess.Delete(&DatasetStar{0, userID, datasetID, 0}); err != nil {
  34. return err
  35. }
  36. if _, err := sess.Exec("UPDATE `dataset` SET num_stars = num_stars - 1 WHERE id = ?", datasetID); err != nil {
  37. return err
  38. }
  39. if _, err := sess.Exec("UPDATE `user` SET num_dataset_stars = num_dataset_stars - 1 WHERE id = ?", userID); err != nil {
  40. return err
  41. }
  42. }
  43. return sess.Commit()
  44. }
  45. func IsDatasetStaring(userID, datasetID int64) bool {
  46. return isDatasetStaring(x, userID, datasetID)
  47. }
  48. func isDatasetStaring(e Engine, userID, datasetID int64) bool {
  49. has, _ := e.Get(&DatasetStar{0, userID, datasetID, 0})
  50. return has
  51. }