Talvez tenha passado despercebido, mas eu não entendi como o back end entende que a foto já foi curtida por determinado usuário, no post estamos passando apenas o 'photoId'.
Obrigado.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Talvez tenha passado despercebido, mas eu não entendi como o back end entende que a foto já foi curtida por determinado usuário, no post estamos passando apenas o 'photoId'.
Obrigado.
Fala ai Márcio, tudo bem? O id do usuário é pego dentro do token que é enviado no cabeçalho das requisições.
No caso seria esse middleware da API:
module.exports = async (req, res, next) => {
const token = req.headers['x-access-token'];
if (token) {
try {
const decoded = await verify(token, req.app.get('secret'));
console.log(`Valid token received: ${token}`);
req.user = decoded;
next();
} catch (err) {
console.log(err);
console.log(`Invalid token: ${token}`);
return res.sendStatus(401);
}
} else {
console.log('Toke is missing!');
return res.sendStatus(401);
}
}Repare que ele está verificando se existem o token, ou seja, se um cabeçalho com a chave x-access-token foi enviado. Se sim, ele decodifica o token e seta dentro da requisição através de uma propriedade user, ou seja, req.user = decoded.
E dentro da função de like:
api.like = async (req, res) => {
const { photoId } = req.params;
const dao = new PhotoDao(req.db);
const liked = await dao.likeById(photoId, req.user.id);
if(liked) {
console.log(`User ${req.user.name} liked photo ${photoId}`);
return res.status(201).end();
}
return res.status(304).end();
};Ele pega o id do usuário que foi decodificado pelo middleware através do req.user.id.
Espero ter ajudado.
Entendi Matheus, obrigado pela explicação!
Magina Marcio, sempre que precisar não deixe de criar suas dúvidas.
Abraços e bons estudos.