Chatten - Steinberg99/DogeMeet GitHub Wiki
Een matchings applicatie moet gebruikers in contact met elkaar laten komen. Hiervoor is een chat feature nodig.
- Wanneer ik een match heb ontvangen,
wil ik met deze gebruiker in contact komen,
zodat ik met hem of haar kan afspreken voor een “DoggoDate”.
Met behulp van de chat feature kunnen gebruikers met elkaar in contact komen. Vanuit de matches pagina kunnen ze naar de verschillende chats navigeren. Gebruikers matchen op elkaars honden. Deze krijgen zo ook te zien wanneer ze met elkaar chatten. Deze chats zijn privé tussen twee gebruikers.
Voor het chatten maak ik gebruik van het npm pakket socket.io. Hiermee kan je live data versturen van de client naar de server. De server kan deze data vervolgens weer naar een andere client sturen. Op deze manier is het mogelijk om een chat functie te maken.
Zodra er een match ontstaat wordt er in de database een chat log aangemaakt. Hieronder staat hiervan een voorbeeld.
{
"_id": {
"$oid": "60c348f72e49f89cca2b97bb"
},
"doggo_ids": [
{
"$oid": "60bcc8bc9d28f5ae1a2fca2a"
},
{
"$oid": "60bcc8bc9d28f5ae1a2fca2b"
}
],
"messages": [
{
"sender_id": "60bcc8bc9d28f5ae1a2fca2a",
"content": "Hi! How r u today! Scooby is very cute :)",
"date": "2021-04-01T10:13:17.426Z"
},
{
"sender_id": "60bcc8bc9d28f5ae1a2fca2b",
"content": "I am good, wbu?",
"date": "2021-04-02T10:16:55.426Z"
},
{
"sender_id": "60bcc8bc9d28f5ae1a2fca2b",
"content": "Thank you! He is a good boy :)",
"date": "2021-04-02T10:17:31.426Z"
}
]
}
Deze chat log bestaat uit een array met de object ids van de honden die met elkaar chatten en een array met de messages die zijn verstuurd. Deze messages slaan ook op wie het bericht heeft gestuurd en wanneer het bericht is verstuurd.
Zodra een gebruiker een chat opent wordt hij in een zogenaamde room gegooid. Deze room krijgt als id het object id van de chat log. Zo kunnen beide gebruikers deze room joinen. Op deze manier is het mogelijk om privé brichten naar de andere gebruikers te sturen.
Voor het uitwerken van deze feature heb ik de topic "Real time data" toegepast.