From 1317015a0d81ec2712e1b1538a5df688ec9f6ae5 Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Thu, 17 May 2018 12:28:03 +0300 Subject: [PATCH] use slugs for lists --- models/TodoList.js | 4 ++++ package-lock.json | 5 +++++ package.json | 3 ++- routes/lists.js | 8 +++++--- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/models/TodoList.js b/models/TodoList.js index a526bd2..69f8810 100644 --- a/models/TodoList.js +++ b/models/TodoList.js @@ -7,6 +7,10 @@ const todoListSchema = Schema({ type: String, required: true, }, + slug: { + type: String, + required: true, + }, todos: [{ type: Schema.Types.ObjectId, ref: 'Todo' }], }); diff --git a/package-lock.json b/package-lock.json index eaff4f0..67d1f81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9709,6 +9709,11 @@ "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" }, + "slugify": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.3.0.tgz", + "integrity": "sha512-vvz+9ANt7CtdTHwJpfrsHOnGkgxky+CUPnvtzDZBZYFo/H/CdZkd5lJL7z7RqtH/x9QW/ItYYfHlcGf38CBK1w==" + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", diff --git a/package.json b/package.json index da41a8b..4a4f80a 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,8 @@ "method-override": "^2.3.10", "mongoose": "^5.1.1", "morgan": "^1.9.0", - "npm": "^6.0.1" + "npm": "^6.0.1", + "slugify": "^1.3.0" }, "devDependencies": { "eslint": "^4.19.1", diff --git a/routes/lists.js b/routes/lists.js index 9ea7758..b885e77 100644 --- a/routes/lists.js +++ b/routes/lists.js @@ -1,5 +1,6 @@ const express = require('express'); const mongoose = require('mongoose'); +const slugify = require('slugify'); const router = express.Router(); @@ -26,16 +27,17 @@ router.post( asyncHelper(async (req, res) => { const { name } = req.body; const newList = new TodoList({ name }); + newList.slug = slugify(name); await newList.save(); res.json({ success: true }); }), ); router.delete( - '/:id', + '/:slug', asyncHelper(async (req, res) => { - const { id } = req.params; - const list = await TodoList.findById(id) + const { slug } = req.params; + const list = await TodoList.findOne({ slug }) .populate('todos') .exec(); if (!list) {