diff --git a/backend/README.md b/backend/README.md deleted file mode 100644 index b347228..0000000 --- a/backend/README.md +++ /dev/null @@ -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`. - diff --git a/backend/app/core/.keep b/backend/app/core/.keep deleted file mode 100644 index 7f9fbcf..0000000 --- a/backend/app/core/.keep +++ /dev/null @@ -1,2 +0,0 @@ -# Konfigurace a utility - diff --git a/backend/app/core/db.py b/backend/app/core/db.py index dd2e046..ff91c1a 100644 --- a/backend/app/core/db.py +++ b/backend/app/core/db.py @@ -1,6 +1,6 @@ import os 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") if not DATABASE_URL: @@ -14,15 +14,11 @@ if not DATABASE_URL: else: 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.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" connect_args = {"ssl": {"ssl": True}} if ssl_enabled else {} diff --git a/backend/app/core/queue.py b/backend/app/core/queue.py index 290a645..2aecf9e 100644 --- a/backend/app/core/queue.py +++ b/backend/app/core/queue.py @@ -32,5 +32,4 @@ def enqueue_email(to: str, subject: str, body: str) -> None: loop.create_task(_publish_async(message)) except RuntimeError: asyncio.run(_publish_async(message)) -# ...existing code... diff --git a/backend/app/models/.keep b/backend/app/models/.keep deleted file mode 100644 index 38c7d05..0000000 --- a/backend/app/models/.keep +++ /dev/null @@ -1,2 +0,0 @@ -# SQLAlchemy modely - diff --git a/backend/app/models/transaction.py b/backend/app/models/transaction.py index 5e91b4a..33de996 100644 --- a/backend/app/models/transaction.py +++ b/backend/app/models/transaction.py @@ -1,5 +1,5 @@ from sqlalchemy import Column, Integer, String, Float -from ..core.db import Base +from app.core.db import Base class Transaction(Base): __tablename__ = "transaction" diff --git a/backend/app/models/user.py b/backend/app/models/user.py index 6b8c4a5..654791b 100644 --- a/backend/app/models/user.py +++ b/backend/app/models/user.py @@ -1,6 +1,6 @@ from sqlalchemy import Column, String 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): first_name = Column(String(length=100), nullable=True) diff --git a/backend/app/schemas/.keep b/backend/app/schemas/.keep deleted file mode 100644 index e833315..0000000 --- a/backend/app/schemas/.keep +++ /dev/null @@ -1,2 +0,0 @@ -# Pydantic schémata - diff --git a/backend/app/services/.keep b/backend/app/services/.keep deleted file mode 100644 index 02b8235..0000000 --- a/backend/app/services/.keep +++ /dev/null @@ -1,2 +0,0 @@ -# Business logika - diff --git a/backend/app/services/user_service.py b/backend/app/services/user_service.py index 97ece3d..e92d9d3 100644 --- a/backend/app/services/user_service.py +++ b/backend/app/services/user_service.py @@ -11,9 +11,9 @@ from fastapi_users.authentication import ( ) from fastapi_users.db import SQLAlchemyUserDatabase -from ..models.user import User -from ..services.db import get_user_db -from ..core.queue import enqueue_email +from app.models.user import User +from app.services.db import get_user_db +from app.core.queue import enqueue_email SECRET = os.getenv("SECRET", "CHANGE_ME_SECRET") FRONTEND_URL = os.getenv("FRONTEND_URL", "http://localhost:5173") diff --git a/backend/app/workers/.keep b/backend/app/workers/.keep deleted file mode 100644 index efe70d3..0000000 --- a/backend/app/workers/.keep +++ /dev/null @@ -1,2 +0,0 @@ -# Background worker - diff --git a/backend/requirements.txt b/backend/requirements.txt index 080e15a..045371e 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -1,12 +1,12 @@ aio-pika==9.5.6 aiormq==6.8.1 aiosqlite==0.21.0 -alembic +alembic==1.16.5 annotated-types==0.7.0 anyio==4.11.0 argon2-cffi==23.1.0 argon2-cffi-bindings==25.1.0 -asyncmy +asyncmy==0.2.9 bcrypt==4.3.0 cffi==2.0.0 click==8.1.8 @@ -22,6 +22,8 @@ h11==0.16.0 httptools==0.6.4 idna==3.10 makefun==1.16.0 +Mako==1.3.10 +MarkupSafe==3.0.2 multidict==6.6.4 pamqp==3.3.0 propcache==0.3.2 @@ -30,12 +32,14 @@ pycparser==2.23 pydantic==2.11.9 pydantic_core==2.33.2 PyJWT==2.10.1 +PyMySQL==1.1.2 python-dotenv==1.1.1 python-multipart==0.0.20 PyYAML==6.0.2 sniffio==1.3.1 SQLAlchemy==2.0.43 starlette==0.48.0 +tomli==2.2.1 typing-inspection==0.4.1 typing_extensions==4.15.0 uvicorn==0.37.0 @@ -43,4 +47,3 @@ uvloop==0.21.0 watchfiles==1.1.0 websockets==15.0.1 yarl==1.20.1 -pymysql