diff --git a/backend/src/auth/db.py b/backend/src/auth/db.py index 2672054..017891b 100644 --- a/backend/src/auth/db.py +++ b/backend/src/auth/db.py @@ -5,8 +5,8 @@ from fastapi_users.db import SQLAlchemyBaseUserTableUUID, SQLAlchemyUserDatabase from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from sqlalchemy.orm import Mapped, relationship -import backend.src.database as database from backend.src.database import Base +from backend.src.database import db_url class OAuthAccount(SQLAlchemyBaseOAuthAccountTableUUID, Base): @@ -19,7 +19,7 @@ class User(SQLAlchemyBaseUserTableUUID, Base): ) -engine = create_async_engine(database.db_url, echo=False) +engine = create_async_engine(db_url, echo=False) async_session_maker = async_sessionmaker(engine, expire_on_commit=False) diff --git a/backend/src/database/__init__.py b/backend/src/database/__init__.py index 2d7f2a5..c5b2001 100644 --- a/backend/src/database/__init__.py +++ b/backend/src/database/__init__.py @@ -1,4 +1,5 @@ import logging +import pprint from contextvars import ContextVar from typing import Annotated, Any, Generator @@ -15,12 +16,16 @@ db_url = "postgresql+psycopg" + "://" + config.USER + ":" + config.PASSWORD + "@ config.PORT) + "/" + config.DBNAME engine = create_engine(db_url, echo=False) +log.debug("initializing sqlalchemy declarative base") Base = declarative_base() SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) def init_db() -> None: + log.debug("initializing database with following tables") + for table in Base.metadata.tables: + log.debug(f"Table: {table.title()}") Base.metadata.create_all(engine) diff --git a/backend/src/main.py b/backend/src/main.py index c3bf9d1..3cca40a 100644 --- a/backend/src/main.py +++ b/backend/src/main.py @@ -4,7 +4,6 @@ from logging.config import dictConfig from pythonjsonlogger.json import JsonFormatter -import router LOGGING_CONFIG = { "version": 1, @@ -46,22 +45,25 @@ logging.basicConfig(level=logging.DEBUG, ) log = logging.getLogger(__name__) -import database -import auth.users +from backend.src.database import init_db +import tv.router +import torrent.router +import auth.db -from auth.schemas import UserCreate, UserRead, UserUpdate -from auth.users import bearer_auth_backend, fastapi_users, cookie_auth_backend +init_db() +log.info("Database initialized") -from config import BasicConfig from auth.users import oauth_client -import auth.db # registering user table for sqlalchemy +import auth.users +import router +from config import BasicConfig + import uvicorn from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles - -import tv.router -import torrent.router +from auth.schemas import UserCreate, UserRead, UserUpdate +from auth.users import bearer_auth_backend, fastapi_users, cookie_auth_backend basic_config = BasicConfig() if basic_config.DEVELOPMENT: @@ -73,8 +75,6 @@ if basic_config.DEVELOPMENT: else: log.info("Development Mode not activated!") -database.init_db() -log.info("Database initialized") app = FastAPI(root_path="/api/v1") if basic_config.DEVELOPMENT: diff --git a/backend/src/torrent/dependencies.py b/backend/src/torrent/dependencies.py index b6ae237..ee4f961 100644 --- a/backend/src/torrent/dependencies.py +++ b/backend/src/torrent/dependencies.py @@ -2,7 +2,7 @@ from typing import Annotated from fastapi import Depends -from database import DbSessionDependency +from backend.src.database import DbSessionDependency from torrent.service import TorrentService diff --git a/backend/src/tv/models.py b/backend/src/tv/models.py index d49dc60..051ed29 100644 --- a/backend/src/tv/models.py +++ b/backend/src/tv/models.py @@ -65,7 +65,6 @@ class SeasonFile(Base): torrent = relationship("Torrent", back_populates="season_files", uselist=False) season = relationship("Season", back_populates="season_files", uselist=False) - class SeasonRequest(Base): __tablename__ = "season_request" __table_args__ = ( diff --git a/backend/src/tv/repository.py b/backend/src/tv/repository.py index 539a8a0..21fed5f 100644 --- a/backend/src/tv/repository.py +++ b/backend/src/tv/repository.py @@ -4,7 +4,6 @@ from sqlalchemy import select, delete, update from sqlalchemy.exc import IntegrityError from sqlalchemy.orm import Session, joinedload -import database from torrent.models import Torrent from torrent.schemas import TorrentId, Torrent as TorrentSchema from tv.models import Season, Show, Episode, SeasonRequest, SeasonFile @@ -212,6 +211,3 @@ def update_season_request(db: Session, season_request: SeasonRequestSchema) -> N db.commit() -if __name__ == "__main__": - session = database.sessionmaker(autocommit=False, autoflush=False, bind=database.engine)() - pprint.pprint(get_season_requests(db=session)) diff --git a/backend/src/tv/router.py b/backend/src/tv/router.py index fa925ec..7a1dd35 100644 --- a/backend/src/tv/router.py +++ b/backend/src/tv/router.py @@ -5,15 +5,15 @@ from fastapi.responses import JSONResponse import tv.repository import tv.service +from auth.db import User from auth.users import current_active_user, current_superuser -from database import DbSessionDependency +from backend.src.database import DbSessionDependency from indexer.schemas import PublicIndexerQueryResult, IndexerQueryResultId from metadataProvider.schemas import MetaDataProviderShowSearchResult from torrent.schemas import Torrent from tv.exceptions import MediaAlreadyExists from tv.schemas import Show, SeasonRequest, ShowId, RichShowTorrent, PublicShow, PublicSeasonFile, SeasonNumber, \ - CreateSeasonRequest, SeasonRequestId, UpdateSeasonRequest, RichSeasonRequest -from auth.db import User + CreateSeasonRequest, SeasonRequestId, UpdateSeasonRequest, RichSeasonRequest, SeasonId router = APIRouter() @@ -78,12 +78,6 @@ def get_season_files(db: DbSessionDependency, season_number: SeasonNumber, show_ return tv.service.get_public_season_files_by_season_number(db=db, season_number=season_number, show_id=show_id) -@router.get("/shows/{show_id}/{season_number}/requests", status_code=status.HTTP_200_OK, - dependencies=[Depends(current_active_user)], response_model=list[RichSeasonRequest]) -def get_season_files(db: DbSessionDependency, season_number: SeasonNumber, show_id: ShowId) -> list[RichSeasonRequest]: - return None - - # -------------------------------- # MANAGE REQUESTS # -------------------------------- @@ -103,7 +97,7 @@ def request_a_season(db: DbSessionDependency, user: Annotated[User, Depends(curr @router.get("/seasons/requests", status_code=status.HTTP_200_OK, dependencies=[Depends(current_active_user)]) def get_requested_seasons(db: DbSessionDependency) -> list[SeasonRequest]: - return tv.service.get_all_requested_seasons(db=db) + return tv.service.get_all_season_requests(db=db) @router.patch("/seasons/requests/{season_request_id}", status_code=status.HTTP_200_OK, response_model=SeasonRequest) diff --git a/backend/src/tv/service.py b/backend/src/tv/service.py index 65fe561..532cf89 100644 --- a/backend/src/tv/service.py +++ b/backend/src/tv/service.py @@ -148,7 +148,7 @@ def get_season(db: Session, season_id: SeasonId) -> Season: return tv.repository.get_season(season_id=season_id, db=db) -def get_all_requested_seasons(db: Session) -> list[SeasonRequest]: +def get_all_season_requests(db: Session) -> list[SeasonRequest]: return tv.repository.get_season_requests(db=db) @@ -186,10 +186,3 @@ def download_torrent(db: Session, public_indexer_result_id: IndexerQueryResultId add_season_file(db=db, season_file=season_file) return show_torrent - -def get_season_requests_by_season_id(db: Session, season_id: SeasonId) -> list[SeasonRequest]: - return [x for x in tv.repository.get_season_requests(db=db) if x.season_id == season_id] - - -def get_season_requests_by_show_id(db: Session, show_id: ShowId) -> list[SeasonRequest]: - return [x for x in tv.repository.get_season_requests(db=db) if x.show_id == show_id]