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