Untitled
unknown
plain_text
2 years ago
4.2 kB
8
Indexable
// importação dos modulos
const express = require('express');
const fs = require('fs').promises;
const path = require('path');
const { validTalker } = require('./middlewares/validations');
// configura o middleware para o uso de JSON nas requisições
const app = express();
app.use(express.json());
// constantes para status HTTP, porta servidor,toekn na~o encontrado e arquivo onde os palestrantes estão armazenados
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;
};
// Verifica se o token é válido ou está presente nas requisições
const tokenValid = (request, response, next) => {
const { authorization } = request.headers;
if (!authorization) {
return response.status(NOT_FOUND_TOKEN).json({ message: 'Token não encontrado' });
}
if (authorization.length !== 16 || typeof authorization !== 'string') {
return response.status(NOT_FOUND_TOKEN).json({ message: 'Token inválido' });
}
next();
};
app.get('/talker/search', tokenValid, async (request, response) => {
const { q } = request.query;
const talkers = await fs.readFile(path.join(__dirname, ARQUIVO), 'utf-8');
const talkersJson = JSON.parse(talkers);
const talkerFind = talkersJson.filter((talker) => talker.name.includes(q));
if (!talkerFind) {
return response.status(NOT_FOUND_TOKEN)
.json({ message: 'Pessoa palestrante não encontrada' });
}
if (typeof q === 'undefined') {
return response.status(HTTP_OK_STATUS).json(talkersJson);
}
return response.status(200).json(talkerFind);
});
app.post('/talker',
tokenValid,
async (request, response) => {
const { name, age, talk } = request.body;
const talkers = await fs.readFile(path.join(__dirname, ARQUIVO), 'utf-8');
const talkersJson = JSON.parse(talkers);
const newTalker = {
name, age, talk, id: talkersJson.length + 1,
};
const valid = validTalker(newTalker);
if (valid.message) {
return response.status(400).json({ message: valid.message });
}
talkersJson.push(newTalker);
await fs.writeFile(path.join(__dirname, ARQUIVO), JSON.stringify(talkersJson));
return response.status(201).json(newTalker);
});
app.get('/talker', async (_request, response) => {
const talkers = await fs.readFile(path.join(__dirname, ARQUIVO), '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, ARQUIVO), '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);
});
// Verifica o email e a senha para realizar o login
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() });
});
app.listen(PORT, () => {
console.log('Online');
});
Editor is loading...
Leave a Comment