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 IsDatasetStaringByRepoId(userID, repoID int64) bool { dataset, _ := GetDatasetByRepo(&Repository{ID: repoID}) if dataset == nil { return false } return isDatasetStaring(x, userID, dataset.ID) } 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 } func GetDatasetIdsStarByUser(userID int64) []int64 { var datasets []int64 _ = x.Table("dataset_star").Where("uid=?", userID). Cols("dataset_star.dataset_id").Find(&datasets) return datasets }