From 237198cd4774a811535139720ab2781fddbfaa2d Mon Sep 17 00:00:00 2001 From: Robbie Antenesse Date: Wed, 11 Dec 2019 13:15:55 -0700 Subject: [PATCH] Add rename shelf API endpoint --- server/controllers/shelf.js | 18 ++++++++++++++ server/routes/shelf.js | 48 +++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/server/controllers/shelf.js b/server/controllers/shelf.js index 6e33ca3..996473e 100644 --- a/server/controllers/shelf.js +++ b/server/controllers/shelf.js @@ -73,6 +73,24 @@ class ShelfController { } } } + + async renameShelf (userId, id, name) { + try { + return await this.model.update({ + name, + }, { + where: { + id, + userId, + isDeletable: true, // You can only rename shelves not created by the system + } + }); + } catch(error) { + return { + error, + } + } + } async getLastUpdatedTimestamp (shelf) { const lastEditedItem = await this.itemModel.findOne({ diff --git a/server/routes/shelf.js b/server/routes/shelf.js index 74d62a0..a8c9bcb 100644 --- a/server/routes/shelf.js +++ b/server/routes/shelf.js @@ -47,6 +47,54 @@ async function routes(fastify, options) { message: 'api.shelf.create.success', }); }); + + fastify.post('/api/shelf/rename', async (request, reply) => { + if (!request.isLoggedInUser) { + return reply.code(400).send({ + error: true, + message: 'api.not_logged_in', + }); + } + + if (typeof request.body.shelfId === 'undefined') { + return reply.code(400).send({ + error: true, + message: 'api.shelf.rename.missing_id', + }); + } + + if (typeof request.body.shelfName === 'undefined') { + return reply.code(400).send({ + error: true, + message: 'api.shelf.rename.missing_name', + }); + } + request.body.shelfName = request.body.shelfName.trim(); + + const userShelves = await request.user.getShelves({ + attributes: ['name'], + }); + const shelfNameIsValid = ShelfController.newShelfNameIsValid( + request.body.shelfName, + userShelves.map(shelf => shelf.name) + ); + if (shelfNameIsValid !== true) { + return reply.code(400).send(shelfNameIsValid); + } + + const shelf = new ShelfController(fastify.models.Shelf, fastify.models.ShelfItem); + + const newShelf = shelf.renameShelf(request.user, request.body.shelfId, request.body.shelfName); + if (typeof newShelf.error !== 'undefined' && newShelf.error !== false) { + newShelf.message = 'api.shelf.rename.fail'; + return reply.code(400).send(newShelf); + } + + return reply.send({ + error: false, + message: 'api.shelf.rename.success', + }); + }); } module.exports = routes; \ No newline at end of file