Untitled
unknown
plain_text
2 years ago
3.9 kB
5
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