1
0

Add endpoint to get a single task (#106)

This commit is contained in:
konrad
2019-11-02 20:33:18 +00:00
parent ed4c17892e
commit 9be5ab248c
8 changed files with 136 additions and 191 deletions

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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
}

View File

@ -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))
})
}