1
0
Fork 0

Split into three async queries

master
Ambrose Chua 2017-04-14 21:17:39 +08:00
parent 5465c1d16a
commit f63fd6c155
1 changed files with 48 additions and 32 deletions

View File

@ -108,43 +108,59 @@ export default class Database {
INSERT INTO member (user, group_) INSERT INTO member (user, group_)
VALUES (?, ?) VALUES (?, ?)
`, [u, group.insertId]); `, [u, group.insertId]);
await Promise.all(data.members.map(insertMember)); return Promise.all(data.members.map(insertMember));
} }
async getGroup(school, id) { async getGroup(school, id) {
return this.query(` const getGroup = this.query(`
SELECT SELECT *
group_.id as group_id, FROM group_
group_.name as group_name,
group_mentor.year as group_mentor_year,
group_mentor.level as group_mentor_level,
user.id,
user.name
user.email
FROM
(
group_mentor RIGHT JOIN group_
ON group_mentor.id = group_.id
)
RIGHT JOIN (member, user)
ON member.group_ = group_.id
AND member.user = user.id
WHERE group_.id = ? WHERE group_.id = ?
`, [id], { `, [id], {
required: true, required: true,
}) single: true,
.then(results => ({ }).catch(attachNoun('Group'));
id: results[0].group_id, const getMembers = this.query(`
name: results[0].group_name, SELECT user.*
level: results[0].group_mentor_level, FROM member, user
year: results[0].group_mentor_year, WHERE member.user = user.id
members: results[0].id ? results.map(r => Object.assign(r, { AND member.group_ = ?
group_id: undefined, `, [id]);
group_name: undefined, const getEventsOnce = this.query(`
group_mentor_level: undefined, SELECT *
group_mentor_year: undefined, FROM event_once
})) : [], WHERE event_once.group_ = ?
})) `, [id]);
.catch(attachNoun('Group')); return Promise.all([getGroup, getMembers, getEventsOnce])
.then(results => Object.assign({}, results[0], {
members: results[1].map(m => Object.assign(m, {
pwd_hash: undefined,
oid_id: undefined,
})),
eventsOnce: results[2],
}));
}
async createEventOnce(school, group, data) {
return this.query(`
INSERT INTO event_once (group_, name, start, end)
VALUES (?, ?, ?, ?)
`, [group, data.name, data.start, data.end]);
}
async getEventOnce(school, group, id) {
return this.query(`
SELECT *
FROM event_once
WHERE event_once.group_ = ?
AND event_once.id = ?
`, [group, id]);
}
// eslint-disable-next-line
async getEventClashesWith(school, group, id) {
// TODO
}
async getUserEventsBetween(school, user, start, end) {
// oh shit
} }
query(query, values, options = {}) { query(query, values, options = {}) {