This commit is contained in:
Ben Grant 2021-02-27 00:52:20 +11:00
parent 15d4e2f126
commit edcd4dcaa0
15 changed files with 1195 additions and 82 deletions

View file

@ -1,10 +1,43 @@
module.exports = (req, res) => {
const dayjs = require('dayjs');
const generateId = (name) => {
const id = name.trim().toLowerCase().replace(/[^A-Za-z0-9 ]/g, '').replace(/\s+/g, '-');
const number = Math.floor(100000 + Math.random() * 900000);
return `${id}-${number}`;
};
module.exports = async (req, res) => {
const { event } = req.body;
if (event) {
console.log(event);
res.sendStatus(201);
} else {
try {
const eventId = generateId(event.name);
const currentTime = dayjs().unix();
const entity = {
key: req.datastore.key(['Event', eventId]),
data: {
name: event.name.trim(),
created: currentTime,
timezone: event.timezone,
startTime: event.startTime,
endTime: event.endTime,
dates: event.dates,
},
};
await req.datastore.insert(entity);
res.status(201).send({
id: eventId,
name: event.name.trim(),
created: currentTime,
timezone: event.timezone,
startTime: event.startTime,
endTime: event.endTime,
dates: event.dates,
});
} catch (e) {
console.error(e);
res.sendStatus(400);
}
};

View file

@ -1,15 +1,45 @@
module.exports = (req, res) => {
const dayjs = require('dayjs');
const bcrypt = require('bcrypt');
module.exports = async (req, res) => {
const { eventId } = req.params;
const { person } = req.body;
if (eventId) {
if (person) {
console.log(person);
res.sendStatus(201);
try {
const event = (await req.datastore.get(req.datastore.key(['Event', eventId])))[0];
if (event) {
if (person) {
const currentTime = dayjs().unix();
// If password
let hash = null;
if (person.password) {
hash = await bcrypt.hash(person.password, 10);
}
const entity = {
key: req.datastore.key('Person'),
data: {
name: person.name.trim(),
password: hash,
eventId: eventId,
created: currentTime,
availability: [],
},
};
await req.datastore.insert(entity);
res.sendStatus(201);
} else {
res.sendStatus(400);
}
} else {
res.sendStatus(400);
res.sendStatus(404);
}
} else {
res.sendStatus(404);
} catch (e) {
console.error(e);
res.sendStatus(400);
}
};

View file

@ -1,21 +1,19 @@
module.exports = (req, res) => {
module.exports = async (req, res) => {
const { eventId } = req.params;
if (eventId) {
res.send({
id: 'event-name-4701240',
name: 'Event name',
eventCreated: 379642017932,
timezone: '247',
startTime: 0900,
endTime: 1700,
dates: [
'26022021',
'27022021',
'28022021',
],
});
} else {
try {
const event = (await req.datastore.get(req.datastore.key(['Event', eventId])))[0];
if (event) {
res.send({
id: eventId,
...event,
});
} else {
res.sendStatus(404);
}
} catch (e) {
console.error(e);
res.sendStatus(404);
}
};

View file

@ -1,27 +1,19 @@
module.exports = (req, res) => {
module.exports = async (req, res) => {
const { eventId } = req.params;
if (eventId) {
try {
const query = req.datastore.createQuery('Person').filter('eventId', eventId);
let people = (await req.datastore.runQuery(query))[0];
people = people.map(person => ({
name: person.name,
availability: person.availability,
}));
res.send({
people: [
{
name: 'Laura',
password: null,
eventId: 'event-name-4701240',
availability: [
[
'START',
'END',
],
[
'START',
'END',
],
],
},
],
people,
});
} else {
} catch (e) {
console.error(e);
res.sendStatus(404);
}
};

View file

@ -0,0 +1,32 @@
const bcrypt = require('bcrypt');
module.exports = async (req, res) => {
const { eventId, personName } = req.params;
const { person } = req.body;
try {
const query = req.datastore.createQuery('Person')
.filter('eventId', eventId)
.filter('name', personName);
let personResult = (await req.datastore.runQuery(query))[0][0];
if (personResult) {
if (personResult.password) {
const passwordsMatch = person && person.password && await bcrypt.compare(person.password, personResult.password);
if (!passwordsMatch) {
return res.status(401).send('Incorrect password');
}
}
res.send({
name: personName,
availability: personResult.availability,
});
} else {
res.sendStatus(404);
}
} catch (e) {
console.error(e);
res.sendStatus(404);
}
};

View file

@ -1,9 +1,21 @@
const package = require('../package.json');
module.exports = (req, res) => {
module.exports = async (req, res) => {
let eventCount = null;
let personCount = null;
try {
const query = req.datastore.createQuery(['__Stat_Kind__']);
eventCount = (await req.datastore.runQuery(query.filter('kind_name', 'Event')))[0].count;
personCount = (await req.datastore.runQuery(query.filter('kind_name', 'Person')))[0].count;
} catch (e) {
console.error(e);
}
res.send({
eventCount: 0,
personCount: 0,
eventCount: eventCount || null,
personCount: personCount || null,
version: package.version,
});
};

View file

@ -1,18 +1,37 @@
module.exports = (req, res) => {
const { eventId, personId } = req.params;
const bcrypt = require('bcrypt');
module.exports = async (req, res) => {
const { eventId, personName } = req.params;
const { person } = req.body;
if (eventId) {
if (personId) {
if (person) {
res.send(person);
try {
const query = req.datastore.createQuery('Person')
.filter('eventId', eventId)
.filter('name', personName);
let personResult = (await req.datastore.runQuery(query))[0][0];
if (personResult) {
if (person && person.availability) {
if (personResult.password) {
const passwordsMatch = person.password && await bcrypt.compare(person.password, personResult.password);
if (!passwordsMatch) {
return res.status(401).send('Incorrect password');
}
}
personResult.availability = person.availability;
await req.datastore.upsert(personResult);
res.sendStatus(200);
} else {
res.sendStatus(400);
}
} else {
res.sendStatus(404);
}
} else {
res.sendStatus(404);
} catch (e) {
console.error(e);
res.sendStatus(400);
}
};