-
Notifications
You must be signed in to change notification settings - Fork 0
/
web.go
137 lines (127 loc) · 3.67 KB
/
web.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package main
import (
"net/http"
"strconv"
"github.com/gin-gonic/gin"
)
// getTasksWeb returns all the current tasks of the requested user as a json array
func getTasksWeb(c *gin.Context) {
user := c.Param("user")
taskDB, err := openTaskDB()
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
tasks, err := getTasks(user, taskDB)
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
c.IndentedJSON(http.StatusOK, tasks)
}
// getTaskCount returns the count of the requested user's complete and incomplete tasks as a json
func getTaskCounts(c *gin.Context) {
user := c.Param("user")
taskDB, err := openTaskDB()
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
tasksCount, err := getCompleteAndIncompleteCount(user, taskDB)
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
c.IndentedJSON(http.StatusOK, tasksCount)
}
// getBurndown returns an array of the requested user's active tasks counts with timestamps as a json array
func getBurndown(c *gin.Context) {
user := c.Param("user")
taskDB, err := openTaskDB()
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
burndown, err := getTimeCounts(user, taskDB)
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
c.IndentedJSON(http.StatusOK, burndown)
}
type CreateTaskInput struct {
User string `json:"user" binding:"required"`
Task string `json:"task" binding:"required"`
}
// postNewTask expects a json containing the user and the task, checks that it contains both of those, inserts the task into the database, and returns the task id assigned.
func postNewTask(c *gin.Context) {
var input CreateTaskInput
if err := c.ShouldBindJSON(&input); err != nil {
c.AbortWithError(http.StatusBadRequest, err)
return
}
taskDB, err := openTaskDB()
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
id, err := addTask(input.User, input.Task, taskDB)
c.IndentedJSON(http.StatusOK, gin.H{"taskId": id})
}
// deleteTaskWeb deletes the requested task from the database and returns the id of the deleted task
func deleteTaskWeb(c *gin.Context) {
id, err := strconv.ParseInt(c.Param("id"), 0, 64)
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
taskDB, err := openTaskDB()
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
err = deleteTask(id, taskDB)
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
c.IndentedJSON(http.StatusOK, id)
}
// updateTaskComplete updates the status of the task with id matching the given id to complete
func updateTaskComplete(c *gin.Context) {
id, err := strconv.ParseInt(c.Param("id"), 0, 64)
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
taskDB, err := openTaskDB()
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
err = markTaskComplete(id, taskDB)
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
c.IndentedJSON(http.StatusOK, id)
}
// updateTaskIncomplete updates the status of the task with id matching the given id to incomplete
func updateTaskIncomplete(c *gin.Context) {
id, err := strconv.ParseInt(c.Param("id"), 0, 64)
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
taskDB, err := openTaskDB()
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
err = markTaskIncomplete(id, taskDB)
if err != nil {
c.AbortWithError(http.StatusInternalServerError, err)
return
}
c.IndentedJSON(http.StatusOK, id)
}