Document - HeinPauwelyn/FreeTime GitHub Wiki


Inhoud

  1. Inhoud
  2. Introductie
  3. Werking van de site
    1. Blogs, reacties en commentaar
      1. Toevoegen van een blog of reactie
      2. Overzicht vzn alle blogs
    2. Punten systeem
      1. Stemmen op blogs en reacties
      2. Reputatie punten voor gebruikers
    3. Gebruikers
      1. Overzicht en profiel pagina
      2. Gebruiker rollen
    4. API's
      1. API-key aanvragen
      2. api/topic/geefTopics
      3. api/Stem/Toevoegen
    5. Registratie en aanmelden
      1. Registreren
      2. Aanmelden
      3. Aanwezige gebruikers
      4. Wachtwoord vergeten
    6. Admin tools
  4. De database
  5. Tijdbesteding

Introductie

Mijn project genaamd Free Time is gemaakt voor mensen die houden van extreme sporten. Je kan er blogs op aanmaken over volgende vier onderwerpen: lange wandelroutes, wintersporten, off-road sporten en motosport. Deze worden publiek opengesteld aan alle geregistreerde gebruikers. Slechts de beste drie blog per categorie worden aan de niet geregistreerde gebruikers opengesteld. In het document vind u extra ideeën en extra toevoegingen. De ideeën zijn niet verder uitgewerkt maar zijn features die later toegevoegd worden aan de site. Extra toevoegingen zijn dingen die niet gevraagd werden in de opgave maar toch toegevoegd werden aan de site. Ook zijn er verwijzingen naar websites voor extra documentatie te vinden over een bepaald iets. Ook wil ik melden dat er eerst een andere naam had bedacht nl. Fast Cycle vandaar ook overal de namespace FastCycle.

Werking van de site

Blogs, reacties en commentaar

Op de site kan je drie verschillende dingen posten nl. blogs, reacties en commentaren.

  • Blogs is de hoofdzaak van de site en is er het meeste mee te verdienen. Een blog is feitelijk een stuk test waarin een situatie, ervaring of belevenis word voorgesteld. Andere blog zoals reclame of blogs met politieke meningen en beledigende, vernederende of racistische context wordt gezien als spam en worden zo rap mogelijk verwijderd van de site.
  • Reacties en commentaar zijn toegelaten op alle blog. Het verschil tussen beiden is commentaar gebruikt wordt voor bv. Spelling of typfouten te melden aan de eigenaar van de post. Dit is al reeds voorzien in de database maar niet verder uitgewerkt. Reacties is voor verdere verklaring of een uitleg te geven over de blog. Dit is al volledig uitgewerkt.

Toevoegen van een blog of reactie

Voor een blog toe te voegen is er een speciale knop voorzien in het menu die u rechtstreeks naar de pagina brengt voor de actie uit te voeren.

Extra idee: Op deze pagina vind u een minitekst bewerker voor uw blog op te maken via markdown (zie MarkdownSharp) of wysiwyg notatie. Dit is echter nog niet verder uitgewerkt. Momenteel is dit nog tekst zonder opmaak en worden alle html-tags gecodeerd zodat HTML-injectie onmogelijk is.

Onderaan kan je een van de twee categorieën kiezen waarover uw blog gaat. In de aside kan je nog ideeën en tips vinden voor uw blog beter en mooier te maken.

Ook voor het toevoegen van reacties vind u dezelfde tekst bewerker voor aangemelde gebruikers, een registratie formulier voor de rest.

Overzicht van alle blogs

Op de pagina vind u een overzicht van alle blogs die aangemaakt werden door de gebruikers. U vind er o.a. het totaal aantal punten, een korte beschrijving (meestal de eerste twee lijnen van het volledige artikel), de titel, de eigenaar en de aanmaak datum. Deze staan standaard gesorteerd volgens aanmaak datum, de nieuwste eerst.

Ook staan er op één pagina maximaal 25 items. Alle andere blogs staan op alle pagina’s die erna komen. U kan gemakkelijk gaan navigeren door de pagina’s door de knoppen bovenaan en onderaan de pagina te gebruiken.

