diff --git a/.bra.toml b/.bra.toml index 9650679d5..08e2ef844 100755 --- a/.bra.toml +++ b/.bra.toml @@ -11,7 +11,7 @@ watch_dirs = [ "$WORKDIR/models", "$WORKDIR/cmd", "$WORKDIR/options", - "$WORKDIR/web_src", + "$WORKDIR/public", ] # Directories to watch watch_exts = [".go", ".ini", ".less"] # Extensions to watch env_files = [] # Load env vars from files diff --git a/models/dataset.go b/models/dataset.go index 0fdbea3e1..885fb47e3 100644 --- a/models/dataset.go +++ b/models/dataset.go @@ -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 +} diff --git a/routers/dataset/dataset.go b/routers/dataset/dataset.go index 359189eda..aa8c26c6c 100644 --- a/routers/dataset/dataset.go +++ b/routers/dataset/dataset.go @@ -14,7 +14,40 @@ const ( tplCreate base.TplName = "datasets/create" ) +type ListOptions struct { + PageSize int + Page int // start from 1 +} + func MyList(ctx *context.Context) { + ctxUser := ctx.User + page := ctx.QueryInt("page") + if page <= 0 { + page = 1 + } + datasetSearchOptions := &models.SearchDatasetOptions{ + OwnerID: ctxUser.ID, + } + + var ( + datasets []*models.Dataset + count int64 + err error + ) + + datasets, count, err = models.SearchDataset(datasetSearchOptions) + if err != nil { + ctx.ServerError("SearchDatasets", err) + return + } + + // pager := context.NewPagination(int(count), opts.PageSize, page, 5) + // pager.SetDefaultParams(ctx) + // pager.AddParam(ctx, "topic", "TopicOnly") + // ctx.Data["Page"] = pager + + ctx.Data["datasets"] = datasets + ctx.Data["datasetsCount"] = count log.Debug("[dataset] mylist...\n") ctx.HTML(200, tplDataSet) } diff --git a/templates/datasets/dataset_list.tmpl b/templates/datasets/dataset_list.tmpl index b6a12ac51..f3c614980 100644 --- a/templates/datasets/dataset_list.tmpl +++ b/templates/datasets/dataset_list.tmpl @@ -1,4 +1,21 @@
{{$.i18n.Tr "org.repo_updated"}} {{TimeSinceUnix .UpdatedUnix $.i18n.Lang}}
+