# Team 1: API proposal
## Endpoints
### Afkortingen
- YA: Yes, all
- YO: Yes, own organisation
- YU: Yes, own user
- YIP: Yes, if permission from admin
- N: No
- IMed = Interne Medewerker van het MAGDA platform
- Admin = Administrator van organisatie
- Klant = klant/afnemer
- Andere = gebruiker die nog niet gelinkt is met organisatie
#### opmerkingen
- Super Admin? (= persoon die alles kan zien en doen, voor worst cases als bvb system failure)
### Organisaties
- IMed: Toegang tot gebruikers van alle organisaties
- Admin: Enkel toegang tot gebruikers van eigen organisaties
- Klant/Andere: Enkel toegang tot zichzelf als gebruiker
| HTTP method | CRUD | Endpoint | IMed | Admin | Klant | Andere |
| ----------- | ------ | ----------- |:----:|:-----:|:-----:|:------:|
| GET | Read | `/org` | YA | YO | YO | N |
| POST | Create | `/org` | YA | N | N | YU |
| GET | Read | `/org/{id}` | YA | YO | YO | YO |
| PATCH | Update | `/org/{id}` | YA | YO | N | YO |
| DELETE | Delete | `/org/{id}` | YA | YO | N | YO |
- Andere maakt organisatie aan, maar heeft geen organisatie op dat moment
#### opmerkingen
- `[JP]` willen we dat `other` (mogelijks random users) organisaties kunnen maken of enkel IMed? Zit in de CRO vraagskes :P
#### Dossiers van organisatie
iets van `/org/{id}/dossiers` ?
- vooral voor klantgericht gebruik
#### Gebruikers van organisatie
iets van `/org/{id}/gebruikers` ?
#### Machtigingen van organisatie
iets van `/org/{id}/machtigingen` ?
#### Diensten van organisatie
iets van `/org/{id}/diensten` ?
#### Pakketten van organisatie
iets van `/org/{id}/pakketten` ?
### Gebruikers
- IMed: Toegang tot gebruikers van alle organisaties
- Admin: Enkel toegang tot gebruikers van eigen organisaties
- Klant: Enkel toegang tot zichzelf als gebruiker, kan zichzelf niet verwijderen
- Andere: Kan zichzelf verwijderen (want niet meer gelinkt met een organisatie)
| HTTP method | CRUD | Endpoint | IMed | Admin | Klant | Andere |
| ----------- | ------ | ------------------ |:----:|:-----:|:-----:| :----: |
| GET | Read | `/gebruikers` | YA | N | N | N |
| POST | Create | `/gebruikers` | YA | N | N | N |
| GET | Read | `/gebruikers/{id}` | YA | YO | YU | YU |
| PATCH | Update | `/gebruikers/{id}` | YA | YO | YU | YU |
| DELETE | Delete | `/gebruikers/{id}` | YA | YO | N | YU |
### Dossier
- IMed: Toegang tot dossiers van alle organisaties
- Admin: Enkel toegang tot dossiers van eigen organisaties
- Klant: Enkel toegang tot dossiers van eigen organisaties, mits permissies van Admin
- Andere: Geen toegang tot dossiers, want niet gelinkt met organisatie
| HTTP method | CRUD | Endpoint | IMed | Admin | Klant | Andere |
| ----------- | ------ | ---------------- |:----:|:-----:|:-----:|:------:|
| GET | Read | `/dossiers` | YA | YO | YIP | N |
| POST | Create | `/dossiers` | YA | YO | YIP | N |
| GET | Read | `/dossiers/{id}` | YA | YO | YIP | N |
| PATCH | Update | `/dossiers/{id}` | YA | YO | YIP | N |
| DELETE | Delete | `/dossiers/{id}` | YA | YO | YIP | N |
#### opmerkingen
- `[JP]` zou dit mss niet beter aanvraag genoemd worden?
### Magda-diensten
- IMed: Toegang tot alle Magda-diensten
- Admin/Klant: Enkel lees-toegang tot het aanbod van Magda-diensten
- Andere: Geen toegang
| HTTP method | CRUD | Endpoint | IMed | Admin | Klant | Andere |
| ----------- | ------ | ---------------- |:----:|:-----:|:-----:|:------:|
| GET | Read | `/diensten` | YA | YA | YA | YA |
| POST | Create | `/diensten` | YA | N | N | N |
| GET | Read | `/diensten/{id}` | YA | YA | YA | YA |
| PATCH | Update | `/diensten/{id}` | YA | N | N | N |
| DELETE | Delete | `/diensten/{id}` | YA | N | N | N |
#### opmerkingen
### Pakket *(MS2)*
- IMed: Toegang tot alle Magda-pakketten
- Admin/Klant: Enkel lees-toegang tot het aanbod van Magda-pakketten
- Andere: Geen toegang
| HTTP method | CRUD | Endpoint | IMed | Admin | Klant | Andere |
| ----------- | ------ | -------------------- |:----:|:-----:|:-----:|:------:|
| GET | Read | `/pakketten` | YA | YA | YA | YA |
| POST | Create | `/pakketten` | YA | N | N | N |
| GET | Read | `/pakketten/{id}` | YA | YA | YA | YA |
| PATCH | Update | `/pakketten/{id}` | YA | N | N | N |
| DELETE | Delete | `/pakketten/{id}` | YA | N | N | N |
#### opmerkingen
- `[JP]` Pakket is nog niet nodig in de API voor milestone 1, dus kan nog veranderen en moet in principe niet in de API (maar mag al vastgelegd worden)
### Machtigingen
- IMed: Toegang tot alle Machtigingen
- Admin/Klant: Enkel lees-toegang tot het aanbod van Machtigingen
- Andere: Geen toegang
| HTTP method | CRUD | Endpoint | IMed | Admin | Klant | Andere |
| ----------- | ------ | -------------------- |:----:|:-----:|:-----:|:-----:|
| GET | Read | `/machtigingen` | YA | YA | YA | N |
| POST | Create | `/machtigingen` | YA | N | N | N |
| GET | Read | `/machtigingen/{id}` | YA | YA | YA | N |
| PATCH | Update | `/machtigingen/{id}` | YA | N | N | N |
| DELETE | Delete | `/machtigingen/{id}` | YA | N | N | N |
#### opmerkingen
## Andere vereisten
* [JWT tokens](https://jwt.io/) voor de authenticatie, makkelijk om rollen toe te voegen en veiliger dan cookies. ([Java JWT library](https://github.com/auth0/java-jwt))
* note, voor milestone 1 nog niet nodig (maar we kunnen het ook al vastleggen dat JWT gebruikt wordt)