Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Curtidas por usuário

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.

3 respostas
solução!

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.