refactor(backend): solve copilot comments

This commit is contained in:
2025-09-24 20:10:31 +02:00
parent 3c8ad5f74f
commit f4892a69d5
12 changed files with 14 additions and 50 deletions

View File

@@ -1,24 +0,0 @@
# Backend automatické migrace (Alembic)
## Automatické migrace
Při spuštění backendu v Dockeru se automaticky provedou migrace databáze pomocí Alembic (`alembic upgrade head`).
## Ruční práce s migracemi
- Vytvoření nové migrace podle modelů:
```sh
export DATABASE_URL='mysql+asyncmy://root:strongpassword@localhost:3306/group_project'
alembic revision --autogenerate -m "popis migrace"
```
- Aplikace migrací:
```sh
export DATABASE_URL='mysql+asyncmy://root:strongpassword@localhost:3306/group_project'
alembic upgrade head
```
## Poznámky
- Pro autogeneraci migrací je nutné mít nainstalován balíček `pymysql`.
- Modely pro migrace jsou v `app/db.py`.
- Konfigurace Alembic je v `alembic.ini` a `alembic/env.py`.

View File

@@ -1,2 +0,0 @@
# Konfigurace a utility

View File

@@ -1,6 +1,6 @@
import os import os
from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker
from app.core.base import Base # Import Base z nového souboru from app.core.base import Base
DATABASE_URL = os.getenv("DATABASE_URL") DATABASE_URL = os.getenv("DATABASE_URL")
if not DATABASE_URL: if not DATABASE_URL:
@@ -14,15 +14,11 @@ if not DATABASE_URL:
else: else:
raise Exception("Only MariaDB is supported. Please set the DATABASE_URL environment variable.") raise Exception("Only MariaDB is supported. Please set the DATABASE_URL environment variable.")
# Explicitní import všech modelů, aby byly registrovány v Base.metadata # Load all models to register them
from app.models.user import User from app.models.user import User
from app.models.transaction import Transaction from app.models.transaction import Transaction
from app.models.user import User
# Pokud máš další modely, importuj je zde:
# from app.models.other_model import OtherModel
ssl_enabled = os.getenv("MARIADB_HOST", "localhost") != "localhost" ssl_enabled = os.getenv("MARIADB_HOST", "localhost") != "localhost"
connect_args = {"ssl": {"ssl": True}} if ssl_enabled else {} connect_args = {"ssl": {"ssl": True}} if ssl_enabled else {}

View File

@@ -32,5 +32,4 @@ def enqueue_email(to: str, subject: str, body: str) -> None:
loop.create_task(_publish_async(message)) loop.create_task(_publish_async(message))
except RuntimeError: except RuntimeError:
asyncio.run(_publish_async(message)) asyncio.run(_publish_async(message))
# ...existing code...

View File

@@ -1,2 +0,0 @@
# SQLAlchemy modely

View File

@@ -1,5 +1,5 @@
from sqlalchemy import Column, Integer, String, Float from sqlalchemy import Column, Integer, String, Float
from ..core.db import Base from app.core.db import Base
class Transaction(Base): class Transaction(Base):
__tablename__ = "transaction" __tablename__ = "transaction"

View File

@@ -1,6 +1,6 @@
from sqlalchemy import Column, String from sqlalchemy import Column, String
from fastapi_users.db import SQLAlchemyBaseUserTableUUID from fastapi_users.db import SQLAlchemyBaseUserTableUUID
from ..core.base import Base # Import Base z base.py from app.core.base import Base # Import Base z base.py
class User(SQLAlchemyBaseUserTableUUID, Base): class User(SQLAlchemyBaseUserTableUUID, Base):
first_name = Column(String(length=100), nullable=True) first_name = Column(String(length=100), nullable=True)

View File

@@ -1,2 +0,0 @@
# Pydantic schémata

View File

@@ -1,2 +0,0 @@
# Business logika

View File

@@ -11,9 +11,9 @@ from fastapi_users.authentication import (
) )
from fastapi_users.db import SQLAlchemyUserDatabase from fastapi_users.db import SQLAlchemyUserDatabase
from ..models.user import User from app.models.user import User
from ..services.db import get_user_db from app.services.db import get_user_db
from ..core.queue import enqueue_email from app.core.queue import enqueue_email
SECRET = os.getenv("SECRET", "CHANGE_ME_SECRET") SECRET = os.getenv("SECRET", "CHANGE_ME_SECRET")
FRONTEND_URL = os.getenv("FRONTEND_URL", "http://localhost:5173") FRONTEND_URL = os.getenv("FRONTEND_URL", "http://localhost:5173")

View File

@@ -1,2 +0,0 @@
# Background worker

View File

@@ -1,12 +1,12 @@
aio-pika==9.5.6 aio-pika==9.5.6
aiormq==6.8.1 aiormq==6.8.1
aiosqlite==0.21.0 aiosqlite==0.21.0
alembic alembic==1.16.5
annotated-types==0.7.0 annotated-types==0.7.0
anyio==4.11.0 anyio==4.11.0
argon2-cffi==23.1.0 argon2-cffi==23.1.0
argon2-cffi-bindings==25.1.0 argon2-cffi-bindings==25.1.0
asyncmy asyncmy==0.2.9
bcrypt==4.3.0 bcrypt==4.3.0
cffi==2.0.0 cffi==2.0.0
click==8.1.8 click==8.1.8
@@ -22,6 +22,8 @@ h11==0.16.0
httptools==0.6.4 httptools==0.6.4
idna==3.10 idna==3.10
makefun==1.16.0 makefun==1.16.0
Mako==1.3.10
MarkupSafe==3.0.2
multidict==6.6.4 multidict==6.6.4
pamqp==3.3.0 pamqp==3.3.0
propcache==0.3.2 propcache==0.3.2
@@ -30,12 +32,14 @@ pycparser==2.23
pydantic==2.11.9 pydantic==2.11.9
pydantic_core==2.33.2 pydantic_core==2.33.2
PyJWT==2.10.1 PyJWT==2.10.1
PyMySQL==1.1.2
python-dotenv==1.1.1 python-dotenv==1.1.1
python-multipart==0.0.20 python-multipart==0.0.20
PyYAML==6.0.2 PyYAML==6.0.2
sniffio==1.3.1 sniffio==1.3.1
SQLAlchemy==2.0.43 SQLAlchemy==2.0.43
starlette==0.48.0 starlette==0.48.0
tomli==2.2.1
typing-inspection==0.4.1 typing-inspection==0.4.1
typing_extensions==4.15.0 typing_extensions==4.15.0
uvicorn==0.37.0 uvicorn==0.37.0
@@ -43,4 +47,3 @@ uvloop==0.21.0
watchfiles==1.1.0 watchfiles==1.1.0
websockets==15.0.1 websockets==15.0.1
yarl==1.20.1 yarl==1.20.1
pymysql