diff --git a/api/users.js b/api/users.js new file mode 100644 index 0000000..1eaa7a5 --- /dev/null +++ b/api/users.js @@ -0,0 +1,54 @@ +const router = require('express').Router() +const { User } = require('../db/models') +module.exports = router + +/* CREATE */ +router.post('/', async (req, res, next) => { + try { + const task = await User.create(req.body) + res.json(task) + } catch (err) { + next(err) + } +}) + +/* READ */ +router.get('/', async (req, res, next) => { + try { + const tasks = await User.findAll() + res.send(tasks) + } catch (err) { + next(err) + } +}) + +router.get('/:id', async (req, res, next) => { + try { + const task = await User.findByPk(req.params.id) + res.json(task) + } catch (err) { + next(err) + } +}) + +/* UPDATE */ +router.put('/:id', async (req, res, next) => { + try { + const task = await User.findByPk(req.params.id) + await task.update(req.body) + res.json(task) + } catch (err) { + next(err) + } +}) + +/* DELETE */ +router.post('/:id/delete', async (req, res, next) => { + try { + const task = await User.findByPk(req.params.id) + task.destroy({ force: true }) + res.json(task) + } catch (err) { + next(err) + } +}) diff --git a/db/models/index.js b/db/models/index.js index 324c07c..9c2cd3f 100755 --- a/db/models/index.js +++ b/db/models/index.js @@ -1,7 +1,14 @@ -const Project = require('./project') const Task = require('./task') +const Project = require('./project') +const User = require('./user') Project.hasMany(Task) Task.belongsTo(Project) -module.exports = { Task, Project } +User.belongsToMany(Project, { through: 'projectUser' }) +Project.hasMany(User) + +Task.belongsToMany(User, { through: 'userTask' }) +User.hasMany(Task) + +module.exports = { Task, Project, User } diff --git a/db/models/user.js b/db/models/user.js new file mode 100644 index 0000000..0555b69 --- /dev/null +++ b/db/models/user.js @@ -0,0 +1,20 @@ +const Sequelize = require('sequelize') +const db = require('../db') + +const User = db.define('users', { + name: { + type: Sequelize.STRING, + allowNull: false, + }, + + email: { + type: Sequelize.STRING, + }, + + avatar: { + type: Sequelize.STRING, + defaultValue: 'default-user-img.png', + }, +}) + +module.exports = User diff --git a/db/seed.js b/db/seed.js index b1884e2..b7d967a 100755 --- a/db/seed.js +++ b/db/seed.js @@ -1,5 +1,5 @@ const db = require('../db') -const { Task, Project } = require('./models') +const { Task, Project, User } = require('./models') const testTasks = [ { @@ -15,18 +15,38 @@ const testTasks = [ { desc: 'eat dinner', completed: false, + projectId: 1, }, ] -const testProjects = [{ name: 'Anarchy Planet' }] +const testProjects = [{ name: 'Anarchy Planet' }, { name: 'Tilde' }] + +const testUsers = [ + { name: 'nn', email: 'nn@ap.org' }, + { name: 'dn', email: 'dn@ap.org' }, +] async function runSeed() { await db.sync({ force: true }) console.log('db synced!') console.log('seeding...') try { - const projects = await Project.bulkCreate(testProjects) - const tasks = await Task.bulkCreate(testTasks) + const p1 = await Project.create(testProjects[0]) + const p2 = await Project.create(testProjects[1]) + + const u1 = await User.create(testUsers[0]) + const u2 = await User.create(testUsers[1]) + + const t1 = await Task.create(testTasks[0]) + const t2 = await Task.create(testTasks[1]) + const t3 = await Task.create(testTasks[2]) + + await p1.addTask(t1) + await p1.addTask(t2) + await p2.addTask(t3) + + await u1.addTasks([t1, t2]) + await u2.addTask(t3) console.log('seeded successfully') } catch (err) {