4 Commits

Author SHA1 Message Date
78347140ae added entities for users experiences
splitted address into separate table
added types, length and Nullable information to attributes (based on flask data model)
2021-06-11 00:26:30 +02:00
e8cdb715f2 added user-> contact -> contact type relation 2021-06-08 22:14:58 +02:00
774168e93a authors added, set release to 0.0.2, only language 'de' is supported 2021-05-31 22:09:52 +02:00
58d0657657 added overview rest API 2021-05-31 21:56:02 +02:00
3 changed files with 264 additions and 46 deletions

View File

@ -7,92 +7,117 @@ hide circle
skinparam linetype ortho
entity "user" as user {
*user_id : number <<generated>>
*id : number <<generated>>
--
*nickname : text
*pronouns : text
*address_1_name: text
*address_2_additional: text
*address_4_street: text
*adress_house_number: text
*adress_city_code: text
*adress_country: text
*Ehrenaemter: text
*gravatar_email : text
*Freitext: text
*nickname : text(25)
pronouns : text(25)
fullname: text(100)
volunteerwork: text(4000)
freetext: text(4000)
*created: datetime
*updated: datetime
}
entity user_address {
*id : number <<generated>>
*userid
--
street: text(25)
house_number: text(10)
additional: text(25)
postcode: text(10)
city: text(25)
country: text(25)
}
user ||-o{ user_address : user_has_address
entity user_skill {
user_id: id
skill_id: id
*user_id: id
*skill_id: id
--
level: number
}
entity user_language {
user_id: id
language_id: id
*user_id: id
*language_id: id
--
level: number
}
entity skill {
skill_id
*id : number <<generated>>
--
*name: text
*name: text(25)
}
entity user_experience {
user_id
*id : number <<generated>>
*user_id
--
description
start: date
end: date
}
entity user_experience_experience {
*user_experience_id
*experience_id
}
user ||--o{ user_experience : user_has_experience
user_experience ||--o{ user_experience_experience : user_experience_is_tagged_with
entity experience {
*id : number <<generated>>
--
*name: text(25)
}
user_experience_experience }o--|| experience
entity user_search_topic {
user_id
topic_id
*user_id
*topic_id
--
}
entity user_contact {
user_id
contact_type_id
*id : number <<generated>>
*user_id
*contact_type_id
--
content_: text
*content: text(200)
}
entity topic {
topic_id
*id : number <<generated>>
--
*name: text
}
entity language {
id
*id : number <<generated>>
--
name: text
*name: text(25)
}
entity experience {
id
--
name: text
}
entity contact_types {
id
entity contact_type {
*id : number <<generated>>
--
name
*name: text(25)
}
user ||--o{ user_skill : user_has_skills
user_skill ||-o{ skill
user ||--o{ user_experience : user_has_experience
user_experience ||-o{ experience : user_experience_is_tagged_with
user ||-o{ user_language : user_speaks_language
user_language||-{ language
user ||-o{ user_search_topic
user_search_topic ||-o{ topic
user_skill ||--o{ skill
user ||--o{ user_language : user_speaks_language
user_language||--{ language
user ||--o{ user_search_topic
user_search_topic ||--o{ topic
user ||-o{ user_contact
user_contact ||-o{ contact_type
@enduml

View File

@ -34,6 +34,9 @@ Technisch
Systemkontext
=============
Systemkontext Backend
*********************
.. uml:: systemcontext.plantuml.txt
Use cases
@ -50,3 +53,193 @@ Datenmodell
.. uml:: erdmodel.plantuml.txt
Ü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).

View File

@ -19,10 +19,10 @@
project = 'kompetenzinventar'
copyright = '2021, diverse'
author = 'diverse'
author = 'Gulliver <gulliver@wtf-eg.de>, Scammo, Weeman'
# The full version, including alpha/beta/rc tags
release = '0.1'
release = '0.0.2'
# -- General configuration ---------------------------------------------------
@ -42,7 +42,7 @@ templates_path = ['_templates']
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = 'de en'
language = 'de'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.