From c4d27a1187cbb1d9936c954d584f3ffed98a55b0 Mon Sep 17 00:00:00 2001 From: Schubert Ferenc Date: Thu, 2 Jul 2026 00:00:33 +0200 Subject: [PATCH] Benutzerverwaltung begonnen --- backend/hermes/alembic/env.py | 1 + backend/hermes/app/api/users.py | 24 +++++++++++++++++ backend/hermes/app/db/database.py | 7 ++--- backend/hermes/app/main.py | 15 +++++++++++ .../app/repositories/user_repository.py | 26 +++++++++++++++++++ backend/hermes/app/schemas/user.py | 17 ++++++++++++ backend/hermes/pyproject.toml | 1 + 7 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 backend/hermes/app/api/users.py create mode 100644 backend/hermes/app/repositories/user_repository.py create mode 100644 backend/hermes/app/schemas/user.py diff --git a/backend/hermes/alembic/env.py b/backend/hermes/alembic/env.py index c2a80b8..7ca767a 100644 --- a/backend/hermes/alembic/env.py +++ b/backend/hermes/alembic/env.py @@ -7,6 +7,7 @@ from alembic import context from app.core.config import settings from app.db.database import Base +import app.models.user config = context.config diff --git a/backend/hermes/app/api/users.py b/backend/hermes/app/api/users.py new file mode 100644 index 0000000..e1cb0d3 --- /dev/null +++ b/backend/hermes/app/api/users.py @@ -0,0 +1,24 @@ +from fastapi import APIRouter, Depends +from sqlalchemy.orm import Session + +from app.db.database import get_db +from app.repositories.user_repository import UserRepository +from app.schemas.user import UserCreate, UserResponse + +router = APIRouter( + prefix="/users", + tags=["Users"] +) + + +@router.get("/", response_model=list[UserResponse]) +def get_users(db: Session = Depends(get_db)): + return UserRepository.get_all(db) + + +@router.post("/", response_model=UserResponse) +def create_user( + user: UserCreate, + db: Session = Depends(get_db) +): + return UserRepository.create(db, user) \ No newline at end of file diff --git a/backend/hermes/app/db/database.py b/backend/hermes/app/db/database.py index 60e12ae..e34f90a 100644 --- a/backend/hermes/app/db/database.py +++ b/backend/hermes/app/db/database.py @@ -4,7 +4,6 @@ from sqlalchemy.orm import sessionmaker from app.core.config import settings - engine = create_engine( settings.database_url, echo=False @@ -20,11 +19,13 @@ SessionLocal = sessionmaker( class Base(DeclarativeBase): pass +# <<< HIER IMPORTIEREN >>> +import app.models.user + def get_db(): db = SessionLocal() try: yield db finally: - db.close() - import app.models.user \ No newline at end of file + db.close() \ No newline at end of file diff --git a/backend/hermes/app/main.py b/backend/hermes/app/main.py index 7db3816..8126180 100644 --- a/backend/hermes/app/main.py +++ b/backend/hermes/app/main.py @@ -1,12 +1,27 @@ from fastapi import FastAPI +from app.api.users import router as users_router from app.db.health import check_database +from fastapi.middleware.cors import CORSMiddleware + app = FastAPI( title="Hermes API", version="0.1.0", description="Backend von Olympus" ) +app.add_middleware( + CORSMiddleware, + allow_origins=[ + "http://localhost:3000", + "http://127.0.0.1:3000", + ], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +app.include_router(users_router) @app.get("/") diff --git a/backend/hermes/app/repositories/user_repository.py b/backend/hermes/app/repositories/user_repository.py new file mode 100644 index 0000000..e30d647 --- /dev/null +++ b/backend/hermes/app/repositories/user_repository.py @@ -0,0 +1,26 @@ +from sqlalchemy.orm import Session + +from app.models.user import User +from app.schemas.user import UserCreate + + +class UserRepository: + + @staticmethod + def get_all(db: Session): + return db.query(User).all() + + @staticmethod + def create(db: Session, user: UserCreate): + + db_user = User( + username=user.username, + email=user.email, + password_hash=user.password + ) + + db.add(db_user) + db.commit() + db.refresh(db_user) + + return db_user \ No newline at end of file diff --git a/backend/hermes/app/schemas/user.py b/backend/hermes/app/schemas/user.py new file mode 100644 index 0000000..ded4ce9 --- /dev/null +++ b/backend/hermes/app/schemas/user.py @@ -0,0 +1,17 @@ +from pydantic import BaseModel, EmailStr + + +class UserCreate(BaseModel): + username: str + email: EmailStr + password: str + + +class UserResponse(BaseModel): + id: int + username: str + email: EmailStr + + model_config = { + "from_attributes": True + } \ No newline at end of file diff --git a/backend/hermes/pyproject.toml b/backend/hermes/pyproject.toml index 682ad11..3e59c73 100644 --- a/backend/hermes/pyproject.toml +++ b/backend/hermes/pyproject.toml @@ -14,4 +14,5 @@ dependencies = [ "python-multipart>=0.0.32", "sqlalchemy>=2.0.51", "uvicorn>=0.49.0", + "email-validator>=2.2.0", ]