From 57b66883dad6d78171cd1ae5eba4a297e5337abe Mon Sep 17 00:00:00 2001 From: rui hildt Date: Tue, 5 May 2020 11:54:02 +0200 Subject: [PATCH] Update availibility migration and add basic crud --- api/models/availibilityModel.js | 16 +++++++++ api/routes/availibilityRoute.js | 36 +++++++++++++++++++ api/server.js | 2 ++ .../migrations/20200502193443_availibility.js | 8 +++-- 4 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 api/models/availibilityModel.js create mode 100644 api/routes/availibilityRoute.js diff --git a/api/models/availibilityModel.js b/api/models/availibilityModel.js new file mode 100644 index 0000000..6236f28 --- /dev/null +++ b/api/models/availibilityModel.js @@ -0,0 +1,16 @@ +const db = require('../../data/db'); + +module.exports = { + addAvailibility, + deleteAvailibility, +}; + +function addAvailibility(data) { + return db('possible_date') + .insert(data) + .returning(['id', 'meeting_id', 'possible_date']); +} + +function deleteAvailibility(id) { + return db('possible_date').where({ id }).del(); +} diff --git a/api/routes/availibilityRoute.js b/api/routes/availibilityRoute.js new file mode 100644 index 0000000..909ab10 --- /dev/null +++ b/api/routes/availibilityRoute.js @@ -0,0 +1,36 @@ +let express = require('express'); +let router = express.Router(); + +let Availibility = require('../models/availibilityModel'); + +router.post('/', async (req, res) => { + const data = { ...req.body }; + + try { + const [availibility] = await Availibility.addAvailibility(data); + res.status(201).json(availibility); + } catch (error) { + res.status(500).json({ + message: 'Failed to add a new availibility.', + error, + }); + } +}); + +router.delete('/:possible_date_id', async (req, res) => { + const id = req.params.id; + + try { + const availibility = await Availibility.deleteAvailibility(id); + res.status(200).json({ + message: `Availibility with id ${id} successfully deleted.`, + }); + } catch (error) { + res.status(500).json({ + message: `Failed to delete availibility with id ${id}.`, + error, + }); + } +}); + +module.exports = router; diff --git a/api/server.js b/api/server.js index 800c981..9303efd 100644 --- a/api/server.js +++ b/api/server.js @@ -7,6 +7,7 @@ const accountsRoute = require('./routes/accountRoute'); const meetingsRoute = require('./routes/meetingRoute'); const participantsRoute = require('./routes/participantRoute'); const possibleDatesRoute = require('./routes/possibleDateRoute'); +const availibilityRoute = require('./routes/availibilityRoute'); const server = express(); @@ -18,6 +19,7 @@ server.use('/api/accounts', accountsRoute); server.use('/api/meetings', meetingsRoute); server.use('/api/participants', participantsRoute); server.use('/api/possible-dates', possibleDatesRoute); +server.use('/api/availibility', availibilityRoute); server.get('/', (req, res) => res diff --git a/data/migrations/20200502193443_availibility.js b/data/migrations/20200502193443_availibility.js index 8963283..ee2d043 100644 --- a/data/migrations/20200502193443_availibility.js +++ b/data/migrations/20200502193443_availibility.js @@ -1,6 +1,8 @@ exports.up = (knex) => { return knex.schema.createTable('availibility', (table) => { table.increments('id').primary(); + + // Reference to participant composite primary key table.uuid('meeting_id').unsigned(); table.integer('account_id').unsigned(); table @@ -8,10 +10,10 @@ exports.up = (knex) => { .references(['account_id', 'meeting_id']) .on('participant') .onDelete('cascade'); + + table.integer('possible_date_id'); table - .integer('possible_date_id') - .unsigned() - .notNullable() + .foreign('possible_date_id') .references('possible_date.id') .onDelete('cascade'); table.boolean('preference').notNullable();