# Kompetenzinventar Backend [![Build Status](https://drone.wtf-eg.de/api/badges/kompetenzinventar/ki-backend/status.svg?ref=refs/heads/main)](https://drone.wtf-eg.de/kompetenzinventar/ki-backend) [![REUSE status](https://api.reuse.software/badge/git.wtf-eg.de/kompetenzinventar/ki-backend)](https://api.reuse.software/info/git.wtf-eg.de/kompetenzinventar/ki-backend) ## Über Dieses Repo enthält das Backend des Projekts Kompentenzinventar - einer Webapplikation zur Erfassung von Userprofilen für die WTF eG. Implementiert ist das Backend mit Flask. ### Mitmachen Du kannst gerne bei der Entwicklung des Kompetenzinventars mitmachen. - Fehler oder fehlende Funktionen erfassen. Bitte direkt über die [Issues](https://git.wtf-eg.de/kompetenzinventar/ki-backend/issues) in Gitea. - Dokumentation oder Implementierung verbessern. Bitte forke hierzu das Projekt, branche von `main` ab und erstelle dann einen [Pull Request](https://git.wtf-eg.de/kompetenzinventar/ki-backend/pulls). ### Kommunikation Folgende Kanäle gibt es für die Kommunikation über das Kompetenzinventar: - Die [Issues](https://git.wtf-eg.de/kompetenzinventar/ki-backend/issues) im WTF Gitea. - Den Bereich [AG Entwicklung](https://forum.wtf-eg.de/c/interna/ag-entwicklung/21) im WTF Forum. - Einen Raum in Matrix. Zutritt per Einladung, frlan lädt ein, eine einfache PN im Forum reicht. ### Repos * **[ki-backend](https://git.wtf-eg.de/kompetenzinventar/ki-backend)** (dieses Repo) enthält das Backend * [ki-frontend](https://git.wtf-eg.de/kompetenzinventar/ki-frontend) enthält das Frontend * Weitere Repositories befinden sich in der Gitea Organisation [Kompetenzinventar](https://git.wtf-eg.de/kompetenzinventar). ## Entwicklung ### Abhängigkeiten - Python 3.8 - [Pipenv](https://github.com/pypa/pipenv) ### Entwicklungsumgebung aufbauen und starten Ggf. vorher aufräumen ``` rm storage/ki.sqlite ``` ``` cp env.dev .env pipenv install --dev pipenv shell flask db upgrade flask seed --dev flask run ``` http://localhost:5000/ ### pre-commit einrichten Damit mensch nicht verpeilt kaputten Code Style zu commiten, kann pre-commit benutzt werden. Einmal im Virtualenv ausführen: ``` pre-commit install ``` ### `alembic` Befehle `alembic` ist über [Flask-Migrate](https://flask-migrate.readthedocs.io/en/latest/index.html) eingebunden. Es wird über `flask db ...` aufgerufen. ### QA ``` python -m unittest discover ki # Code formatieren yapf -i --recursive ki/ # Code-Style prüfen flake8 ``` ### Testbenutzer #### Lokal ohne LDAP Für ein Login ohne LDAP werden die Benutzer aus der [`auth.yml`](./data/auth.yml) benutzt. #### Lokal mit LDAP Einen LDAP Server aufsetzen. Z.B. https://directory.apache.org/apacheds/ In der `.env` die LDAP Dinge ausfüllen (siehe [`env.dev`](./env.dev)). ### Beispiel-Requests Beispiele brauchen curl und jq. ``` curl -s \ -D "/dev/stderr" \ http://localhost:5000/skills?search=ph | jq ``` ``` curl -s \ -D "/dev/stderr" \ http://localhost:5000/languages?search=fr | jq ``` ``` curl -s \ -D "/dev/stderr" \ -X POST \ -H "Content-Type: application/json" \ -d '{"username": "peter", "password": "geheim"}' \ http://localhost:5000/users/login | jq ``` ``` curl -s \ -D "/dev/stderr" \ -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer 22e6c5fc-8a5a-440e-b1f4-018deb9fd24e" \ -d '{"pronouns": "Herr Dr. Dr."}' \ http://localhost:5000/users/1/profile | jq ``` ``` curl -s \ -D "/dev/stderr" \ -H "Authorization: Bearer 22e6c5fc-8a5a-440e-b1f4-018deb9fd24e" \ http://localhost:5000/users/1/profile ``` Profilsuche nach Nickname: ``` curl -s \ -D "/dev/stderr" \ -H "Authorization: Bearer 22e6c5fc-8a5a-440e-b1f4-018deb9fd24e" \ http://localhost:5000/users/profiles ``` ## Docker ### Image bauen ``` docker build --tag ki_backed . ``` ### Container starten Im Beispiel wird die SQLite Datenbank `./data/ki_backend.sqlite` verwendet. DB-Datei anlegen ``` touch data/ki_docker.sqlite chmod a+rw data/ki_docker.sqlite ``` Container starten ``` docker run \ --name=ki_backend \ -v ${PWD}/data/ki_docker.sqlite:/app/data/ki_docker.sqlite \ -e SQLALCHEMY_DATABASE_URI='sqlite:///data/ki_docker.sqlite' \ -p 5000:5000 \ ki_backend ``` Skills und Sprachen importieren ``` docker exec ki_backend sh -c "cd /app && /pyroot/bin/flask seed" ``` ## Produktionsumgebung Für die Produktionsumgebung wird [waitress](https://docs.pylonsproject.org/projects/waitress/en/latest/) benutzt. [`run_prod.py`](./run_prod.py) führt die DB Migrationen aus und startet den Server. ## Integrationsumgebung Per [`docker-compose`](https://docs.docker.com/compose/) kann eine Integrationsumgebung gestartet werden. Beide Projekte müssen nebeneinander ausgecheckt sein: ``` ./ ki-backend ki-frontend ``` Alles starten: ``` docker-compose up ``` Dann http://localhost:13337 aufrufen. ## Lizenzen Dieses Projekt erfüllt die [REUSE](https://reuse.software/) Spezifikation. Die Lizenzen aller Dateien im Projekt können mit diesem Kommando aufgelistet werden: ``` reuse spdx ```