Doggos liken - Steinberg99/DogeMeet GitHub Wiki

Doggos opzoeken en liken door Stein

Een belangrijk onderdeel voor elke matchings applicatie is het zoeken naar en liken en disliken van andere gebruikers. Dit zit dus ook verwerkt in DogeMeet.

Job stories

Voor deze features had ik twee job stories geschreven.

  • Wanneer ik op zoek ben naar een “DoggoDate”,
    wil ik graag zoeken naar huisdieren van andere gebruikers,
    zodat ik met deze gebruikers in contact kan komen.
  • Wanneer ik een huisdier wel of niet leuk vind,
    wil ik hem een like of dislike kunnen geven,
    zodat ik verder kan zoeken naar andere honden.

De feature

Met behulp van deze features kunnen gebruikers elkaars honden een like of dislike geven. Hierdoor kunnen er matches ontstaan waardoor mensen met elkaar in contact kunnen komen. Om honden te vinden moet de gebruiker een zoekopdracht kunnen uitvoeren. Hiervoor kan hij een formulier invullen op de zoekpagina. De gebruiker ziet na het uitvoeren van deze zoekopdracht alleen nog honden die aan zijn criteria voldoen. Op dit formulier wordt er gebruik gemaakt van form validation. Een gebruiker kan dus niet een incompleet formulier inleveren.

Hoe werkt het?

Het liken

Het liken werkt heel eenvoudig. Er is een formulier aanwezig met daarin vier submit knoppen. Door te kijken naar welke submit knop is ingedrukt kan men zien of er een like of een dislike is gegeven. Hieronder staat het stuk code die dit controleert.

if (req.body.skip) {
  await database
    .collection("users")
    .updateOne(
      { _id: ObjectId(process.env.USER_ID) },
      { $push: { disliked_doggos: doggo._id } }
    ); // Dislike
} else {
  await database
    .collection("users")
    .updateOne(
      { _id: ObjectId(process.env.USER_ID) },
      { $push: { liked_doggos: doggo._id } }
    ); // Like
}

Als de skip knop is ingedrukt wordt het id van de huidige hond in de disliked doggos array gezet, anders de liked doggos array.

Het zoeken

Het zoeken is wat complexer. Na het invullen van het formulier wordt de body van het formulier omgezet in een query voor de database. Hiervoor wordt de onderstaande functie gebruikt.

async function getQuery(params) {
  try {
    // Get the current user
    const user = await database
      .collection("users")
      .findOne({ _id: ObjectId(process.env.USER_ID) });

    // Filter the doggos that have been liked, disliked or belong to the owner
    let likedDislikedDoggos = user.liked_doggos.concat(user.disliked_doggos);
    likedDislikedDoggos.push(user.doggo_id);

    // Get the selected location ids
    let selectedLocationIds = params.location_ids.map((id) => parseInt(id, 10));

    // Return the query
    return {
      _id: { $nin: likedDislikedDoggos },
      age: { $gt: 0, $lt: parseInt(params.age, 10) },
      doggo_vibe: { $in: params.doggo_vibes },
      location_id: { $in: selectedLocationIds },
    };
  } catch (error) {
    console.log(error);
  }
}

Zoals hier te zien is worden ook gelijk de liked en disliked honden uit de resultaten gefilterd. Ook worden de honden van de gebruiker zelf uit de resultaten gefilterd.

De homepagina

Home pagina

De zoekpagina

Zoek pagina

⚠️ **GitHub.com Fallback** ⚠️