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 skinparam linetype ortho
entity "user" as user { entity "user" as user {
*user_id : number <<generated>> *id : number <<generated>>
-- --
*nickname : text *nickname : text(25)
*pronouns : text pronouns : text(25)
*address_1_name: text fullname: text(100)
*address_2_additional: text volunteerwork: text(4000)
*address_4_street: text freetext: text(4000)
*adress_house_number: text *created: datetime
*adress_city_code: text *updated: datetime
*adress_country: text
*Ehrenaemter: text
*gravatar_email : text
*Freitext: text
} }
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 { entity user_skill {
user_id: id *user_id: id
skill_id: id *skill_id: id
-- --
level: number level: number
} }
entity user_language { entity user_language {
user_id: id *user_id: id
language_id: id *language_id: id
-- --
level: number level: number
} }
entity skill { entity skill {
skill_id *id : number <<generated>>
-- --
*name: text *name: text(25)
} }
entity user_experience { entity user_experience {
user_id *id : number <<generated>>
*user_id
-- --
description description
start: date start: date
end: 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 { entity user_search_topic {
user_id *user_id
topic_id *topic_id
--
} }
entity user_contact { entity user_contact {
user_id *id : number <<generated>>
contact_type_id *user_id
*contact_type_id
-- --
content_: text *content: text(200)
} }
entity topic { entity topic {
topic_id *id : number <<generated>>
-- --
*name: text *name: text
} }
entity language { entity language {
id *id : number <<generated>>
-- --
name: text *name: text(25)
} }
entity experience { entity contact_type {
id *id : number <<generated>>
-- --
name: text *name: text(25)
}
entity contact_types {
id
--
name
} }
user ||--o{ user_skill : user_has_skills user ||--o{ user_skill : user_has_skills
user_skill ||-o{ skill 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 ||-o{ user_language : user_speaks_language user_language||--{ language
user_language||-{ language
user ||-o{ user_search_topic user ||--o{ user_search_topic
user_search_topic ||-o{ topic user_search_topic ||--o{ topic
user ||-o{ user_contact
user_contact ||-o{ contact_type
@enduml @enduml

View File

@ -34,6 +34,9 @@ Technisch
Systemkontext Systemkontext
============= =============
Systemkontext Backend
*********************
.. uml:: systemcontext.plantuml.txt .. uml:: systemcontext.plantuml.txt
Use cases Use cases
@ -50,3 +53,193 @@ Datenmodell
.. uml:: erdmodel.plantuml.txt .. 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' project = 'kompetenzinventar'
copyright = '2021, diverse' copyright = '2021, diverse'
author = 'diverse' author = 'Gulliver <gulliver@wtf-eg.de>, Scammo, Weeman'
# The full version, including alpha/beta/rc tags # The full version, including alpha/beta/rc tags
release = '0.1' release = '0.0.2'
# -- General configuration --------------------------------------------------- # -- General configuration ---------------------------------------------------
@ -42,7 +42,7 @@ templates_path = ['_templates']
# #
# This is also used if you do content translation via gettext catalogs. # This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases. # 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 # List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files. # directories to ignore when looking for source files.