feat: 初始提交

This commit is contained in:
anonymous
2025-10-21 09:38:26 +08:00
committed by t59688
parent 2965b8e28f
commit c9fc816fab
175 changed files with 23968 additions and 87 deletions

View File

@@ -0,0 +1,55 @@
from typing import Iterable, Optional
from sqlalchemy import select
from sqlalchemy.orm import selectinload
from .base import BaseRepository
from ..models import Chapter, NovelProject
class NovelRepository(BaseRepository[NovelProject]):
model = NovelProject
async def get_by_id(self, project_id: str) -> Optional[NovelProject]:
stmt = (
select(NovelProject)
.where(NovelProject.id == project_id)
.options(
selectinload(NovelProject.blueprint),
selectinload(NovelProject.characters),
selectinload(NovelProject.relationships_),
selectinload(NovelProject.outlines),
selectinload(NovelProject.conversations),
selectinload(NovelProject.chapters).selectinload(Chapter.versions),
selectinload(NovelProject.chapters).selectinload(Chapter.evaluations),
selectinload(NovelProject.chapters).selectinload(Chapter.selected_version),
)
)
result = await self.session.execute(stmt)
return result.scalars().first()
async def list_by_user(self, user_id: int) -> Iterable[NovelProject]:
result = await self.session.execute(
select(NovelProject)
.where(NovelProject.user_id == user_id)
.order_by(NovelProject.updated_at.desc())
.options(
selectinload(NovelProject.blueprint),
selectinload(NovelProject.outlines),
selectinload(NovelProject.chapters).selectinload(Chapter.selected_version),
)
)
return result.scalars().all()
async def list_all(self) -> Iterable[NovelProject]:
result = await self.session.execute(
select(NovelProject)
.order_by(NovelProject.updated_at.desc())
.options(
selectinload(NovelProject.owner),
selectinload(NovelProject.blueprint),
selectinload(NovelProject.outlines),
selectinload(NovelProject.chapters).selectinload(Chapter.selected_version),
)
)
return result.scalars().all()