|
|
@@ -4,13 +4,27 @@ import ( |
|
|
|
"fmt" |
|
|
|
|
|
|
|
"code.gitea.io/gitea/modules/timeutil" |
|
|
|
"xorm.io/builder" |
|
|
|
) |
|
|
|
|
|
|
|
// Issue represents an issue or pull request of repository. |
|
|
|
const ( |
|
|
|
DatasetStatusPrivate int = iota |
|
|
|
DatasetStatusPublic |
|
|
|
DatasetStatusDeleted |
|
|
|
) |
|
|
|
|
|
|
|
type DatasetList []*Dataset |
|
|
|
type SearchDatasetOptions struct { |
|
|
|
ListOptions |
|
|
|
Keyword string |
|
|
|
OwnerID int64 |
|
|
|
IsPublic bool |
|
|
|
} |
|
|
|
|
|
|
|
type Dataset struct { |
|
|
|
ID int64 `xorm:"pk autoincr"` |
|
|
|
Title string `xorm:"INDEX NOT NULL"` |
|
|
|
Status int32 `xorm:"INDEX"` |
|
|
|
Status int32 `xorm:"INDEX"` // normal_private: 0, pulbic: 1, is_delete: 2 |
|
|
|
Category string |
|
|
|
Description string `xorm:"TEXT"` |
|
|
|
DownloadTimes int64 |
|
|
@@ -50,3 +64,48 @@ func AddDatasetAttachments(DatasetID int64, attachmentUUIDs []string) (err error |
|
|
|
|
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
func SearchDataset(opts *SearchDatasetOptions) (DatasetList, int64, error) { |
|
|
|
cond := SearchDatasetCondition(opts) |
|
|
|
return SearchDatasetByCondition(opts, cond) |
|
|
|
} |
|
|
|
|
|
|
|
func SearchDatasetCondition(opts *SearchDatasetOptions) builder.Cond { |
|
|
|
var cond = builder.NewCond() |
|
|
|
cond = cond.And(builder.Eq{"user_id": opts.OwnerID}) |
|
|
|
|
|
|
|
if opts.IsPublic { |
|
|
|
cond = cond.And(builder.Eq{"status": DatasetStatusPublic}) |
|
|
|
} else { |
|
|
|
cond = cond.And(builder.Neq{"status": DatasetStatusDeleted}) |
|
|
|
} |
|
|
|
|
|
|
|
return cond |
|
|
|
} |
|
|
|
|
|
|
|
func SearchDatasetByCondition(opts *SearchDatasetOptions, cond builder.Cond) (DatasetList, int64, error) { |
|
|
|
if opts.Page <= 0 { |
|
|
|
opts.Page = 1 |
|
|
|
} |
|
|
|
|
|
|
|
var err error |
|
|
|
sess := x.NewSession() |
|
|
|
defer sess.Close() |
|
|
|
|
|
|
|
// count, err := sess.Where(cond).Count(new(DatasetList)) |
|
|
|
|
|
|
|
// if err != nil { |
|
|
|
// return nil, 0, fmt.Errorf("Count: %v", err) |
|
|
|
// } |
|
|
|
|
|
|
|
repos := make(DatasetList, 0, opts.PageSize) |
|
|
|
sess.Where(cond) |
|
|
|
if opts.PageSize > 0 { |
|
|
|
sess.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize) |
|
|
|
} |
|
|
|
if err = sess.Find(&repos); err != nil { |
|
|
|
return nil, 0, fmt.Errorf("Dataset: %v", err) |
|
|
|
} |
|
|
|
|
|
|
|
return repos, 0, nil |
|
|
|
} |