Voor deze logica wordt vooral uitgevoerd door de SQL server. Op hieronder vind u de volledige query-string. De vette nummers zijn variabelen die niet door de SQL server worden berekend maar via SQL parameters. Later meer over de database.

declare @pagina int = 1;
declare @items int; 
declare @paginas int;
declare @aantal int = (select count(t.id) 
                       from topic t inner join blog b on t.blogID = b.id 
                       where Verwijderd = 0 and (CategorieID = 6 or Categorieid = 7));

if(@aantal % 25 = 0) 
    set @paginas = @aantal / 25; 

else 
    set @paginas = @aantal / 25 + 1; 
	
if (@pagina = @paginas) 
    set @items = @aantal % 25; 

else if (@pagina > @paginas) begin 
    set @pagina = @aantal; 
    set @items = @aantal % 25; 
    end;
else if (@pagina <= 0) begin 
    set @pagina = 1; 
    set @items = 25; 
    end;
else 
    set @items = 25;

select topicid, blogID, naam, Verwijderd, Bekeken, creatie, CategorieID, GebruikerID, Tekst, mintwee, mineen,  pluseen, plustwee 
from (
    select top (@items) topicid, blogID, naam, Verwijderd, Bekeken, creatie, CategorieID, GebruikerID, Tekst, mintwee, mineen,  pluseen, plustwee 
    from (
        select top (@pagina * 25) t.id as topicid, b.id as blogid, naam, Verwijderd, creatie, Bekeken, CategorieID, GebruikerID, Tekst, mintwee, mineen, pluseen, plustwee 
        from topic t inner join blog b on t.blogID = b.id 
        where Verwijderd = 0 and (CategorieID = 6 or Categorieid = 7) 
        order by creatie desc
    )T
    order by creatie asc
)T
order by creatie desc;

Extra toevoeging: Op de pagina kan je ook gemakkelijk een blog zoeken op titel. Alle blogs die overeenkomen daarmee wordt dan getoond. Ook voor deze logica is grotendeels de SQL-server voor verantwoordelijk.

Punten systemen

Op de site zijn er twee punten systemen toegevoegd nl. een voor de posts en een voor de gebruikers. Ze worden hierna uitgebreid uiteglegd.

Stemmen op blogs en reacties

Op zowel reacties en blogs kan er gestemd worden. Je kan stemmen door op een van de gezichtjes te klikken bij een blog of reactie. Per reactie of blog kan elke gebruiker slechts één keer stemmen en wordt direct gezien als definitief. Je kan maximum vier punten geven tussen min twee en plus twee uitgezonderd nul. Het spreekt ook voor zich dat je niet op uw eigen posts kunt stemmen. Dit zou oneerlijk zijn t.o.v. gebruikers die dit niet doen.

Bij elke blog en reactie vind u onderstaande gezichten en nummers. Als je over de gezichtjes gaat met de muis worden ze gekleurd. Dit toont aan hoe je gaat stemmen, als je klikt wordt er een Ajax request gestuurd naar de server en wordt de stem wordt in aan database toegevoegd.

image

Letter Betekenis Uitleg
A Een blij gezichtje Dit kan je geven voor een redelijk goede post en stemt overeen met plus een punt voor de post.
B Een boos gezichtje Dit kan je geven voor een redelijk slechte post en stemt overeen met min een punt voor de post.
C Twee blije gezichtjes Dit kan je geven voor een heel goede post en stemt overeen met plus twee punten voor de post.
D Twee boze gezichtjes Dit kan je geven voor een heel slechte post en stemt overeen met min twee punten voor de post.
E Totaal aantal stemmen op de post. Hier wordt het totaal gegeven van alle voorgaande stemmen.

Het totaal aantal stemmen per post wordt berekend aan het aantal gezichtjes die gegeven werd. Een totaal van zeven punten kan berekend worden door bv. deze formule 6 * (+2) + 2 * (+1) + 5 * (-1) * 0 * (-2).

