This commit is contained in:
2025-10-07 08:32:52 +02:00
parent 6ad98fee4c
commit 68d4fc9a36
20 changed files with 36 additions and 45 deletions

4
.flake8 Normal file
View File

@@ -0,0 +1,4 @@
[flake8]
#ignore = E226,E302,E41
max-line-length = 130
max-complexity = 10

View File

@@ -5,7 +5,7 @@ on:
branches:
- Development
jobs:
on-success:
check:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest
steps:
@@ -27,9 +27,3 @@ jobs:
- name: Run pylint
run: pylint frontend services utils
on-failure:
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
runs-on: ubuntu-latest
steps:
- run: echo 'The Review workflow failed'

View File

@@ -6,7 +6,7 @@ on:
- main
jobs:
on-success:
Unit-Test:
runs-on: ubuntu-latest
steps:
@@ -28,10 +28,4 @@ jobs:
# 6. Run unit tests
- name: Run pytest
run: pytest
on-failure:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
steps:
- run: echo 'The triggering workflow failed'
run: pytest

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,6 +1,6 @@
import logging
from flask import current_app, g
from flask import g
from .interface import DatabaseInterface

View File

@@ -1,5 +1,5 @@
from abc import ABC, abstractmethod
from typing import Any, Dict, List, Optional
from typing import Any, Dict, Optional
class DatabaseInterface(ABC):

View File

@@ -31,7 +31,7 @@ class SQLiteDatabase(DatabaseInterface):
self._local.connection.execute("PRAGMA synchronous=NORMAL")
self._local.connection.execute("PRAGMA cache_size=1000")
self._local.connection.execute("PRAGMA temp_store=MEMORY")
logger.debug(f"New SQLite connection created for thread")
logger.debug("New SQLite connection created for thread")
return self._local.connection
@@ -61,14 +61,14 @@ class SQLiteDatabase(DatabaseInterface):
try:
cursor.execute(
"""
CREATE TABLE IF NOT EXISTS users
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
email TEXT NOT NULL UNIQUE,
password_hash TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )
"""
CREATE TABLE IF NOT EXISTS users
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
email TEXT NOT NULL UNIQUE,
password_hash TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )
"""
)
conn.commit()
logger.info("User table created/verified")

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -12,39 +12,38 @@ class UserService:
def __init__(self, database: DatabaseInterface):
self.db = database
def create_user(
self, username: str, email: str, password: str
) -> tuple[bool, list[str]]:
errors = []
def create_user(self, username: str, email: str, password: str) -> tuple[bool, list[str]]:
errors = self._validate_user_inputs(username, email, password)
if errors:
return False, errors
# Validierung
errors = self._check_user_existence(username, email)
if errors:
return False, errors
password_hash = PasswordUtils.hash_password_simple(password)
return self._attempt_user_creation(username, email, password_hash)
def _validate_user_inputs(self, username: str, email: str, password: str) -> list[str]:
errors = []
if not ValidationUtils.validate_username(username):
errors.append("Invalid username format")
if not ValidationUtils.validate_email(email):
errors.append("Invalid email format")
password_valid, password_errors = ValidationUtils.validate_password(password)
if not password_valid:
errors.extend(password_errors)
return errors
if errors:
return False, errors
# Prüfe auf existierende User
def _check_user_existence(self, username: str, email: str) -> list[str]:
errors = []
if self.get_user_by_email(email):
errors.append("Email already registered")
if self.get_user_by_username(username):
errors.append("Username already taken")
return errors
if errors:
return False, errors
# Passwort hashen
password_hash = PasswordUtils.hash_password_simple(password)
# User erstellen
def _attempt_user_creation(self, username: str, email: str, password_hash: str) -> tuple[bool, list[str]]:
try:
success = self.db.create_user(username, email.lower(), password_hash)
if success:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.