package models import ( "strconv" "strings" "code.gitea.io/gitea/modules/timeutil" ) type DatasetReference struct { ID int64 `xorm:"pk autoincr"` RepoID int64 `xorm:"INDEX unique"` DatasetID string `xorm:"TEXT"` CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` } func GetDatasetIdsByRepoID(repoID int64) []int64 { var datasets []int64 var datasetIds []string _ = x.Table("dataset_reference").Where("repo_id=?", repoID). Cols("dataset_reference.dataset_id").Find(&datasetIds) if len(datasetIds) > 0 { for _, datasetIdStr := range strings.Split(datasetIds[0], ",") { datasetId, err := strconv.ParseInt(datasetIdStr, 10, 64) if err != nil { continue } datasets = append(datasets, datasetId) } } return datasets } func HasReferenceDataset(repoID int64) bool { var datasetIds []string _ = x.Table("dataset_reference").Where("repo_id=?", repoID). Cols("dataset_reference.dataset_id").Find(&datasetIds) return len(datasetIds) > 0 } func getReferenceDatasetStr(repoID int64) string { var datasetIds []string _ = x.Table("dataset_reference").Where("repo_id=?", repoID). Cols("dataset_reference.dataset_id").Find(&datasetIds) if len(datasetIds) > 0 { return datasetIds[0] } return "" } func deleteDatasetIdsByRepoID(repoID int64) error { _, err := x.Where("repo_id", repoID).Delete(new(DatasetReference)) return err } func NewDatasetIdsByRepoID(repoID int64, datasetIds []int64) error { if len(datasetIds) == 0 { //关联数据集数组为空,不需要处理 return nil } var datasetsStrArray []string for _, datasetId := range datasetIds { datasetsStrArray = append(datasetsStrArray, strconv.FormatInt(datasetId, 10)) } newDatasetStr := strings.Join(datasetsStrArray, ",") oldDatasetStr := getReferenceDatasetStr(repoID) if newDatasetStr == oldDatasetStr { //关联数据集无变化,不需要处理 return nil } if oldDatasetStr != "" { //已经存在关联数据集 err := deleteDatasetIdsByRepoID(repoID) if err != nil { return err } } datasetReference := DatasetReference{ DatasetID: newDatasetStr, RepoID: repoID, } _, err := x.Insert(datasetReference) return err }