-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathhandler.js
More file actions
96 lines (84 loc) · 2.12 KB
/
Copy pathhandler.js
File metadata and controls
96 lines (84 loc) · 2.12 KB
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
import parser from 'body-parser-for-serverless'
import { handlerFactory } from './src/handlers/handlerFactory.js'
import { slackTextResponsePrivate } from './src/utils/slackTextResponse.js'
import { coinRepository } from './src/lib/coinRepository.js'
import { coinTicketParser } from './src/lib/coinTicketParser.js'
const health = async (event) => {
return {
statusCode: 200,
body: JSON.stringify(process.env.COINS_TABLE),
headers: {
'Content-Type': 'application/json'
}
}
}
const getResult = async ({ text, user_name: userName, response_url: responseUrl }) => {
const handler = handlerFactory(userName, text)
if (handler) {
const result = await handler.handle(userName, text, responseUrl)
return result
}
return slackTextResponsePrivate(`
Sorry I did not understand your command, try \`/coin help\` to get some help.
_Original Message:_ \`/coin ${text}\`
`)
}
const send = async (event) => {
try {
const body = await parser(event)
if (body.token !== process.env.SLACK_TOKEN) {
throw new Error('Invalid token')
}
const result = await getResult(body)
console.log({
body,
result
})
return {
statusCode: 200,
body: JSON.stringify(result),
headers: {
'Content-Type': 'application/json'
}
}
} catch (error) {
return {
statusCode: 500,
body: error.message
}
}
}
const shuffle = (array) => {
return [...array].sort(() => Math.random() - 0.5)
}
const csv = async (event) => {
try {
if (event.headers.authorization !== process.env.SLACK_TOKEN) {
return {
statusCode: 401
}
}
const results = await coinRepository.listAll()
const tickets = coinTicketParser(results)
const ticketsAsCsv = shuffle(tickets).map(ticket => {
return `${ticket.sender} --> ${ticket.receiver}`
}).join('\n')
return {
statusCode: 200,
body: ticketsAsCsv,
headers: {
'Content-Type': 'text/csv'
}
}
} catch (error) {
return {
statusCode: 500,
body: error.message
}
}
}
export const v1 = {
send,
health,
csv
}