Compare commits
6 Commits
733499303f
...
delete-a-u
Author | SHA1 | Date | |
---|---|---|---|
fc1681928b | |||
dea781cc29 | |||
4fab7d7cda | |||
a3919d5d51
|
|||
9baf08d6b6
|
|||
f131ee335c |
26
README.md
26
README.md
@ -9,6 +9,32 @@ SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
[](https://drone.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
|
||||
|
@ -3,3 +3,4 @@
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
from ki.actions.seed import seed # noqa
|
||||
from ki.actions.delete_profile import delete_profile # noqa
|
||||
|
52
ki/actions/delete_profile.py
Normal file
52
ki/actions/delete_profile.py
Normal file
@ -0,0 +1,52 @@
|
||||
# SPDX-FileCopyrightText: WTF Kooperative eG <https://wtf-eg.de/>
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
from sqlalchemy.exc import NoResultFound
|
||||
from app import app, db
|
||||
from ki.models import User
|
||||
import sys
|
||||
|
||||
|
||||
def delete_profile(nickname: str):
|
||||
|
||||
# Getting the user
|
||||
try:
|
||||
user = User.query.filter(User.auth_id.__eq__(nickname)).one()
|
||||
except NoResultFound:
|
||||
sys.exit(f'Username »{nickname}« not found')
|
||||
|
||||
app.logger.info(f'Starting to delete user »{nickname}.')
|
||||
|
||||
# Deleting associated languages skills
|
||||
try:
|
||||
for language in (user.profile.languages):
|
||||
print(language.language_id)
|
||||
app.logger.info(f'Deleting language skil »{language.language_id}« for »{nickname}«.')
|
||||
db.session.delete(language)
|
||||
db.session.commit()
|
||||
except AttributeError:
|
||||
# No languages left over
|
||||
pass
|
||||
|
||||
# Deleting associated skills
|
||||
try:
|
||||
app.logger.info(f'Deleting skils for »{nickname}«.')
|
||||
for skill in user.profile.skills:
|
||||
db.session.delete(skill)
|
||||
db.session.commit()
|
||||
except AttributeError:
|
||||
# No skills left over
|
||||
pass
|
||||
|
||||
# Cleaning up profile
|
||||
try:
|
||||
app.logger.info(f'Deleting profile for »{nickname}«.')
|
||||
db.session.delete(user.profile)
|
||||
except:
|
||||
# No profile to be deleted
|
||||
pass
|
||||
# Deleting the user
|
||||
app.logger.info(f'Delete user »{nickname}«.')
|
||||
db.session.delete(user)
|
||||
db.session.commit()
|
@ -6,9 +6,19 @@ import click
|
||||
|
||||
from app import app
|
||||
from ki.actions import seed
|
||||
from ki.actions import delete_profile
|
||||
|
||||
|
||||
@app.cli.command("seed")
|
||||
@click.option("--dev", is_flag=True)
|
||||
def seed_command(dev):
|
||||
seed(dev)
|
||||
|
||||
|
||||
@app.cli.command("delete", help="Delete a user profile")
|
||||
@click.option(
|
||||
"--profile",
|
||||
help="Username of profile",
|
||||
)
|
||||
def delete_command(profile):
|
||||
delete_profile(profile)
|
||||
|
@ -30,16 +30,10 @@ def update_languages(profile, languages_data):
|
||||
profile_language_ids = []
|
||||
|
||||
for language_data in languages_data:
|
||||
if "id" in language_data["language"]:
|
||||
if "id" not in language_data["language"]:
|
||||
continue
|
||||
|
||||
language = Language.query.get(language_data["language"]["id"])
|
||||
else:
|
||||
language_name = language_data["language"]["name"]
|
||||
language = Language.query.filter(Language.name == language_name).first()
|
||||
|
||||
if language is None:
|
||||
language = Language(id=language_name, name=language_name)
|
||||
db.session.add(language)
|
||||
|
||||
profile_language = ProfileLanguage.query.filter(ProfileLanguage.profile == profile,
|
||||
ProfileLanguage.language == language).first()
|
||||
|
||||
@ -150,7 +144,7 @@ def update_profile(user_id: int):
|
||||
try:
|
||||
availability_hours_per_week = int(availability_hours_per_week_raw)
|
||||
except:
|
||||
availability_hours_per_week = 0
|
||||
availability_hours_per_week = None
|
||||
|
||||
profile.availability_hours_per_week = availability_hours_per_week
|
||||
|
||||
|
Reference in New Issue
Block a user