From d44824e563d0b6dc4a15692e2d7a872d5b3cd232 Mon Sep 17 00:00:00 2001 From: data Date: Wed, 3 Jul 2019 14:27:19 -0400 Subject: [PATCH] add articles and tags --- api/articles.js | 54 ++++++++++++++++++++++++++++++++++++++++++++ api/index.js | 2 ++ api/projects.js | 4 ++-- api/tags.js | 54 ++++++++++++++++++++++++++++++++++++++++++++ api/tasks.js | 4 ++-- db/models/article.js | 15 ++++++++++++ db/models/index.js | 6 ++++- db/models/tag.js | 11 +++++++++ db/seed.js | 11 ++++++++- 9 files changed, 155 insertions(+), 6 deletions(-) create mode 100644 api/articles.js create mode 100644 api/tags.js create mode 100644 db/models/article.js create mode 100644 db/models/tag.js diff --git a/api/articles.js b/api/articles.js new file mode 100644 index 0000000..f7ef716 --- /dev/null +++ b/api/articles.js @@ -0,0 +1,54 @@ +const router = require('express').Router() +const { Project, Task, Article, Tag } = require('../db/models') +module.exports = router + +/* CREATE */ +router.post('/', async (req, res, next) => { + try { + const article = await Article.create(req.body) + res.json(article) + } catch (err) { + next(err) + } +}) + +/* READ */ +router.get('/', async (req, res, next) => { + try { + const articles = await Article.findAll() + res.send(articles) + } catch (err) { + next(err) + } +}) + +router.get('/:id', async (req, res, next) => { + try { + const article = await Article.findByPk(req.params.id) + res.json(article) + } catch (err) { + next(err) + } +}) + +/* UPDATE */ +router.put('/:id', async (req, res, next) => { + try { + const article = await Article.findByPk(req.params.id) + await article.update(req.body) + res.json(article) + } catch (err) { + next(err) + } +}) + +/* DELETE */ +router.post('/:id/delete', async (req, res, next) => { + try { + const article = await Article.findByPk(req.params.id) + await article.destroy({ force: true }) + res.json(article) + } catch (err) { + next(err) + } +}) diff --git a/api/index.js b/api/index.js index b3c9127..f53c504 100755 --- a/api/index.js +++ b/api/index.js @@ -4,6 +4,8 @@ const ascii = require('../ascii') router.use('/tasks', require('./tasks')) router.use('/projects', require('./projects')) +router.use('/articles', require('./articles')) +router.use('/tags', require('./tags')) router.get('/', async (req, res, next) => { try { diff --git a/api/projects.js b/api/projects.js index dc85907..05f7be6 100644 --- a/api/projects.js +++ b/api/projects.js @@ -1,5 +1,5 @@ const router = require('express').Router() -const { Project, Task } = require('../db/models') +const { Project, Task, Article, Tag } = require('../db/models') module.exports = router /* CREATE */ @@ -46,7 +46,7 @@ router.put('/:id', async (req, res, next) => { router.post('/:id/delete', async (req, res, next) => { try { const project = await Project.findByPk(req.params.id) - project.destroy({ force: true }) + await project.destroy({ force: true }) await Task.destroy({ where: { projectId: req.params.id, diff --git a/api/tags.js b/api/tags.js new file mode 100644 index 0000000..8be62a7 --- /dev/null +++ b/api/tags.js @@ -0,0 +1,54 @@ +const router = require('express').Router() +const { Project, Task, Article, Tag } = require('../db/models') +module.exports = router + +/* CREATE */ +router.post('/', async (req, res, next) => { + try { + const tag = await Tag.create(req.body) + res.json(tag) + } catch (err) { + next(err) + } +}) + +/* READ */ +router.get('/', async (req, res, next) => { + try { + const tags = await Tag.findAll() + res.send(tags) + } catch (err) { + next(err) + } +}) + +router.get('/:id', async (req, res, next) => { + try { + const tag = await Tag.findByPk(req.params.id) + res.json(tag) + } catch (err) { + next(err) + } +}) + +/* UPDATE */ +router.put('/:id', async (req, res, next) => { + try { + const tag = await Tag.findByPk(req.params.id) + await tag.update(req.body) + res.json(tag) + } catch (err) { + next(err) + } +}) + +/* DELETE */ +router.post('/:id/delete', async (req, res, next) => { + try { + const tag = await Tag.findByPk(req.params.id) + await tag.destroy({ force: true }) + res.json(tag) + } catch (err) { + next(err) + } +}) diff --git a/api/tasks.js b/api/tasks.js index 5ac1e7c..70ca882 100755 --- a/api/tasks.js +++ b/api/tasks.js @@ -1,5 +1,5 @@ const router = require('express').Router() -const { Project, Task } = require('../db/models') +const { Project, Task, Article, Tag } = require('../db/models') module.exports = router /* CREATE */ @@ -53,7 +53,7 @@ router.put('/:id', async (req, res, next) => { router.post('/:id/delete', async (req, res, next) => { try { const task = await Task.findByPk(req.params.id) - task.destroy({ force: true }) + await task.destroy({ force: true }) res.json(task) } catch (err) { next(err) diff --git a/db/models/article.js b/db/models/article.js new file mode 100644 index 0000000..13a2267 --- /dev/null +++ b/db/models/article.js @@ -0,0 +1,15 @@ +const Sequelize = require('sequelize') +const db = require('../db') + +const Article = db.define('articles', { + title: { + type: Sequelize.STRING, + allowNull: false, + }, + text: { + type: Sequelize.TEXT, + allowNull: true, + }, +}) + +module.exports = Article diff --git a/db/models/index.js b/db/models/index.js index 9c2cd3f..90c55c3 100755 --- a/db/models/index.js +++ b/db/models/index.js @@ -1,9 +1,13 @@ const Task = require('./task') const Project = require('./project') const User = require('./user') +const Article = require('./article') +const Tag = require('./tag') Project.hasMany(Task) Task.belongsTo(Project) +Article.hasMany(Tag) +Tag.belongsTo(Article) User.belongsToMany(Project, { through: 'projectUser' }) Project.hasMany(User) @@ -11,4 +15,4 @@ Project.hasMany(User) Task.belongsToMany(User, { through: 'userTask' }) User.hasMany(Task) -module.exports = { Task, Project, User } +module.exports = { Task, Project, User, Article, Tag } diff --git a/db/models/tag.js b/db/models/tag.js new file mode 100644 index 0000000..bd3338a --- /dev/null +++ b/db/models/tag.js @@ -0,0 +1,11 @@ +const Sequelize = require('sequelize') +const db = require('../db') + +const Tag = db.define('tags', { + name: { + type: Sequelize.STRING, + allowNull: false, + }, +}) + +module.exports = Tag diff --git a/db/seed.js b/db/seed.js index b7d967a..15d123c 100755 --- a/db/seed.js +++ b/db/seed.js @@ -1,5 +1,5 @@ const db = require('../db') -const { Task, Project, User } = require('./models') +const { Task, Project, User, Article, Tag } = require('./models') const testTasks = [ { @@ -26,6 +26,10 @@ const testUsers = [ { name: 'dn', email: 'dn@ap.org' }, ] +const testArticles = [{ title: 'latest news', text: 'waddup?!' }] + +const testTags = [{ name: 'dox', articleId: 1 }] + async function runSeed() { await db.sync({ force: true }) console.log('db synced!') @@ -48,6 +52,11 @@ async function runSeed() { await u1.addTasks([t1, t2]) await u2.addTask(t3) + const projects = await Project.bulkCreate(testProjects) + const tasks = await Task.bulkCreate(testTasks) + const articles = await Article.bulkCreate(testArticles) + const tags = await Tag.bulkCreate(testTags) + console.log('seeded successfully') } catch (err) { console.error(err)