chore(caldav): refactor fetching projects
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
kolaente 2024-10-30 08:37:21 +01:00
parent 3ce3727a5e
commit d081cf80fc
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
3 changed files with 31 additions and 26 deletions

View File

@ -23,7 +23,6 @@ import (
"time"
"code.vikunja.io/api/pkg/models"
"code.vikunja.io/api/pkg/user"
"code.vikunja.io/api/pkg/utils"
)

View File

@ -330,21 +330,11 @@ func (p *Project) ReadOne(s *xorm.Session, a web.Auth) (err error) {
// GetProjectSimpleByID gets a project with only the basic items, aka no tasks or user objects. Returns an error if the project does not exist.
func GetProjectSimpleByID(s *xorm.Session, projectID int64) (project *Project, err error) {
project = &Project{}
if projectID < 1 {
return nil, ErrProjectDoesNotExist{ID: projectID}
}
exists, err := s.
Where("id = ?", projectID).
OrderBy("position").
Get(project)
if err != nil {
return
}
project, exists, err := getProjectSimple(s, builder.Eq{"id": projectID})
if !exists {
return nil, ErrProjectDoesNotExist{ID: projectID}
}
@ -352,6 +342,15 @@ func GetProjectSimpleByID(s *xorm.Session, projectID int64) (project *Project, e
return
}
func getProjectSimple(s *xorm.Session, cond builder.Cond) (project *Project, exists bool, err error) {
project = &Project{}
exists, err = s.
Where(cond).
OrderBy("position").
Get(project)
return
}
// GetProjectSimplByTaskID gets a project by a task id
func GetProjectSimplByTaskID(s *xorm.Session, taskID int64) (l *Project, err error) {
// We need to re-init our project object, because otherwise xorm creates a "where for every item in that project object,

View File

@ -18,18 +18,18 @@ package caldav
import (
"bytes"
"errors"
"fmt"
"io"
"reflect"
"strconv"
"strings"
"code.vikunja.io/api/pkg/db"
caldav2 "code.vikunja.io/api/pkg/caldav"
"code.vikunja.io/api/pkg/log"
"code.vikunja.io/api/pkg/models"
"code.vikunja.io/api/pkg/user"
"code.vikunja.io/api/pkg/web/handler"
"github.com/labstack/echo/v4"
"github.com/samedi/caldav-go"
"github.com/samedi/caldav-go/lib"
@ -45,11 +45,8 @@ func getBasicAuthUserFromContext(c echo.Context) (*user.User, error) {
// ProjectHandler returns all tasks from a project
func ProjectHandler(c echo.Context) error {
projectID, err := getIntParam(c, "project")
project, err := getProjectFromParam(c)
if err != nil {
if errors.Is(err, &strconv.NumError{}) {
return echo.ErrBadRequest
}
return err
}
@ -59,7 +56,7 @@ func ProjectHandler(c echo.Context) error {
}
storage := &VikunjaCaldavProjectStorage{
project: &models.ProjectWithTasksAndBuckets{Project: models.Project{ID: projectID}},
project: project,
user: u,
}
@ -89,7 +86,7 @@ func ProjectHandler(c echo.Context) error {
// TaskHandler is the handler which manages updating/deleting a single task
func TaskHandler(c echo.Context) error {
projectID, err := getIntParam(c, "project")
project, err := getProjectFromParam(c)
if err != nil {
return err
}
@ -103,7 +100,7 @@ func TaskHandler(c echo.Context) error {
taskUID := strings.TrimSuffix(c.Param("task"), ".ics")
storage := &VikunjaCaldavProjectStorage{
project: &models.ProjectWithTasksAndBuckets{Project: models.Project{ID: projectID}},
project: project,
task: &models.Task{UID: taskUID},
user: u,
}
@ -172,15 +169,25 @@ func EntryHandler(c echo.Context) error {
return nil
}
func getIntParam(c echo.Context, paramName string) (intParam int64, err error) {
param := c.Param(paramName)
func getProjectFromParam(c echo.Context) (project *models.ProjectWithTasksAndBuckets, err error) {
param := c.Param("project")
if param == "" {
return 0, nil
return nil, echo.ErrBadRequest
}
intParam, err = strconv.ParseInt(param, 10, 64)
s := db.NewSession()
defer s.Close()
intParam, err := strconv.ParseInt(param, 10, 64)
if err != nil {
return 0, handler.HandleHTTPError(err)
return nil, err
}
p, err := models.GetProjectSimpleByID(s, intParam)
if err != nil {
return nil, err
}
project = &models.ProjectWithTasksAndBuckets{Project: *p}
return
}