mirror of
https://gitlab.com/Alamantus/Readlebee.git
synced 2025-03-25 04:40:43 +01:00
Add shelf api route with create action
This commit is contained in:
parent
cd4e628e11
commit
a2d113562e
3 changed files with 83 additions and 0 deletions
|
@ -4,6 +4,24 @@ class ShelfController {
|
||||||
this.itemModel = shelfItemModel;
|
this.itemModel = shelfItemModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static newShelfNameIsValid (name, existingNames = []) {
|
||||||
|
if (name.length < 1) {
|
||||||
|
return {
|
||||||
|
error: true,
|
||||||
|
message: 'api.shelf.create.name_too_short',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (existingNames.includes(name)) {
|
||||||
|
return {
|
||||||
|
error: true,
|
||||||
|
message: 'api.shelf.create.name_already_exists',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
async createDefaultShelves (user) {
|
async createDefaultShelves (user) {
|
||||||
try {
|
try {
|
||||||
const defaultShelvesCreated = await this.model.bulkCreate([
|
const defaultShelvesCreated = await this.model.bulkCreate([
|
||||||
|
@ -44,6 +62,18 @@ class ShelfController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async createShelf (user, name) {
|
||||||
|
try {
|
||||||
|
return await user.addShelf({
|
||||||
|
name,
|
||||||
|
});
|
||||||
|
} catch(error) {
|
||||||
|
return {
|
||||||
|
error,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async getLastUpdatedTimestamp (shelf) {
|
async getLastUpdatedTimestamp (shelf) {
|
||||||
const lastEditedItem = await this.itemModel.findOne({
|
const lastEditedItem = await this.itemModel.findOne({
|
||||||
attributes: ['updatedAt'],
|
attributes: ['updatedAt'],
|
||||||
|
|
|
@ -91,6 +91,7 @@ fastify.register(require('./i18n'));
|
||||||
fastify.register(require('./routes/public'));
|
fastify.register(require('./routes/public'));
|
||||||
fastify.register(require('./routes/books'));
|
fastify.register(require('./routes/books'));
|
||||||
fastify.register(require('./routes/account'));
|
fastify.register(require('./routes/account'));
|
||||||
|
fastify.register(require('./routes/shelf'));
|
||||||
fastify.register(require('./routes/search'));
|
fastify.register(require('./routes/search'));
|
||||||
|
|
||||||
// Start the server
|
// Start the server
|
||||||
|
|
52
server/routes/shelf.js
Normal file
52
server/routes/shelf.js
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
const ShelfController = require('../controllers/shelf');
|
||||||
|
|
||||||
|
async function routes(fastify, options) {
|
||||||
|
fastify.get('/api/shelf/test', async (request, reply) => {
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
fastify.post('/api/shelf/create', async (request, reply) => {
|
||||||
|
if (!request.isLoggedInUser) {
|
||||||
|
return reply.code(400).send({
|
||||||
|
error: true,
|
||||||
|
message: 'api.not_logged_in',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof request.body.shelfName === 'undefined') {
|
||||||
|
return reply.code(400).send({
|
||||||
|
error: true,
|
||||||
|
message: 'api.shelf.create.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.createShelf(request.user, request.body.shelfName);
|
||||||
|
if (typeof newShelf.error !== 'undefined' && newShelf.error !== false) {
|
||||||
|
newShelf.message = 'api.shelf.create.fail';
|
||||||
|
return reply.code(400).send(newShelf);
|
||||||
|
}
|
||||||
|
|
||||||
|
return reply.send({
|
||||||
|
error: false,
|
||||||
|
message: 'api.shelf.create.success',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = routes;
|
Loading…
Add table
Reference in a new issue