ki-doku/doc/source/architecture/overview.rst

246 lines
4.2 KiB
ReStructuredText
Raw Normal View History

Architecture
############
Systembeschreibung
==================
Die Kompentenzinventar-Software dient zur:
- Eintragung und Speicherung von Nutzerprofilen
- Suche nach Nutzerprofilen mit geeigneten Erfahrungen
Kompetenzinventar - Anforderungen
*********************************
- Kompetenz Verwaltung aller WTF Member (aktuell ca. 150) Tendenz stark wachsen
- Einfache Verwaltung eigener Kompetenzen, Business Wünsche
- Einfache Suche von Fähigkeiten
- Netzwerk
- Nur für Interne Verwendung
- xing aber intern
- Auf der Seite müssen SKills, Erfahrungen und Projektwünsche skizziert werden können
- Z.b. Scammo, Flensburg, Kann: Javascript, Vue, Projekte, PHP, Events Sucht: Projekte als Freelancer 8-40H; Spricht Deutsch und English;
- Muss einfach für die Member erreichbar sein; Primär die Pflege der Daten
- Sollte auch Member abholen, die nicht so viel Zeit bei der WTF
verbringen
Technisch
---------
- Muss WTF gehostet sein
- Bus Faktor aka Es darf nicht alles von einen Menschen abhängig machen
- Möglichst Resourcen Schonend in Entwicklung und Betrieb
Systemkontext
=============
2021-05-31 21:56:02 +02:00
Systemkontext Backend
*********************
.. uml:: systemcontext.plantuml.txt
Use cases
=========
Nutzerprofilverwaltung
**********************
Suche nach Mitgliedern
**********************
Datenmodell
===========
.. uml:: erdmodel.plantuml.txt
2021-05-31 21:56:02 +02:00
Überblick Rest API
==================
Authentifizierung
*****************
HTTP Bearer Token. Wird vom Backend verwaltet. Es gibt eine konfigurierbare, maximale Gültigkeit für einen Token.
Allgemeine Antworten:
* 401: Anfrage ohne Token
* 403: Token abgelaufen oder ungültig
Authorisierung
**************
* Zugriff nur mit Login
* Jeder eingloggte Benutzer darf alles sehen
* Ein Benutzer darf nur sein eigenes Profil bearbeiten
Endpunkte
*****************
POST `/users/login`
-------------------
Hiermit kann sich ein Benutzer anmelden. Der Endpunkt authentifiziert gegen LDAP.
Anfrage:
.. code-block:: text
:linenos:
{
"username": "peter",
"password": "asdasd"
}
Antwort:
**Status 200**
Login hat geklappt
.. code-block:: json
{
"token": "aSDASDADASDASD"
}
**Status 403**
Login hat nicht geklappt. Grund ist Benutzer existiert nicht oder Passwort war falsch. Kein weiterer Text über die API wegen Sicherheit.
DELETE `/users/login`
---------------------
Markiert den zur Request Authentifizierung verwendeten Token als nicht mehr gültig.
POST `/users/profile`
---------------------
Speichert ein Profil ab. Übertragene Daten entsprechen #3 im JSON Format.
Anfrage:
.. code-block:: json
{
"profile": {}
}
Antwort:
**Status 200**
Gespeichert, ok
**Status 400**
Validierung fehlgeschlagen
.. code-block:: json
{
"messages": {
"nickname": "Bitte ausfüllen"
}
}
GET `/users/{id}/profile`
-------------------------
Endpunkt um ein Profil gezielt nach ID abzurufen.
Antwort:
**Status 200**
Profil gefunden
.. code-block:: json
{
"profile": {}
}
GET `/users/profiles`
-------------------------
Suche nach Profilen mit Query-Parametern:
* `skill[]=PHP`
* `page=1` für die Paginierung
* `page_size=20` Einträge pro Seite
(Liste wird erweitert).
Antwort:
.. code-block:: json
{
"total": 23,
"profiles": []
}
* `total` Gesamtanzahl der passenden Profile
* `profils` Liste mit Profilen
GET `/skills`
-------------------------
Hier können die auswählbaren Fähigkeiten inkl. Autovervollständigung abgerufen werden sowie "Ich Suche".
* `search=an`
* Es werden 10 Einträge zurückgegeben
Antwort:
.. code-block:: json
{
"skills": [
{
"id": 23,
"name": "Angular"
},
{
"id": 42,
"name": "Anforderungs-Management"
}
]
}
GET `/skills/{id}/icon`
-----------------------
Icon einer Fähigkeit (weils gut ausschaut).
GET `/languages`
----------------
Abruf der Sprachen.
* `search=fra`
* Es werden 10 Einträge zurückgegeben
Antwort:
.. code-block:: json
{
"languages": [
{
"id": 23,
"name": "Französisch"
}
]
}
GET `/languages/{id}/icon`
--------------------------
Icon einer Sprache (weils gut ausschaut).