Code clean up

This commit is contained in:
2022-04-10 16:40:56 +03:00
parent e536574e84
commit 138e0ffa2f
20 changed files with 12 additions and 525 deletions

View File

@@ -1,10 +1,4 @@
from typing import Union
from fastapi import HTTPException, status
from app.models import Author as AuthorDB
from app.models import Book as BookDB
from app.serializers.book import CreateBook, CreateRemoteBook
from app.services.common import (
TRGMSearchService,
MeiliSearchService,
@@ -40,55 +34,6 @@ class BookFilterService(BaseFilterService):
SELECT_RELATED = ["authors", "translators", "annotations"]
class BookCreator:
@classmethod
def _raise_bad_request(cls):
raise HTTPException(status.HTTP_404_NOT_FOUND)
@classmethod
async def _create_book(cls, data: CreateBook) -> BookDB:
data_dict = data.dict()
author_ids = data_dict.pop("authors", [])
authors = await AuthorDB.objects.filter(id__in=author_ids).all()
if len(author_ids) != len(authors):
cls._raise_bad_request()
book = await BookDB.objects.create(**data_dict)
for author in authors:
await book.authors.add(author)
return book
@classmethod
async def _create_remote_book(cls, data: CreateRemoteBook) -> BookDB:
data_dict = data.dict()
author_ids = data_dict.pop("remote_authors", [])
authors = await AuthorDB.objects.filter(
source__id=data.source, remote_id__in=author_ids
).all()
if len(author_ids) != len(authors):
cls._raise_bad_request()
book = await BookDB.objects.create(**data_dict)
for author in authors:
await book.authors.add(author)
return book
@classmethod
async def create(cls, data: Union[CreateBook, CreateRemoteBook]) -> BookDB:
if isinstance(data, CreateBook):
return await cls._create_book(data)
if isinstance(data, CreateRemoteBook):
return await cls._create_remote_book(data)
GET_OBJECTS_ID_QUERY = """
WITH filtered_books AS (
SELECT id FROM books

View File

@@ -1,57 +0,0 @@
from typing import Union
from fastapi import HTTPException, status
from app.models import Author as AuthorDB
from app.models import Book as BookDB
from app.models import Source as SourceDB
from app.models import Translation as TranslationDB
from app.serializers.translation import CreateTranslation, CreateRemoteTranslation
class TranslationCreator:
@classmethod
def _raise_bad_request(cls):
raise HTTPException(status.HTTP_404_NOT_FOUND)
@classmethod
async def _create_translation(cls, data: CreateTranslation) -> TranslationDB:
return await TranslationDB.objects.create(**data.dict())
@classmethod
async def _create_remote_translation(
cls, data: CreateRemoteTranslation
) -> TranslationDB:
source = await SourceDB.objects.get_or_none(id=data.source)
if source is None:
cls._raise_bad_request()
book = await BookDB.objects.get_or_none(
source__id=source.id, remote_id=data.remote_book
)
if book is None:
cls._raise_bad_request()
translator = await AuthorDB.objects.get_or_none(
source__id=source.id, remote_id=data.remote_translator
)
if translator is None:
cls._raise_bad_request()
return await TranslationDB.objects.create(
book=book.id,
translator=translator.id,
position=data.position,
)
@classmethod
async def create(
cls, data: Union[CreateTranslation, CreateRemoteTranslation]
) -> TranslationDB:
if isinstance(data, CreateTranslation):
return await cls._create_translation(data)
if isinstance(data, CreateRemoteTranslation):
return await cls._create_remote_translation(data)