-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
105 lines (83 loc) · 2.1 KB
/
index.js
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
import { api, data, schedule, params } from '@serverless/cloud'
api.get('/todos', async (req, res) => {
let result = await getTodos(
req.query.status,
req.query.meta ? true : {}
)
console.log(params.CLOUD_URL)
res.send({
items: result.items
})
})
api.post('/todos/:id', async (req, res) => {
console.log(new Date().toISOString())
let body = req.body
if (body.duedate) {
body.duedate = new Date(body.duedate).toISOString()
}
await data.set(
`todo:${req.params.id}`,
{
...body,
createdAt: Date.now()
},
Object.assign({},
req.body.status ?
{
label1: body.status === 'complete'
? `complete:${new Date().toISOString()}`
: `incomplete:${body.duedate ? body.duedate : '9999' }` }
: null
)
)
let result = await getTodos(
req.query.status
)
res.send({
items: result.items
})
})
api.delete('/todos/:id', async (req, res) => {
await data.remove(`todo:${req.params.id}`)
let result = await getTodos(req.query.status)
res.send({
items: result.items
})
})
api.use((err, req, res, next) => {
console.error(err.stack)
if (!err.statusCode) {
err.statusCode = 500
}
const error = {
name: err.name,
statusCode: err.statusCode,
message: err.message,
}
res.status(err.statusCode).json(error)
})
schedule.every("60 minutes", async () => {
console.log(`Checking for overdue TODOs...`)
let overdueItems = await data.getByLabel('label1',`incomplete:<${new Date().toISOString()}`)
if (overdueItems.items.length === 0) {
console.log(`Nothing overdue!`)
}
for (let item of overdueItems.items) {
console.log(`ALERT: '${item.value.name}' is overdue!!!`)
}
})
const getTodos = async (status, meta) => {
let result
if (status === 'all') {
result = await data.get('todo:*', meta)
} else if (status === 'complete') {
result = await data.getByLabel('label1','complete:*', meta)
} else {
result = await data.getByLabel('label1','incomplete:*', meta)
}
return {
items: result.items.map(
item => item.value
)
}
}