Kanban bucket limits (#652)
Fix integration tests Generate swagger docs Add test for moving a task between buckets Add check for bucket limit when updating a task Add fixture to ensure a bucket with a high limit will never exceed the limit Refactor bucket limit check into seperate function Add test for creating and fix Fix unexported field Add error in case a task was added to a bucket which has its limit already exceeded Add migration to add new task field Add limit field to buckets Co-authored-by: kolaente <k@knt.li> Reviewed-on: https://kolaente.dev/vikunja/api/pulls/652
This commit is contained in:
@ -1334,3 +1334,32 @@ func (err ErrCannotRemoveLastBucket) HTTPError() web.HTTPError {
|
||||
Message: "You cannot remove the last bucket on this list.",
|
||||
}
|
||||
}
|
||||
|
||||
// ErrBucketLimitExceeded represents an error where a task is being created or moved to a bucket which has its limit already exceeded.
|
||||
type ErrBucketLimitExceeded struct {
|
||||
BucketID int64
|
||||
Limit int64
|
||||
TaskID int64 // may be 0
|
||||
}
|
||||
|
||||
// IsErrBucketLimitExceeded checks if an error is ErrBucketLimitExceeded.
|
||||
func IsErrBucketLimitExceeded(err error) bool {
|
||||
_, ok := err.(ErrBucketLimitExceeded)
|
||||
return ok
|
||||
}
|
||||
|
||||
func (err ErrBucketLimitExceeded) Error() string {
|
||||
return fmt.Sprintf("Cannot add a task to this bucket because it would exceed the limit [BucketID: %d, Limit: %d, TaskID: %d]", err.BucketID, err.Limit, err.TaskID)
|
||||
}
|
||||
|
||||
// ErrCodeBucketLimitExceeded holds the unique world-error code of this error
|
||||
const ErrCodeBucketLimitExceeded = 10004
|
||||
|
||||
// HTTPError holds the http error description
|
||||
func (err ErrBucketLimitExceeded) HTTPError() web.HTTPError {
|
||||
return web.HTTPError{
|
||||
HTTPCode: http.StatusPreconditionFailed,
|
||||
Code: ErrCodeBucketLimitExceeded,
|
||||
Message: "You cannot add the task to this bucket as it already exceeded the limit of tasks it can hold.",
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user