Aan de hand van deze formule weten we dat er zes keer twee punten, twee keer een punt en vijf keer min een punt gegeven werden. Hier werd er echter nul keer min twee punten gegeven. Deze berekening wordt op de server uitgevoerd en enkel het totaal wordt meegeven naar de browser.

De stemmen die de gebruiker uitbrengt worden dan wel opgeslaan in de database, maar toch is dit volledig anoniem! Alle gebruikers kunnen nooit zien wie er gestemd heeft op uw post ook niet op eigen posts of eigen toegediende stemmen. Weet ook dat je enkel kan stemmen vanaf 100 reputatie punten (uitleg zie verder). Dit werd speciaal gedaan voor het tegenhouden van meerdere accounts per gebruiker die enkel gebruikt worden door te stemmen op hun eigen posts en zo voor rapper reputatie punten te kunnen verdienen dan eerlijk gebruikers. Dit oneerlijk gebruik word sockpuppets of klonen genoemd.

Extra toevoeging: Je kan live de stemmen zien optellen of aftrekken doordat er gebruik gemaakt werd van SignalR. Zo kan je de beoordelingen volgen zonder de pagina te herladen.

Reputatie punten voor gebruikers

Reputatie punten zijn een goede indicator voor hoe vertrouwbaar de gebruiker is op de site. Deze kunnen verdiend worden door gebruik te maken van de site op een actieve en positieve manier. Reputatie punten zijn enkel te verdienen door de gekregen stemmen op blogs en reacties van andere gebruikers. Hieronder heeft u een overzicht hoeveel punten er te verdienen zijn op elke gekregen stem. Merk op dat er bij een slechte beoordeling punten verliest.

    | Twee negatieve stemmen (-2) | Een negatieve stem (-1) | Een positieve stem (+1) | Twee positieve stemmen (+2)

------: | :--: | :--: | :--: | :--: Blog | -5 | -3 | +5 | +10 Reactie | -10 | -5 | +3 | +5

De reden waarom blogs verschillend zijn, komt doordat blogs een belangrijkere waarde heeft op de site dan reacties. Zonder blogs kan de site namelijk niet werken. Ook bij een slechte beoordeling op een blog, wordt minder streng afgestraft dan een slechte reactie.

Extra idee: Bovenaan in de header van de site vind u overal deze twee iconen. Een extra idee was om hier de verdiende punten live (via SignalR) aan te tonen bij het linker icoon en nieuwe reacties of commetaren bij het rechter icoon door middel van een label die erbij geplaatst werd. Dit idee is echter nog niet uitgewerkt.

image

Gebruikers

Overzicht en profiel pagina

Op de website kan je ook een lijst vinden met alle gebruikers. Je kan er de naam (met link naar profiel pagina), profielfoto, aantal punten en favoriete categorieën zien. Op de profiel pagina kan je nog meer informatie vinden over deze gebruiker en zelf een klein tekstje over hem (nog te implementeren in de site). Je kan er ook direct de beste blogs van die gebruiker bekijken.

Merk wel op dat er gebruik gemaakt wordt van gebruikersnamen en e-mail adressen. Dat laatste wordt niet publiekelijk getoond en is dus volledig privé.

Gebruiker rollen

Op de site zijn er een drie tal rollen voor de gebruikers:

  • Gewone gebruikers: deze hebben de minste rechten en heb je al direct vanaf één reputatie punt.
  • Super gebruikers: vanaf 100 punten heb je deze rol. Als je dit hebt kan je stemmen op blog en reacties.
  • Administrator: vanaf 500 punten krijg je deze rol toegekend. Vanaf dan mag je de admin tools gebruiken (later meer hierover).

Indien je punten verliest en onder de kaap van 100 of 500 punten komt, verlies je ook deze rollen.

API’s

We stellen slechts één API ter beschikken voor alle topics op te halen. Toch is er een tweede ‘onzichtbare’ API aangemaakt voor te kunnen stemmen. Voor de API te gebruiken heb je een sleutel nodig.

