|
|
|
@@ -0,0 +1,62 @@ |
|
|
|
package models |
|
|
|
|
|
|
|
import "code.gitea.io/gitea/modules/timeutil" |
|
|
|
|
|
|
|
type DatasetStar struct { |
|
|
|
ID int64 `xorm:"pk autoincr"` |
|
|
|
UID int64 `xorm:"UNIQUE(s)"` |
|
|
|
DatasetID int64 `xorm:"UNIQUE(s)"` |
|
|
|
CreatedUnix timeutil.TimeStamp `xorm:"created"` |
|
|
|
} |
|
|
|
|
|
|
|
// StarRepo or unstar repository. |
|
|
|
func StarDataset(userID, datasetID int64, star bool) error { |
|
|
|
sess := x.NewSession() |
|
|
|
defer sess.Close() |
|
|
|
|
|
|
|
if err := sess.Begin(); err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
|
|
|
|
if star { |
|
|
|
if isDatasetStaring(sess, userID, datasetID) { |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
if _, err := sess.Insert(&DatasetStar{UID: userID, DatasetID: datasetID}); err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
if _, err := sess.Exec("UPDATE `dataset` SET num_stars = num_stars + 1 WHERE id = ?", datasetID); err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
if _, err := sess.Exec("UPDATE `user` SET num_dataset_stars = num_dataset_stars + 1 WHERE id = ?", userID); err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
} else { |
|
|
|
if !isDatasetStaring(sess, userID, datasetID) { |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
if _, err := sess.Delete(&DatasetStar{0, userID, datasetID, 0}); err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
if _, err := sess.Exec("UPDATE `dataset` SET num_stars = num_stars - 1 WHERE id = ?", datasetID); err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
if _, err := sess.Exec("UPDATE `user` SET num_dataset_stars = num_dataset_stars - 1 WHERE id = ?", userID); err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return sess.Commit() |
|
|
|
} |
|
|
|
|
|
|
|
func IsDatasetStaring(userID, datasetID int64) bool { |
|
|
|
|
|
|
|
return isDatasetStaring(x, userID, datasetID) |
|
|
|
} |
|
|
|
|
|
|
|
func isDatasetStaring(e Engine, userID, datasetID int64) bool { |
|
|
|
has, _ := e.Get(&DatasetStar{0, userID, datasetID, 0}) |
|
|
|
return has |
|
|
|
} |