mirror of
https://github.com/dat515-2025/Group-8.git
synced 2026-03-22 15:12:08 +01:00
refactor(backend): solve copilot comments
This commit is contained in:
@@ -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`.
|
|
||||||
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
# Konfigurace a utility
|
|
||||||
|
|
||||||
@@ -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 {}
|
||||||
|
|
||||||
|
|||||||
@@ -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...
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
# SQLAlchemy modely
|
|
||||||
|
|
||||||
@@ -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"
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
# Pydantic schémata
|
|
||||||
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
# Business logika
|
|
||||||
|
|
||||||
@@ -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")
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
# Background worker
|
|
||||||
|
|
||||||
@@ -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
|
|
||||||
|
|||||||
Reference in New Issue
Block a user