# Endorsement Zoals besproken op de eerste bestuursvergadering. ! Beware: UX is nog verschrikkelijk lelijk, functioneel werkt het wel ## Setup ```bash # Maak een virtualenv virtualenv -p python3 venv # Activeer de virtualenv . ./venv/bin/activate # Installeer de packages pip install -r requirements.txt # Vraag de Zeus-key en secret aan de dichtsbijzijnde sysadmin en edit config.py cp config.example.py config.py vim config.py # Maak de databases setup_db.py # Voor testing (voegt een paar test-users, achievements en endorsements toe aan de db) test.py ``` ## Endpoints ### Geen authenticatie - `/users`: Overzicht van alle users (default) - `/users/`: Achievements van de user `username` - `/login` en `/logout`: Laat de user aan- en afmelden - `/achievement/`: Een specifieke achievement ### Enkel bereikbaar na aanmelden - `/users//addachievement?name=XYZ`: Maakt een nieuw achievement aan bij `username` met naam `XYZ` en laat de ingelogde persoon endorsen - `/achievement//endorse`: Voegt de ingelogde persoon toe aan `endorsed_by` van achievement `id` - `/achievement//unendorse`: Verwijdert de ingelogde persoon van `endorsed_by` van achievement `id` ## DB model ### User | name | type | nullable | uniek | beschrijving | |--------|------------|----------|-------|--------------| | **id** | String(80) | False | True | de username | ### Achievement | name | type | nullable | uniek | beschrijving | |-------------|---------------|----------|-------|----------------------------------| | **id** | Integer | False | True | unieke id | | name | String(128) | False | False | beschrijving van de achievement | | achieved_by | FK -> user.id | False | False | wie de achievement gehaald heeft | ### Endorses Relatie tussen `User` en `Achievement` ## API ### /api/users Returnt een lijst van strings (usernames). ### /api/achievements Return een lijst van Achievement-objecten. Achievement-object: ```JSON { id: number -> Unieke id name: String -> Naam van het achievement endorsed_by: [String] -> Lijst van User-ids die deze achievement endorsen achieved_by: String -> User-id van de persoon die dit achievement gehaald heeft } ``` ### /api/all Returnt een lijst van User-objecten. User-object ```JSON { id: String -> Username achievement: [Achievement] -> Lijst met achievements van deze persoon } ``` ### /api/dot Returnt de [GraphViz-dot](https://www.graphviz.org/doc/info/lang.html) notatie van de endorsement-graaf. ### /api/svg Returnt de svg van de endorsement-graaf.