Add endpoint to get a single task (#106)
This commit is contained in:
@ -330,9 +330,18 @@ type LabelTaskBulk struct {
|
||||
// @Failure 500 {object} models.Message "Internal error"
|
||||
// @Router /tasks/{taskID}/labels/bulk [post]
|
||||
func (ltb *LabelTaskBulk) Create(a web.Auth) (err error) {
|
||||
task, err := GetTaskByID(ltb.TaskID)
|
||||
task, err := GetTaskByIDSimple(ltb.TaskID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
labels, _, _, err := getLabelsByTaskIDs(&LabelByTaskIDsOptions{
|
||||
TaskIDs: []int64{ltb.TaskID},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, l := range labels {
|
||||
task.Labels = append(task.Labels, &l.Label)
|
||||
}
|
||||
return task.updateTaskLabels(a, ltb.Labels)
|
||||
}
|
||||
|
@ -284,9 +284,17 @@ type BulkAssignees struct {
|
||||
// @Failure 500 {object} models.Message "Internal error"
|
||||
// @Router /tasks/{taskID}/assignees/bulk [post]
|
||||
func (ba *BulkAssignees) Create(a web.Auth) (err error) {
|
||||
task, err := GetTaskByID(ba.TaskID) // We need to use the full method here because we need all current assignees.
|
||||
task, err := GetTaskByIDSimple(ba.TaskID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
assignees, err := getRawTaskAssigneesForTasks([]int64{task.ID})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, a := range assignees {
|
||||
task.Assignees = append(task.Assignees, &a.User)
|
||||
}
|
||||
|
||||
return task.updateTaskAssignees(ba.Assignees)
|
||||
}
|
||||
|
@ -339,44 +339,6 @@ func GetTaskSimple(t *Task) (task Task, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
// GetTaskByID returns all tasks a list has
|
||||
func GetTaskByID(listTaskID int64) (listTask Task, err error) {
|
||||
listTask, err = GetTaskByIDSimple(listTaskID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
u, err := GetUserByID(listTask.CreatedByID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
listTask.CreatedBy = u
|
||||
|
||||
// Get assignees
|
||||
taskAssignees, err := getRawTaskAssigneesForTasks([]int64{listTaskID})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, u := range taskAssignees {
|
||||
if u != nil {
|
||||
listTask.Assignees = append(listTask.Assignees, &u.User)
|
||||
}
|
||||
}
|
||||
|
||||
// Get task labels
|
||||
taskLabels, _, _, err := getLabelsByTaskIDs(&LabelByTaskIDsOptions{
|
||||
TaskIDs: []int64{listTaskID},
|
||||
})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, label := range taskLabels {
|
||||
listTask.Labels = append(listTask.Labels, &label.Label)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// GetTasksByIDs returns all tasks for a list of ids
|
||||
func (bt *BulkTask) GetTasksByIDs() (err error) {
|
||||
for _, id := range bt.IDs {
|
||||
@ -636,7 +598,7 @@ func (t *Task) Create(a web.Auth) (err error) {
|
||||
// @Router /tasks/{id} [post]
|
||||
func (t *Task) Update() (err error) {
|
||||
// Check if the task exists
|
||||
ot, err := GetTaskByID(t.ID)
|
||||
ot, err := GetTaskByIDSimple(t.ID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@ -854,12 +816,6 @@ func (t *Task) updateReminders(reminders []int64) (err error) {
|
||||
// @Router /tasks/{id} [delete]
|
||||
func (t *Task) Delete() (err error) {
|
||||
|
||||
// Check if it exists
|
||||
_, err = GetTaskByID(t.ID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if _, err = x.ID(t.ID).Delete(Task{}); err != nil {
|
||||
return err
|
||||
}
|
||||
@ -874,3 +830,38 @@ func (t *Task) Delete() (err error) {
|
||||
err = updateListLastUpdated(&List{ID: t.ListID})
|
||||
return
|
||||
}
|
||||
|
||||
// ReadOne gets one task by its ID
|
||||
// @Summary Get one task
|
||||
// @Description Returns one task by its ID
|
||||
// @tags task
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param ID path int true "The task ID"
|
||||
// @Security JWTKeyAuth
|
||||
// @Success 200 {object} models.Task "The task"
|
||||
// @Failure 404 {object} models.Message "Task not found"
|
||||
// @Failure 500 {object} models.Message "Internal error"
|
||||
// @Router /tasks/all [get]
|
||||
func (t *Task) ReadOne() (err error) {
|
||||
|
||||
taskMap := make(map[int64]*Task, 1)
|
||||
taskMap[t.ID] = &Task{}
|
||||
*taskMap[t.ID], err = GetTaskByIDSimple(t.ID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
tasks, err := addMoreInfoToTasks(taskMap)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if len(tasks) == 0 {
|
||||
return ErrTaskDoesNotExist{t.ID}
|
||||
}
|
||||
|
||||
*t = *tasks[0]
|
||||
|
||||
return
|
||||
}
|
||||
|
@ -24,6 +24,8 @@ import (
|
||||
func TestTask_Create(t *testing.T) {
|
||||
//assert.NoError(t, LoadFixtures())
|
||||
|
||||
// TODO: This test needs refactoring
|
||||
|
||||
// Fake list task
|
||||
listtask := Task{
|
||||
Text: "Lorem",
|
||||
@ -48,11 +50,6 @@ func TestTask_Create(t *testing.T) {
|
||||
err = listtask.Update()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Check if it was updated
|
||||
li, err := GetTaskByID(listtask.ID)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, li.Text, "Test34")
|
||||
|
||||
// Delete the task
|
||||
allowed, _ = listtask.CanDelete(doer)
|
||||
assert.True(t, allowed)
|
||||
@ -61,7 +58,7 @@ func TestTask_Create(t *testing.T) {
|
||||
|
||||
// Delete a nonexistant task
|
||||
listtask.ID = 0
|
||||
err = listtask.Delete()
|
||||
_, err = listtask.CanDelete(doer) // The check if the task exists happens in CanDelete
|
||||
assert.Error(t, err)
|
||||
assert.True(t, IsErrTaskDoesNotExist(err))
|
||||
|
||||
@ -106,3 +103,18 @@ func TestUpdateDone(t *testing.T) {
|
||||
assert.Equal(t, int64(0), oldTask.DoneAtUnix)
|
||||
})
|
||||
}
|
||||
|
||||
func TestTask_ReadOne(t *testing.T) {
|
||||
t.Run("default", func(t *testing.T) {
|
||||
task := &Task{ID: 1}
|
||||
err := task.ReadOne()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "task #1", task.Text)
|
||||
})
|
||||
t.Run("nonexisting", func(t *testing.T) {
|
||||
task := &Task{ID: 99999}
|
||||
err := task.ReadOne()
|
||||
assert.Error(t, err)
|
||||
assert.True(t, IsErrTaskDoesNotExist(err))
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user