Compare commits

...

17 Commits

Author SHA1 Message Date
jaschop 4a3065dc3c Merge pull request 'Added Dockerfile & docker build instructions' (#54) from dockerize into master
Reviewed-on: #54
2023-09-28 18:08:39 +02:00
jaschop 1a4dcecaac
added docker image size warning 2023-09-28 18:05:28 +02:00
jaschop 513bdc506b
added Dockerfile & docker build instructions in README
also some cleaning up of README
2023-09-28 17:59:12 +02:00
weeman 7ce61a9bc1
tweak issue templates 2022-01-14 16:06:21 +01:00
weeman fbd326b547
add feature templates 2022-01-14 16:04:36 +01:00
gulliver 904c7837d7 Merge pull request 'data model adapted to split between user and profile' (#11) from split_user_profile into master
Reviewed-on: #11
2021-09-09 19:56:56 +02:00
Gulliver b5e49346ee profile_visible -> visible
moved skill, experience, search_topic into tag and tag_type entity
moved relations from user to new profile entity
2021-07-01 09:16:14 +02:00
Gulliver e4c0459b60 Merge branch 'split_user_profile' of https://git.wtf-eg.de/kompetenzinventar/ki-doku into split_user_profile 2021-06-30 12:35:08 +02:00
Gulliver 10002757ab data model adapted to split between user and profile 2021-06-30 12:30:09 +02:00
Lukas Grossberger a28bf9676d update instructions for build dependencies
* typo in sphinx plantuml package name
* make python and system dependencies explicit
2021-06-30 12:24:40 +02:00
gulliver 22948e415b Merge pull request 'update instructions for build dependencies' (#13) from LukasGrossberger/ki-doku:readme-build-section into master
Reviewed-on: #13
2021-06-27 11:05:49 +02:00
Lukas Grossberger 7b171a7b58 update instructions for build dependencies
* typo in sphinx plantuml package name
* make python and system dependencies explicit
2021-06-26 23:28:48 +02:00
Gulliver 1ccc65a9e7 data model adapted to split between user and profile 2021-06-20 13:48:08 +02:00
Gulliver 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
Gulliver e8cdb715f2 added user-> contact -> contact type relation 2021-06-08 22:14:58 +02:00
Gulliver 774168e93a authors added, set release to 0.0.2, only language 'de' is supported 2021-05-31 22:09:52 +02:00
Gulliver 58d0657657 added overview rest API 2021-05-31 21:56:02 +02:00
7 changed files with 386 additions and 89 deletions

View File

@ -0,0 +1,37 @@
---
name: "Bug"
about: "Fehler melden"
labels:
- bug
---
## Zusammenfassung
*hier kurze Beschreibung des Problems einfügen*
## Schritte zum Nachstellen des Problems
*hier Schritte so auffschreiben, dass der Fehler nachgestellt werden kann, z.B.*
- Ich öffne die URL X
- Ich gebe `blubb` in das Name Feld ein
- Ich klicke auf den bunten Knopf
**Erwartetes Verhalten**
*hier hinschreiben, was passieren sollte, z.B.*
Ein Einhorn reitet von links nach rechts über den Bildschirm
**Aktuelles Verhalten**
*hier hinschreiben, was im Moment passiert; ggf. mit Video oder Screenshot ergänzen*
Ein Troll läuft von rechts nach links über den Bildschirm
## Sonstiges
- Betriebssystem (inkl. Version): **z.B. Ubuntu 20.04.3 LTS**
- Browser (inkl. Version): **z.B. Firefox 95.0.1 (64-bit)**

View File

@ -0,0 +1,24 @@
---
name: "Feature"
about: "Ein neues Feature bestellen"
labels:
- enhancement
---
## Zusammenfassung
*hier kurze Beschreibung des gewünschten Features einfügen*
## Anwendungsfall
*hier den Anwendungsfall beschreiben*
*Warum möchte ich das haben?*
*Wie soll das neue Feature funktionieren?*
## Anhänge
*gerne Skizzen einfügen*

8
Dockerfile Executable file
View File

@ -0,0 +1,8 @@
FROM sphinxdoc/sphinx-latexpdf
RUN pip3 install sphinxcontrib-plantuml
RUN apt-get update && apt-get install plantuml locales-all -y
ENV LC_ALL="de_DE.UTF8"
WORKDIR /doc
CMD ["make", "latexpdf", "singlehtml"]

View File

@ -13,28 +13,31 @@ Es existiert jweils ein Repo für den Frontend- und den Backend-Code:
- https://git.wtf-eg.de/kompetenzinventar/ki-frontend.git
- https://git.wtf-eg.de/kompetenzinventar/ki-backend.git
## Features ##
TBD
## Contents
- [Features](#features)
- [Building](#building)
- [Contributing](#contributing)
## Building
building the ki-doku depends on python, sphinx,
sphinx-contrib-plantuml und plantuml.
Building the ki-doku depends on the following Python packages:
* `sphinx`
* `sphinxcontrib-plantuml`
building/ using the ki-backend depends on python and flask.
as well as the system dependency `plantuml`, which you can get e.g. with `apt install plantuml`
### Building with Docker
You can also build the docs using docker:
docker build -t ki-doku-builder .
docker run -v $(pwd)/doc:/doc ki-doku-builder
# results:
# ./doc/build/latex/kompetenzinventar.pdf
# ./doc/build/singlehtml/
Warning: the builder uses the `sphinx-latexpdf` base image, which contains an entire texlive environment, making it very large (~2.9G).
<!-- ROADMAP -->
## Roadmap
See the [open issues](https://github.com/github_username/repo_name/issues) for a list of proposed features (and known issues).
<!-- CONTRIBUTING -->
## Contributing
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**.
@ -45,23 +48,14 @@ Contributions are what make the open source community such an amazing place to b
4. Push to the Branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request
(Pull requests currently require an account on our private gitea, but we faithfully await deliverance from our federated [lord and saviour](forgefed.org).)
<!-- LICENSE -->
## License
Distributed under the ??? License. See `LICENSE` for more information.
<!-- CONTACT -->
## Contact
<!--
Your Name - [@twitter_handle](https://twitter.com/twitter_handle) - email
-->
Project Link: [https://git.wtf-eg.de/kompetenzinventar](https://git.wtf-eg.de/kompetenzinventar)
<!-- ACKNOWLEDGEMENTS -->
## Acknowledgements
* []()
* []()
* []()

View File

@ -7,92 +7,133 @@ 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
*auth_id : text(50)
' *created: datetime
' *updated: datetime
}
entity user_skill {
user_id: id
skill_id: id
--
level: number
}
entity user_language {
user_id: id
language_id: id
--
level: number
}
entity skill {
skill_id
entity tag {
*id : number <<generated>>
*tag_type_id
--
*name: text
}
entity user_experience {
user_id
entity tag_type {
*id : number <<generated>>
--
*name: text
}
tag_type ||--o{ tag
entity profile {
*id : number <<generated>>
*user_id
--
*nick_name : text(25)
pronouns : text(25)
fullname: text(100)
volunteerwork: text(4000)
freetext: text(4000)
visible: bool
*created: datetime
*updated: datetime
}
user ||-o{ profile : user_has_profile
entity token {
*id : number <<generated>>
*user_id
--
*token : text(36)
}
user ||-o{ token : user_has_token
entity profile_address {
*id : number <<generated>>
*profile_id
--
street: text(25)
house_number: text(10)
additional: text(25)
postcode: text(10)
city: text(25)
country: text(25)
}
profile ||-o{ profile_address : profile_has_address
entity profile_skill {
*profile_id: id
*skill_id: id
--
*level: number
}
entity profile_language {
*profile_id: id
*language_id: id
--
level: number
}
entity profile_experience {
*id : number <<generated>>
*profile_id
--
description
start: date
end: date
}
entity profile_experience_experience {
*profile_experience_id
*experience_id
}
profile ||--o{ profile_experience : user_has_experience
profile_experience ||--o{ profile_experience_experience : user_experience_is_tagged_with
profile_experience_experience }o--|| tag
entity user_search_topic {
user_id
topic_id
*user_id
*topic_id
--
}
entity user_contact {
user_id
contact_type_id
entity profile_contact {
*id : number <<generated>>
*profile_id
*contact_type_id
--
content_: text
}
entity topic {
topic_id
--
*name: text
*content: text(200)
}
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
profile ||--o{ profile_skill : user_has_skills
profile_skill ||--o{ tag
profile ||--o{ profile_language : user_speaks_language
profile_language||--{ language
user ||--o{ user_search_topic
user_search_topic ||--o{ tag
profile ||-o{ profile_contact
profile_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.