diff --git a/backend/dev.db b/backend/dev.db index fcfbf0a..0fe3af0 100644 Binary files a/backend/dev.db and b/backend/dev.db differ diff --git a/backend/pyrefly.toml b/backend/pyrefly.toml index 91fc77f..906a017 100644 --- a/backend/pyrefly.toml +++ b/backend/pyrefly.toml @@ -1 +1,5 @@ -[tool.pyrefly] \ No newline at end of file +[tool.pyrefly] + +project-includes = [ + "./**/*.py", +] \ No newline at end of file diff --git a/backend/src/backend/__pycache__/__init__.cpython-314.pyc b/backend/src/backend/__pycache__/__init__.cpython-314.pyc index baabfe1..e0ffbc4 100644 Binary files a/backend/src/backend/__pycache__/__init__.cpython-314.pyc and b/backend/src/backend/__pycache__/__init__.cpython-314.pyc differ diff --git a/backend/src/backend/__pycache__/dependencies.cpython-314.pyc b/backend/src/backend/__pycache__/dependencies.cpython-314.pyc new file mode 100644 index 0000000..8fe1123 Binary files /dev/null and b/backend/src/backend/__pycache__/dependencies.cpython-314.pyc differ diff --git a/backend/src/backend/__pycache__/main.cpython-314.pyc b/backend/src/backend/__pycache__/main.cpython-314.pyc index 44c34e8..cc7f219 100644 Binary files a/backend/src/backend/__pycache__/main.cpython-314.pyc and b/backend/src/backend/__pycache__/main.cpython-314.pyc differ diff --git a/backend/src/backend/dependencies.py b/backend/src/backend/dependencies.py new file mode 100644 index 0000000..49d6ead --- /dev/null +++ b/backend/src/backend/dependencies.py @@ -0,0 +1,13 @@ +from typing import Annotated + +from fastapi import Header, HTTPException + + +async def get_token_header(x_token: Annotated[str, Header()]): + if x_token != "fake-super-secret-token": + raise HTTPException(status_code=400, detail="X-Token header invalid") + + +async def get_query_token(token: str): + if token != "jessica": + raise HTTPException(status_code=400, detail="No Jessica token provided") \ No newline at end of file diff --git a/backend/src/backend/internal/__pycache__/__init__.cpython-314.pyc b/backend/src/backend/internal/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000..a6c85ca Binary files /dev/null and b/backend/src/backend/internal/__pycache__/__init__.cpython-314.pyc differ diff --git a/backend/src/backend/internal/__pycache__/database.cpython-314.pyc b/backend/src/backend/internal/__pycache__/database.cpython-314.pyc new file mode 100644 index 0000000..ab0bf1b Binary files /dev/null and b/backend/src/backend/internal/__pycache__/database.cpython-314.pyc differ diff --git a/backend/src/backend/internal/database.py b/backend/src/backend/internal/database.py new file mode 100644 index 0000000..16820d8 --- /dev/null +++ b/backend/src/backend/internal/database.py @@ -0,0 +1,16 @@ +from collections.abc import Generator +from sqlmodel import Session +from sqlmodel import SQLModel +from sqlmodel import create_engine +sqlite_file = "dev.db" +sqlite_url = f"sqlite:///{sqlite_file}" + +connect_args = {"check_same_thread": False} +engine = create_engine(sqlite_url, connect_args=connect_args) + +def create_db_and_tables(): + SQLModel.metadata.create_all(engine) + +def get_session() -> Generator[Session, None, None]: + with Session(engine) as session: + yield session diff --git a/backend/src/backend/main.py b/backend/src/backend/main.py index d6b4e54..8bb7703 100644 --- a/backend/src/backend/main.py +++ b/backend/src/backend/main.py @@ -1,56 +1,19 @@ -from email.policy import default -from typing import Annotated +from .routers import subscriptions +from backend.internal.database import create_db_and_tables from fastapi import APIRouter -from contextlib import asynccontextmanager -from fastapi import Depends from fastapi import FastAPI -from sqlmodel import Field, Session, SQLModel, create_engine, select -# TODO: sql zeugs richtig implementieren nach FastApi docs # TODO: Integrationtests schreiben # TODO: Api Specs definieren (Subscription, Comment, Like) # TODO: Settings hinzufügen -class Subscription(SQLModel, table=True): - id: int | None = Field(default=None, primary_key=True) - email: str = Field(index=True, unique=True) - active: bool = Field() - -sqlite_file = "dev.db" -sqlite_url = f"sqlite:///{sqlite_file}" - -connect_args = {"check_same_thread": False} -engine = create_engine(sqlite_url, connect_args=connect_args) - -def create_db_and_tables(): - SQLModel.metadata.create_all(engine) - -def get_session(): - with Session(engine) as session: - yield session - -SessionDep = Annotated[Session, Depends(get_session)] - app = FastAPI() @app.on_event("startup") def on_startup(): create_db_and_tables() - router = APIRouter() -@router.get("/subscription/") -def get_sub(): - return {"name":"TestSub"} - -@router.post("/subscription/") -def create_subscription(subscription: Subscription, session: SessionDep) -> Subscription: - session.add(subscription) - session.commit() - session.refresh(subscription) - return subscription - - -app.include_router(router) +app.include_router(subscriptions.router) diff --git a/backend/src/backend/routers/__pycache__/__init__.cpython-314.pyc b/backend/src/backend/routers/__pycache__/__init__.cpython-314.pyc index a0e08ca..5cd87a4 100644 Binary files a/backend/src/backend/routers/__pycache__/__init__.cpython-314.pyc and b/backend/src/backend/routers/__pycache__/__init__.cpython-314.pyc differ diff --git a/backend/src/backend/routers/__pycache__/subscriptions.cpython-314.pyc b/backend/src/backend/routers/__pycache__/subscriptions.cpython-314.pyc index 9298954..3d436a8 100644 Binary files a/backend/src/backend/routers/__pycache__/subscriptions.cpython-314.pyc and b/backend/src/backend/routers/__pycache__/subscriptions.cpython-314.pyc differ diff --git a/backend/src/backend/routers/subscriptions.py b/backend/src/backend/routers/subscriptions.py index fb8c9f8..3835620 100644 --- a/backend/src/backend/routers/subscriptions.py +++ b/backend/src/backend/routers/subscriptions.py @@ -1,20 +1,34 @@ -from sqlmodel import Field -from sqlmodel import SQLModel -from backend.main import SessionDep +from ..internal.database import get_session +from fastapi import Depends from fastapi import APIRouter +from sqlmodel import Field +from sqlmodel import SQLModel, Session -router = APIRouter() + +class Subscription(SQLModel, table=True): + id: int | None = Field(default=None, primary_key=True) + email: str = Field(index=True, unique=True) + active: bool = Field() +router = APIRouter( + prefix="/subscriptions", + tags=["subscriptions"], + dependencies=[], + responses={404: {"description": "Not found"}}, +) -# @router.get("/subscription/") -# def get_sub(): -# return {"name":"TestSub"} +@router.get("/") +def get_sub(): + return {"name":"TestSub"} -# @router.post("/subscription/") -# def create_subscription(subscription: Subscription, session: SessionDep) -> Subscription: -# session.add(subscription) -# session.commit() -# session.refresh(subscription) -# return subscription \ No newline at end of file +@router.post("/") +def create_subscription( + subscription: Subscription, + session: Session = Depends(get_session), +) -> Subscription: + session.add(subscription) + session.commit() + session.refresh(subscription) + return subscription \ No newline at end of file