Ik ben wat analyse aan't doen over hoe we meldingen gaan tonen. Korte samenvatting, feedback altijd welkom:
- Na een reactie op mijn eigen content krijg ik default altijd een melding.
- Ik kan in mijn instellingen kiezen hoe ik een melding wil krijgen. (mail/website). Default enkel melding op website.
- Ik zie bovenaan in de header de meldingen (een icoon met een badge waar het aantal meldingen in staat). Klik ik daarop, schuift er een menu naar beneden met de laatste 5-10 meldingen. Om meer meldingen te zien klik ik op "meer meldingen".
- Als lid kan ik me abboneren op een forum bericht.
- Als lid kan ik me abboneren op een lid. Ik krijg van zijn/haar interactiviteit een melding.
- Als lid kan ik me abboneren op alle interactiviteit. Ik krijg van elke post/reactie op Sitemasters een melding. (typisch één die echte diehards/crew enkel kan instellen? Misschien pas na zoveel reputatie punten?)
Deze functionaliteiten kunnen achter bepaalde reputatiepunten gehangen worden, het is altijd wel fijn om iets te verdienen. Vinden jullie dat ook een goed idee?
Technisch wil ik het eigenlijk aanpakken door bij elke post in de database een record weg te schrijven in de db. Adhv de instellingen van een gebruiker filtert hij in deze tabel. Een extra tabel houdt bij welke meldingen gelezen zijn. Lijkt mij het meest performante, om het op deze manier te gaan bijhouden/lezen.
Moet daar niet nog een kenmerk bij, op grond waarvan iets interessant is? Bijvoorbeeld "dit zijn nieuwe items van gebruiker X (omdat je gebruiker X volgt)". Op het moment dat je gebruiker X niet langer volgt, zou je dus al deze items (of deze nu gelezen zijn of niet) weg kunnen gooien.
En dan heb je mogelijk nog overlap, bijvoorbeeld je trackt alles van forum X, maar ook van gebruiker Y. Ik neem aan dat je dan niet twee nieuwe items ontvangt dat gebruiker Y iets in forum X gepost heeft? Omgekeerd moet dit item dan wel onthouden worden als je gebruiker Y niet langer volgt, maar wel forum X .
Wat ik handig zou vinden is om aan te kunnen geven van welke 'module' ik op de hoogte wil zijn.
Ik wil alle tutorials binnen krijgen.
Ik wil alle scripts binnen krijgen.
Ik wil forum berichten van {naam} binnenkrijgen.
Ik wil van dit forum bericht een melding krijgen bij activiteit.
Joel - 06/04/2016 15:05 (laatste wijziging 06/04/2016 15:10)
Eigenaar
Als er in de "activiteit" tabel enkele records staan van een persoon die je volgt, en je volgt die even later niet meer, dan zal bij de volgende keer dat je deze call maakt de meldingen van die persoon worden overgeslagen.
Dus de instellingen zijn eerder filters.
Als je ALLES wilt zien, ga je dus alles wat er is geinsert sinds [DateTime] gaan zien.
Dus die overlap heb je dus niet. Snap je? De tabel houdt dus niet echt de "meldingen" bij, maar eerder de "activiteit". Je zou ook in alle tabellen kunnen gaan zoeken, maar dat lijkt me qua performance minder interessant. Liefst heb ik in één tabel alle activiteit, is dan wel wat dubbele data, maar leest sneller en ook gemakkelijker om relaties op te leggen tussen persoon en de activiteit (al gelezen of niet?).
Om performance redenen kan ik er wel ook insteken dat je enkel in de activiteit van de laatste maand gaat zoeken. Maakt de query + code wat sneller, uiteindelijk wil je verder dan een maand toch niet de activiteit checken denk ik?
EDIT: Oké Wijnand, dat is inderdaad ook een goeie. Per module.
Hm, dan zul je wel goed moeten definiëren welke activiteiten er allemaal zijn.
Het plaatsen van een bericht kan dan resulteren in meerdere "activiteiten"?
En de diversiteit aan activiteiten wordt ook mede bepaald door wat je wilt volgen, en hoe je kunt volgen?
Stel dat je alles van gebruiker X wilt volgen, dan moet daar (o.a.) een corresponderende activiteit "gebruiker X heeft een nieuw bericht geplaatst" voor zijn?
Stel dat je alles van forum Y wilt volgen, dan moet daar (o.a.) een corresponderende activiteit "gebruiker X heeft een nieuw bericht geplaatst in forum Y" voor zijn?
Stel dat je alles met de tag Z wil volgen, dan moet daar (o.a.) een corresponderende activiteit "gebruiker X heeft op forum Y een bericht geplaatst met tag Z" voor zijn?
Terwijl dit allemaal een en hetzelfde evenement (het plaatsen van een bericht) betreft?
En zo ook voor andere modules mits van toepassing?
Ja klopt, dat wordt de moeilijke in het verhaal. Je moet dus per acitivteit genoeg meta data opslagen "int categorie, list<int> tagIds, int userId, enum module, ...".
Als we zien dat alle modules de content in dezelfde structuur opslaagt in de database kan dit wel gaan meevallen.
Moeten inderdaad ook zien dat er geen dubbele activiteiten worden getoond. Vanaf er één activiteit getoond wordt (omdat het vb matched met een tag), is't niet interessant om die nog eens te gaan tonen (omdat het ook matched met categorie). Dus daar moet de filtering inderdaad wel rekening mee houden, groeperen of distincten ofzo.
Ik denk dat ik hier klein mee ga beginnen, en rustig ga uitbreiden. Gemakkelijkst is om eerst alles gewoon te laten zien zonder filtering. En dan later in kleine stapjes extra filtering gaan inbouwen.