Bonjour,
Je suis en train de faire un site web où j'ai fais un système de connexion et de session. Je voudrai maintenant ajouter un système de likes, dont j'ai fais le modèle :
const mongoose = require('mongoose');
const uniqueValidator = require('mongoose-unique-validator');
const likeSchema = mongoose.Schema({
jikan_id: {type: String, required: true, unique: true},
title: {type: String, required: true},
url: {type: String, required: true},
userId: {type: String, required: true}
});
likeSchema.plugin(uniqueValidator);
module.exports = mongoose.model('like', likeSchema);
Sauf que je ne sais pas comment faire pour qu'il n'y ai qu'un seul jikan_id par userId. Je me retrouve donc à ne pouvoir ajouter qu'un seul like pour un user et les autres user ne peuvent pas ajouter le même like. Je vous demande alors si vous avez une solution à mon problème.
Hello :)
Alors pour les likes uniques tu peux faire une sous collection likes dans les posts, et cette collection sera une liste de user_id
post: {
name: ...
author: ...
likes: [
{user_id: "id_1"},
{user_id: "id_2"},
{user_id: "id_5"},
...
]
}
Et pour la vérification unique suffit de t'assurer que l'id de la personne qui veut liker n'est pas présente dans la liste
Si tu passes par Firebase il y a des fonctions d'indexations toutes pretes, ce serait plus pratique
Salut,
Merci pour ta réponse, je vois comment il faut faire à peu près. Seulement, je ne comprends pas très bien comment faire cela dans mon modèle mongoose.
Est ce que je dois faire une liste d'éléments de types String ou autre chose. Bref je ne comprends pas très bien.
De rien ;)
Pour le type alors si tu fonctionnes en id classique tu peux faire en type int ou string, si tu fonctionnes en UUID tu fais en type string
Après tu as des librairies mongoose pour avoir un type uuid, c'est mieux
et au moment du like tu récupères la liste des likes, et tu cherches
Ca c'est la version sans utiliser de lib uuid sans aucun index
if( likes.find((element) => element.uuid === current_user.uuid) ) {
console.log("do like")
} else {
console.log("dont do like")
}
Et avec une lib uuid, bah tu regarde ce que te dit la doc de la lib que tu aura choisis :)
Tu devrais pouvoir le faire via un index avec quelque chose comme ça :
likeSchema.index({ jikan_id: 1, userId: 1 }, { unique: true });