Creating a like with Node.js and mongodb

Asked

Viewed 58 times

0

I’m creating a like where the action can be done only once per person, I perform the action with the user X the first time and it works and if he tries again he can’t, but when someone else gives the like the user X can even with her name already saved, I am saving the names of people giving like in an array within the receiver.

const mongoose = require('mongoose');

const Grap = mongoose.model('Usuario');
const Grap2 = mongoose.model('Job');

module.exports = {
async store(req, res){
    const { user } = req.headers;//pega o usuario logado.
    const { devId } = req.params;//pega o usuario selecionado e não logado.

    const UsuarioLogado = await Grap.findById(user);//não preciso mexer em nada aqui.
    const UsuarioReceptor = await Grap2.findById(devId);//Quem recebe o like

    try{
        if(UsuarioLogado.nome == UsuarioReceptor.nome)//para que o criador não possa dar like em si mesmo
            return res.status(400).json({error: 'Você não pode se avaliar'})

        UsuarioReceptor.likes.push(UsuarioLogado.nome);

        await UsuarioReceptor.save();//salva dentro do array.

    }catch{
        return res.status(400).send({error:'fail'});
    }

    return res.json(UsuarioLogado);//retorna para o usuario logado.
  }
};

and this is where the Ikes are saved

const SearchSchema = new Schema({
_id:{
    type: String,
    required: true,
},
nick:{
    type: String,
    required: true,
},
nome:{
    type: String,
    required: true,
},
elo:{
    type: String,
    required: true,
},
num:{
    type: String,
    required: false,
},
wpp:{
    type: String,
    required: true,
},
likes:{
    type: [String], <-- os likes são salvos aqui
    unique:false
},
}

1 answer

1


First you will have to filter the users within the array

const UsuarioReceptor = await Grap2.findById(devId);//não preciso mexer em nada aqui.

    --> const filterRocket = UsuarioReceptor.likes.filter(likes => likes.includes(UsuarioLogado.nome)); <-- adiciona isso

    try{

and then make the comparison

   if(UsuarioLogado.nome == filterRocket)//para que o usuário não possa dar like duas vezes.
            return res.status(400).json({error: 'Você Já deixou o seu like'})//retorna o aviso.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.