From 15ea38183cc99b87006dd8767abcefe78fe1d0cd Mon Sep 17 00:00:00 2001 From: kolaente Date: Tue, 2 Sep 2025 15:49:17 +0200 Subject: [PATCH] fix: bypass Typesense in user export (#1385) --- pkg/models/export.go | 53 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/pkg/models/export.go b/pkg/models/export.go index 4c6e2185d..80f920617 100644 --- a/pkg/models/export.go +++ b/pkg/models/export.go @@ -36,6 +36,7 @@ import ( "code.vikunja.io/api/pkg/user" "code.vikunja.io/api/pkg/utils" "code.vikunja.io/api/pkg/version" + "code.vikunja.io/api/pkg/web" "xorm.io/xorm" ) @@ -127,6 +128,53 @@ func ExportUserData(s *xorm.Session, u *user.User) (err error) { }) } +func getRawTasksForExport(s *xorm.Session, projectIDs []int64, a web.Auth) (tasks []*Task, err error) { + if len(projectIDs) == 0 { + return []*Task{}, nil + } + + opts := &taskSearchOptions{ + projectIDs: projectIDs, + page: 0, + perPage: -1, + sortby: []*sortParam{{ + sortBy: taskPropertyID, + orderBy: orderAscending, + }}, + } + + hasFavoritesProject := false + for _, id := range projectIDs { + if id == FavoritesPseudoProject.ID { + hasFavoritesProject = true + break + } + } + + var dbSearcher taskSearcher = &dbTaskSearcher{ + s: s, + a: a, + hasFavoritesProject: hasFavoritesProject, + } + + tasks, _, err = dbSearcher.Search(opts) + if err != nil { + return nil, err + } + + taskMap := make(map[int64]*Task, len(tasks)) + for _, t := range tasks { + taskMap[t.ID] = t + } + + err = addMoreInfoToTasks(s, taskMap, a, nil, nil) + if err != nil { + return nil, err + } + + return tasks, nil +} + func exportProjectsAndTasks(s *xorm.Session, u *user.User, wr *zip.Writer) (taskIDs []int64, err error) { // Get all projects @@ -179,10 +227,7 @@ func exportProjectsAndTasks(s *xorm.Session, u *user.User, wr *zip.Writer) (task viewIDs = append(viewIDs, v.ID) } - tasks, _, _, err := getTasksForProjects(s, rawProjects, u, &taskSearchOptions{ - page: 0, - perPage: -1, - }, nil) + tasks, err := getRawTasksForExport(s, projectIDs, u) if err != nil { return taskIDs, err }