-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathgroups.js
134 lines (114 loc) · 4.87 KB
/
groups.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
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
const express = require('express')
const route = express.Router()
const init = connection => {
route.get('/', async (req, res) => {
const [rows, fields] = await connection.execute('SELECT groups.id, groups.name, groups_users.role FROM `groups` LEFT JOIN groups_users ON groups.id = groups_users.group_id AND groups_users.user_id = ?', [
req.session.user.id
])
res.render('groups', {
groups: rows
})
})
route.post('/', async (req, res) => {
const [resultSetHeader, resultSet] = await connection.execute('INSERT INTO `groups` (groups.name) VALUES (?)', [
req.body.name
])
await connection.execute('INSERT INTO `groups_users` (groups_users.group_id, groups_users.user_id, groups_users.role) VALUES (?, ?, ?)', [
resultSetHeader.insertId,
req.session.user.id,
'owner'
])
res.redirect('/groups')
})
route.get('/:id', async (req, res) => {
const [groupRows, groupFields] = await connection.execute('SELECT groups.id, groups.name, groups_users.role FROM `groups` LEFT JOIN groups_users ON groups_users.group_id = groups.id AND groups_users.user_id = ? WHERE groups.id = ?', [
req.session.user.id,
req.params.id
])
const [pendingRows, pendingFields] = await connection.execute("SELECT groups_users.id, groups_users.role, groups_users.user_id, groups_users.group_id, users.name FROM `groups_users` INNER JOIN users ON groups_users.user_id = users.id AND groups_users.group_id = ? AND groups_users.role LIKE 'pending'", [
req.params.id
])
const [gameRows, gameFields] = await connection.execute('SELECT games.id, games.result_a, games.result_b, games.team_a, games.team_b, guessings.result_a as guess_a, guessings.result_b as guess_b, guessings.score FROM `games` LEFT JOIN guessings ON games.id = guessings.game_id AND guessings.user_id = ? AND guessings.group_id = ?', [
req.session.user.id,
req.params.id
])
res.render('group', {
pendings: pendingRows,
group: groupRows[0],
games: gameRows
})
})
route.post('/:id', async (req, res) => {
const guessings = []
Object
.keys(req.body)
.forEach(game => {
const parts = game.split('_')
const guess = {
game_id: parts[1],
result_a: req.body[game].team_a,
result_b: req.body[game].team_b
}
guessings.push(guess)
})
const batch = guessings.map(guess => {
return connection.execute('INSERT INTO `guessings` (guessings.result_a, guessings.result_b, guessings.game_id, guessings.group_id, guessings.user_id) VALUES (?, ?, ?, ?, ?)', [
guess.result_a,
guess.result_b,
guess.game_id,
req.params.id,
req.session.user.id
])
})
await Promise.all(batch)
res.redirect('/groups/' + req.params.id)
})
route.get('/:id/participate', async (req, res) => {
const [rows, fields] = await connection.execute('SELECT groups_users.id, groups_users.role, groups_users.user_id, groups_users.group_id FROM `groups_users` WHERE user_id = ? AND group_id = ?', [
req.session.user.id,
req.params.id
])
if (rows.length === 0) {
const [resultSetHeader, resultSet] = await connection.execute('INSERT INTO `groups_users` (groups_users.group_id, groups_users.user_id, groups_users.role) VALUES (?, ?, ?)', [
req.params.id,
req.session.user.id,
'pending'
])
}
res.redirect('/groups')
})
route.get('/:groupId/approval/:groupsUsersId/:op', async (req, res) => {
const [rows, fields] = await connection.execute('SELECT groups.id, groups.name, groups_users.role FROM `groups` LEFT JOIN groups_users ON groups_users.group_id = groups.id AND groups_users.user_id = ? WHERE groups.id = ?', [
req.session.user.id,
req.params.groupId
])
if (rows.length === 0 || rows[0].role !== 'owner') {
res.redirect('/groups/' + req.params.groupId)
} else {
if (req.params.op === 'yes') {
await connection.execute('UPDATE `groups_users` SET groups_users.role = "user" WHERE groups_users.id = ?', [
req.params.groupsUsersId
])
} else {
await connection.execute('DELETE FROM `groups_users` WHERE groups_users.id = ?', [
req.params.groupsUsersId
])
}
res.redirect('/groups/' + req.params.groupId)
}
})
route.get('/delete/:id', async (req, res) => {
const [rows, fields] = await connection.execute('SELECT groups.id, groups.name, groups_users.role FROM `groups` LEFT JOIN groups_users ON groups_users.group_id = groups.id AND groups_users.user_id = ? WHERE groups.id = ?', [
req.session.user.id,
req.params.id
])
if (rows.length > 0 || rows[0].role === 'owner') {
await connection.execute('DELETE FROM `groups` WHERE groups.id = ?', [
req.params.id
])
}
res.redirect('/groups')
})
return route
}
module.exports = init