endorsement/README.md
2018-11-29 15:46:06 +01:00

104 lines
2.6 KiB
Markdown

# 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/<username>`: Achievements van de user `username`
- `/login` en `/logout`: Laat de user aan- en afmelden
- `/achievement/<id>`: Een specifieke achievement
### Enkel bereikbaar na aanmelden
- `/users/<username>/addachievement?name=XYZ`: Maakt een nieuw achievement aan bij `username` met naam `XYZ` en laat de ingelogde persoon endorsen
- `/achievement/<id>/endorse`: Voegt de ingelogde persoon toe aan `endorsed_by` van achievement `id`
- `/achievement/<id>/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.