Untitled
unknown
plain_text
2 years ago
3.9 kB
4
Indexable
const express = require('express'); const fs = require('fs').promises; const path = require('path'); const { validTalk, validRate } = require('./middlewares/validations'); const app = express(); app.use(express.json()); const HTTP_OK_STATUS = 200; const PORT = process.env.PORT || '3001'; const NOT_FOUND_TOKEN = 401; // não remova esse endpoint, e para o avaliador funcionar app.get('/', (_request, response) => { response.status(HTTP_OK_STATUS).send(); }); const generateToken = () => { const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; let token = ''; for (let i = 0; i < 16; i += 1) { token += characters.charAt(Math.floor(Math.random() * characters.length)); } return token; }; const tokenValid = (req, res, next) => { const newToken = generateToken(); if (!newToken) { return res.status(NOT_FOUND_TOKEN).json({ message: 'Token não encontrado' }); } if (!tokenValid) { return res.status(NOT_FOUND_TOKEN).json({ message: 'Token inválido' }); } next(); }; app.post('/talker', tokenValid, async (request, response) => { const { name, age, talk } = request.body; const talkers = await fs.readFile(path.join(__dirname, 'talker.json'), 'utf-8'); const talkersJson = JSON.parse(talkers); if (!name) { return response.status(400).json({ message: 'O campo "name" é obrigatório' }); } if (!age) { return response.status(400).json({ message: 'O campo "age" é obrigatório' }); } if (!talk) { return response.status(400).json({ message: 'O campo "talk" é obrigatório' }); } if (age < 18) { return response.status(400).json({ message: 'A pessoa palestrante deve ser maior de idade' }); } if (talk.length < 30) { return response.status(400).json({ message: 'O campo "talk" deve ter pelo menos 30 caracteres' }); } if (talkersJson.find((talker) => talker.name === name)) { return response.status(409).json({ message: 'Essa pessoa já foi cadastrada' }); }; const newTalker = { name, age, talk, id: talkersJson.length + 1, }; talkersJson.push(newTalker); await fs.writeFile(path.join(__dirname, 'talker.json'), JSON.stringify(talkersJson)); return response.status(201).json(newTalker); } app.get('/talker', async (_request, response) => { const talkers = await fs.readFile(path.join(__dirname, 'talker.json'), 'utf-8'); const talkersJson = JSON.parse(talkers); if (!talkersJson) return response.status(200).json([]); return response.status(200).json(talkersJson); }); app.get('/talker/:id', async (request, response) => { const { id } = request.params; const talkers = await fs.readFile(path.join(__dirname, 'talker.json'), 'utf-8'); const talkersJson = JSON.parse(talkers); if (!talkersJson) return response.status(200).json([]); const talkerFind = talkersJson.find((talker) => talker.id === +id); if (!talkerFind) { return response.status(404).json( { message: 'Pessoa palestrante não encontrada' }, ); } return response.status(200).json(talkerFind); }); // requisito 4 app.post('/login', (request, response) => { const { email, password } = request.body; if (!email) { return response.status(400).json({ message: 'O campo "email" é obrigatório' }); } if (!password) { return response.status(400).json({ message: 'O campo "password" é obrigatório' }); } if (password.length < 6) { return response.status(400).json({ message: 'O "password" deve ter pelo menos 6 caracteres' }); } const regexEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!regexEmail.test(email)) { return response.status(400).json({ message: 'O "email" deve ter o formato "email@email.com"' }); } return response.status(200).json({ token: generateToken() }); }); // requisito 5 app.listen(PORT, () => { console.log('Online'); });
Editor is loading...
Leave a Comment