change schema

This commit is contained in:
Thomas Peetz
2025-04-23 22:54:37 +02:00
parent 4709e431b7
commit cb0fa3f728
10 changed files with 69 additions and 62 deletions
+8
View File
@@ -19,6 +19,14 @@ class ComicDetailsResponse(BaseModel):
volumes: List[str]
works: Dict[str, List[str]]
def get_short_info(comic: Comic) -> ComicResponse:
reponse = ComicResponse(
id=comic.id,
title=comic.title,
completed=(comic.completed == 1)
)
return reponse
def get_comic_details(comic: Comic) -> ComicDetailsResponse | None:
volumes = []
+19 -2
View File
@@ -1,3 +1,4 @@
from datetime import datetime
from uuid import UUID
from src.schema.media import MediaFile
@@ -22,7 +23,23 @@ def get_file_details(mediafile: MediaFile) -> MediaFileResponse | None:
file_name=mediafile.file_name,
cloud_link=mediafile.cloud_link,
url=str(mediafile.url),
review=mediafile.review,
should_download=mediafile.should_download)
review=(mediafile.review == 1),
should_download=(mediafile.should_download == 1))
print(f"id: {mediafile.id}: review: {response.review} <- {mediafile.review}")
print(f"id: {mediafile.id}: download: {response.should_download} <- {mediafile.should_download}")
return response
def set_file(model: MediaFileResponse, mediafile: MediaFile) -> None:
mediafile.file_name = model.file_name
mediafile.cloud_link = model.cloud_link
mediafile.url = model.url
mediafile.title = model.title
mediafile.last_modified_date = datetime.now()
if model.review:
mediafile.review = 1
else:
mediafile.review = 0
if model.should_download:
mediafile.should_download = 1
else:
mediafile.should_download = 0
+5 -4
View File
@@ -3,7 +3,7 @@ from typing import List
from fastapi import APIRouter, HTTPException, status
from sqlalchemy import select
from src.models.comics.comic import ComicResponse, ComicDetailsResponse, get_comic_details
from src.models.comics.comic import ComicResponse, ComicDetailsResponse, get_comic_details, get_short_info
from src.models.comics.artist import ArtistCreation, ArtistDetailResponse, ArtistResponse, get_artist_details
from src.routers import SessionDep
from src.schema.comic import Comic, Artist
@@ -16,11 +16,12 @@ router = APIRouter(
@router.get("/comics")
def get_all_comics(db: SessionDep) -> list[ComicResponse]:
results: list[ComicResponse] = []
def get_all_comics(db: SessionDep) -> List[ComicResponse]:
results: List[ComicResponse] = []
comics = db.scalars(select(Comic)).all()
for comic in comics:
results.append(ComicResponse(id=comic.id, title=comic.title, completed=(comic.completed == 1)))
response = get_short_info(comic)
results.append(response)
return results
@router.get("/comics/{comic_id}", response_model=ComicDetailsResponse)
+10 -35
View File
@@ -1,11 +1,10 @@
from datetime import datetime
from typing import List
from uuid import uuid4, UUID
from uuid import UUID
from fastapi import APIRouter, status, HTTPException
from sqlalchemy import select, Sequence
from src.models.media.file import MediaFileResponse, Link, get_file_details
from src.models.media.file import MediaFileResponse, Link, get_file_details, set_file
from src.routers import SessionDep
from src.schema.media import MediaFile
@@ -21,13 +20,7 @@ def update_titles(db: SessionDep) -> list[MediaFileResponse]:
for mediafile in files:
mediafile.update_title()
db.add(mediafile)
response = MediaFileResponse(id=mediafile.id,
title=mediafile.title,
file_name=mediafile.file_name,
cloud_link=mediafile.cloud_link,
url=str(mediafile.url),
review=mediafile.review,
should_download=mediafile.should_download)
response = get_file_details(mediafile)
results.append(response)
db.commit()
return results
@@ -38,19 +31,13 @@ def get_all_files(db: SessionDep, review: bool = False, download: bool = False)
results: list[MediaFileResponse] = []
files: Sequence[MediaFile]
if review:
files = db.query(MediaFile).filter(MediaFile.review == review).all()
files = db.query(MediaFile).filter(MediaFile.review == 1).all()
elif download:
files = db.query(MediaFile).filter(MediaFile.should_download == download).all()
files = db.query(MediaFile).filter(MediaFile.should_download == 1).all()
else:
files = db.scalars(select(MediaFile)).all()
for mediafile in files:
response = MediaFileResponse(id=mediafile.id,
title=mediafile.title,
file_name=mediafile.file_name,
cloud_link=mediafile.cloud_link,
url=str(mediafile.url),
review=mediafile.review,
should_download=mediafile.should_download)
response = get_file_details(mediafile)
results.append(response)
return results
@@ -67,13 +54,7 @@ def update_file(file_id: UUID, db: SessionDep, info: MediaFileResponse) -> Media
mediaFile = db.get(MediaFile, file_id)
if not mediaFile:
raise HTTPException(status_code=404, detail="MediaFile could not be found")
mediaFile.file_name = info.file_name
mediaFile.cloud_link = info.cloud_link
mediaFile.url = info.url
mediaFile.title = info.title
mediaFile.last_modified_date = datetime.now()
mediaFile.review = info.review
mediaFile.should_download = info.should_download
set_file(info, mediaFile)
db.add(mediaFile)
db.commit()
return info
@@ -85,17 +66,11 @@ def add_file(new_link: Link, db: SessionDep) -> MediaFileResponse:
try:
mediaFile: MediaFile = MediaFile()
setattr(mediaFile, "url", new_link.url)
setattr(mediaFile, "review", True)
setattr(mediaFile, "should_download", True)
setattr(mediaFile, "review", 1)
setattr(mediaFile, "should_download", 1)
db.add(mediaFile)
db.commit()
except:
raise HTTPException(status_code=409, detail="Link duplicate")
response = MediaFileResponse(id=uuid4(),
title=mediaFile.title,
file_name=mediaFile.file_name,
cloud_link=mediaFile.cloud_link,
url=new_link.url,
review=mediaFile.review,
should_download=mediaFile.should_download)
response = get_file_details(mediaFile)
return response
+6 -5
View File
@@ -1,6 +1,7 @@
from datetime import datetime
from sqlalchemy import Column, ForeignKey, Integer, String, Boolean
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.dialects.mysql import BIT
from sqlalchemy.orm import relationship, mapped_column, Mapped
from .base import Base, BaseMixin
@@ -13,7 +14,7 @@ class User(Base, BaseMixin):
user_name = Column(String(255), nullable=False)
email = Column(String(255))
password = Column(String(255))
enabled = Column(Boolean)
enabled = Column(BIT(1))
matrix = relationship("AuthorizationMatrix")
tokens = relationship("Token")
@@ -33,7 +34,7 @@ class Token(Base, BaseMixin):
token = Column(String(255), nullable=False, unique=True)
name = Column(String(255))
last_used_date: Mapped[datetime] = mapped_column()
enabled = Column(Boolean)
enabled = Column(BIT(1))
user_id = Column(String(255), ForeignKey("user.id"), nullable=False)
user = relationship("User", back_populates="tokens")
@@ -55,7 +56,7 @@ class AuthorizationMatrix(Base, BaseMixin):
class ModuleData(Base, BaseMixin):
__tablename__ = "module_data"
module_name = Column(String(255), nullable=False)
import_data = Column(Boolean)
import_data = Column(BIT(1))
class MailAccount(Base, BaseMixin):
@@ -65,7 +66,7 @@ class MailAccount(Base, BaseMixin):
protocol = Column(String(255))
user_name = Column(String(255))
password = Column(String(255))
start_tls = Column(Boolean)
start_tls = Column(BIT(1))
class Mail(Base, BaseMixin):
+4 -3
View File
@@ -1,7 +1,8 @@
import uuid
from datetime import datetime
from sqlalchemy import func, Column, String, Boolean
from sqlalchemy import func, Column, String
from sqlalchemy.dialects.mysql import BIT
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
@@ -24,7 +25,7 @@ class BaseVideoMixin:
cloud_link = Column(String(255))
file_name = Column(String(255))
path = Column(String(255))
review = Column(Boolean)
review = Column(BIT(1))
title = Column(String(255))
url = Column(String(255), unique=True)
should_download = Column(Boolean)
should_download = Column(BIT(1))
+6 -5
View File
@@ -1,4 +1,5 @@
from sqlalchemy import Column, ForeignKey, Integer, String, Boolean
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.dialects.mysql import BIT
from sqlalchemy.orm import relationship
from .base import Base, BaseMixin
@@ -21,8 +22,8 @@ class Comic(Base, BaseMixin):
title = Column(String(length=255), unique=True)
publisher_id = Column(String, ForeignKey('publisher.id'), nullable=False)
publisher = relationship("Publisher", back_populates="comics")
current_order = Column(Boolean)
completed = Column(Boolean)
current_order = Column(BIT(1))
completed = Column(BIT(1))
issues = relationship("Issue")
story_arcs = relationship("StoryArc")
trade_paperbacks = relationship("TradePaperback")
@@ -63,8 +64,8 @@ class StoryArc(Base, BaseMixin):
class Issue(Base, BaseMixin):
__tablename__ = "issue"
issue_number = Column(String(255))
in_stock = Column(Boolean)
is_read = Column(Boolean)
in_stock = Column(BIT(1))
is_read = Column(BIT(1))
comic_id = Column(String, ForeignKey("comic.id"), nullable=False)
comic = relationship("Comic", back_populates="issues")
volume_id = Column(String, ForeignKey("volume.id"), nullable=True)
+3 -2
View File
@@ -5,7 +5,8 @@ from pathlib import Path
import requests
from bs4 import BeautifulSoup
from sqlalchemy import Column, String, ForeignKey, Boolean
from sqlalchemy import Column, String, ForeignKey
from sqlalchemy.dialects.mysql import BIT
from sqlalchemy.orm import relationship
from .base import Base, BaseMixin, BaseVideoMixin
@@ -83,7 +84,7 @@ class MediaActorFile(Base, BaseMixin):
class MediaArticle(Base, BaseMixin):
__tablename__ = 'media_article'
review = Column(Boolean)
review = Column(BIT(1))
title = Column(String(255))
url = Column(String(255), unique=True)
+4 -3
View File
@@ -1,4 +1,5 @@
from sqlalchemy import Column, String, ForeignKey, Integer, Boolean
from sqlalchemy import Column, String, ForeignKey, Integer
from sqlalchemy.dialects.mysql import BIT
from sqlalchemy.orm import relationship
from .base import Base, BaseMixin
@@ -27,8 +28,8 @@ class MetaDataColumn(Base, BaseMixin):
table = relationship("MetaDataTable", back_populates="table_columns")
column_label = Column(String(255))
filter_label = Column(String(255))
is_shown = Column(Boolean)
show_filter = Column(Boolean)
is_shown = Column(BIT(1))
show_filter = Column(BIT(1))
ref_column = Column(String, nullable=True)
def __repr__(self):
+4 -3
View File
@@ -1,4 +1,5 @@
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Boolean
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint
from sqlalchemy.dialects.mysql import BIT
from sqlalchemy.orm import relationship
from .base import Base, BaseMixin
@@ -77,8 +78,8 @@ class CardSet(Base, BaseMixin):
UniqueConstraint("name", "vendor_id"),
)
name = Column(String(255), index=True)
parallel_set = Column(Boolean)
insert_set = Column(Boolean)
parallel_set = Column(BIT(1))
insert_set = Column(BIT(1))
vendor_id = Column(String, ForeignKey("vendor.id"), nullable=False, index=True)
vendor = relationship("Vendor", back_populates="card_sets")
cards = relationship("Card")