API-key aanvragen

U kunt op de site één API key aanvragen per geregistreerde gebruiker. Deze is 45 karakters lang en bevat kleine en grote letters, cijfers en streepjes telkens op de negende, 18de, 27ste, 36ste en 45ste plaats. Deze key is zes maanden geldig en kan je verlengen voor opnieuw zes maanden beginnend na de oorspronkelijke vervaldatum vanaf de vijfde maand na aanvraag. De API-key zelf blijft hetzelfde.

Dit systeem is ontworpen voor niet of weinig gebruikte API’s te beheersen en te controleren.

api/topic/geefTopics

Op deze locatie vind u de API die voor iedereen ter beschikking is via een API-key. Als u deze API aanspreekt krijgt u alle blogs van de website.

api/Stem/Toevoegen

Deze API wordt beschermt van alle gebruikers. Toch wordt hij gebruikt door de site zelf voor het toevoegen van een stem. In het systeem is er ook een speciale gemeenschappelijke gebruiker toegevoegd met een API-key. Enkel deze key heeft toegang tot deze API. Deze API heeft echter een HTTP PUT-method.

Registratie en aanmelden

Registreren

Bij registratie geef vul je verschillende zaken in zoals uw e-mail adres, twee keer uw wachtwoord die je wilt gebruiken, uw gebruikersnaam en uw twee favoriete categorieën. Na het invullen krijgt u een e-mail met een link voor uw account te activeren vanaf dan kan je gebruik maken van de site. U kan natuurlijk ook registreren door gebruik te maken van Facebook.

Extra uitbreiding: Op de registratie pagina zie je ook een modernere reCAPTCHA staan waar u enkel een vinkje hoeft aan te vinken.

Aanmelden

U kan aanmelden op de site met uw e-mail adres en wachtwoord of via Facebook.

Aanwezige gebruikers

U kan zich aanmelden met een van de accounts in Excel tabel in bijlage één. U kan het ook vinden in het Excel bestand in de folder.

Wachtwoord vergeten

Als je uw vachtwoord vergeten bent, kan u gemakkelijk uw wachtwoord wijzigen. U krijgt een e-mail voor de link waar u je wachtwoord kan wijzigen na het invullen van een CAPTCHA.

Admin tools

Zoals reeds eerder gezegd kan je vanaf 500 punten de admin tools gebruiken. Deze is eigenlijk een grootte wachtrij van alle blogs die je kan beoordelen. Hier zijn er slechts twee mogelijkheden: goed of slecht. Alles wordt bijgehouden en als het verschil groter is dan drie, wordt de beslissing genomen door de server.

  • Indien de blog drie keer meer goed beoordeeld werd door drie verschillende gebruikers, wordt het uit de wachtrij gehaald en blijft de blog op de site staan.
  • Indien de blog drie keer meer slecht beoordeeld werd door drie verschillende gebruikers, wordt de blog verwijderd uit het systeem.

Het verschil moet altijd minstens drie zijn, dit is zo gemaakt voor foute beoordelingen te elimineren. Ook mogen administrators alle verwijderde items zien. Deze worden weergegeven door een light rode achtergrond.

De database

Hieronder vind u het volledige database schema op A3 formaat en als afbeelding in de folder. Een back-up van de database vind u als bak-bestand in dezelfde folder.

image

Tijdbesteding

In de zomervakantie, was ik al reeds begonnen met een gelijkaardig project als deze maar met webforms. Toch heb ik hiermee heb al wat tijd kunnen inwinnen op de andere studenten. De meeste tijd ging naar het maken van het overzicht en de detail pagina van de blog inclusief de SQL query’s, tabellen en migraties. Daarna het authenticatie en autorisatie systeem en het opzetten van database tabellen en tabel relaties.

De grootste problemen waren de migraties voor identity framework die niet lukten en het third party login systeem van Twitter en Google, die heb ik uiteindelijk heb laten vallen.