diff --git a/docs/content/doc/usage/errors.md b/docs/content/doc/usage/errors.md index 3e6650ec5..883426323 100644 --- a/docs/content/doc/usage/errors.md +++ b/docs/content/doc/usage/errors.md @@ -135,3 +135,10 @@ This document describes the different errors Vikunja can return. | 10002 | 400 | The bucket does not belong to that list. | | 10003 | 412 | You cannot remove the last bucket on a list. | | 10004 | 412 | You cannot add the task to this bucket as it already exceeded the limit of tasks it can hold. | + +## Saved Filters + +| ErrorCode | HTTP Status Code | Description | +|-----------|------------------|-------------| +| 11001 | 404 | The saved filter does not exist. | +| 11002 | 412 | Saved filters are not available for link shares. | diff --git a/pkg/models/error.go b/pkg/models/error.go index 1e95ce93d..f6786b57e 100644 --- a/pkg/models/error.go +++ b/pkg/models/error.go @@ -1363,3 +1363,62 @@ func (err ErrBucketLimitExceeded) HTTPError() web.HTTPError { Message: "You cannot add the task to this bucket as it already exceeded the limit of tasks it can hold.", } } + +// ============= +// Saved Filters +// ============= + +// ErrSavedFilterDoesNotExist represents an error where a kanban bucket does not exist +type ErrSavedFilterDoesNotExist struct { + SavedFilterID int64 +} + +// IsErrSavedFilterDoesNotExist checks if an error is ErrSavedFilterDoesNotExist. +func IsErrSavedFilterDoesNotExist(err error) bool { + _, ok := err.(ErrSavedFilterDoesNotExist) + return ok +} + +func (err ErrSavedFilterDoesNotExist) Error() string { + return fmt.Sprintf("Saved filter does not exist [SavedFilterID: %d]", err.SavedFilterID) +} + +// ErrCodeSavedFilterDoesNotExist holds the unique world-error code of this error +const ErrCodeSavedFilterDoesNotExist = 11001 + +// HTTPError holds the http error description +func (err ErrSavedFilterDoesNotExist) HTTPError() web.HTTPError { + return web.HTTPError{ + HTTPCode: http.StatusNotFound, + Code: ErrCodeSavedFilterDoesNotExist, + Message: "This saved filter does not exist.", + } +} + +// ErrSavedFilterNotAvailableForLinkShare represents an error where a kanban bucket does not exist +type ErrSavedFilterNotAvailableForLinkShare struct { + SavedFilterID int64 + LinkShareID int64 +} + +// IsErrSavedFilterNotAvailableForLinkShare checks if an error is ErrSavedFilterNotAvailableForLinkShare. +func IsErrSavedFilterNotAvailableForLinkShare(err error) bool { + _, ok := err.(ErrSavedFilterNotAvailableForLinkShare) + return ok +} + +func (err ErrSavedFilterNotAvailableForLinkShare) Error() string { + return fmt.Sprintf("Saved filters are not available for link shares [SavedFilterID: %d, LinkShareID: %d]", err.SavedFilterID, err.LinkShareID) +} + +// ErrCodeSavedFilterNotAvailableForLinkShare holds the unique world-error code of this error +const ErrCodeSavedFilterNotAvailableForLinkShare = 11002 + +// HTTPError holds the http error description +func (err ErrSavedFilterNotAvailableForLinkShare) HTTPError() web.HTTPError { + return web.HTTPError{ + HTTPCode: http.StatusPreconditionFailed, + Code: ErrCodeSavedFilterNotAvailableForLinkShare, + Message: "Saved filters are not available for link shares.", + } +} diff --git a/pkg/models/saved_filters_rights.go b/pkg/models/saved_filters_rights.go index 687fa38bb..ee499f79a 100644 --- a/pkg/models/saved_filters_rights.go +++ b/pkg/models/saved_filters_rights.go @@ -47,7 +47,7 @@ func (s *SavedFilter) CanCreate(auth web.Auth) (bool, error) { func (s *SavedFilter) canDoFilter(auth web.Auth) (can bool, err error) { // Link shares can't view or modify saved filters, therefore we can error out right away if _, is := auth.(*LinkSharing); is { - return false, nil + return false, ErrSavedFilterNotAvailableForLinkShare{LinkShareID: auth.GetID(), SavedFilterID: s.ID} } sf, err := getSavedFilterSimpleByID(s.ID)