async def get_by_subject_id(db: Database, subject_id: int,) -> Tuple[list, list]: s = await subject.get( db, sa.Subject.id == subject_id, sa.Subject.locked == 0, sa.Subject.map != 0, ) nodes = [ dict(x) async for x in db.iterate( sa.select( [ sa.Subject.id, sa.Subject.map, sa.Subject.name, sa.Subject.info, sa.Subject.image, sa.Subject.name_cn, sa.Subject.subject_type, ] ) .where(sa.Subject.map == s.map) .where(s.locked == 0) ) ] edges = [ dict(x) async for x in db.iterate( sa.select([sa.Relation]).where(sa.Relation.map == s.map) ) ] return nodes, edges
async def get_current_user( session: SessionValue = Depends(get_session), db: Database = Depends(get_db), ): r = await db.fetch_one( sa.select([sa.UserToken ]).where(sa.UserToken.user_id == session.user_id)) if not r: raise HTTPException(403)
async def get(db: Database, *where) -> sa.Subject: query = sa.select([sa.Subject]) for w in where: query = query.where(w) r = await db.fetch_one(query) try: return sa.Subject(**r) except Exception: raise NotFoundError()
async def get_all_episode_player( db: Database, ep_id: int, ) -> List[Union[sa.EpBilibili, sa.EpIqiyi]]: episodes = [] for model in (sa.EpBilibili, sa.EpIqiyi): r = await db.fetch_one(sa.select([model]).where(model.ep_id == ep_id)) if r: episodes.append(model(**r)) return episodes
async def get_all_bangumi_of_subject( db: Database, subject_id: int) -> List[Union[sa.BangumiBilibili, sa.BangumiIqiyi]]: bangumi_list = [] for model in (sa.BangumiBilibili, sa.BangumiIqiyi): r = await db.fetch_one( sa.select([model]).where(model.subject_id == subject_id)) if r: bangumi_list.append(model(**r)) return bangumi_list
async def get_subject_id( bangumi_id: str, source: SupportWebsite, db: Database = Depends(get_db), ): if source == SupportWebsite.bilibili.value: r = await db.fetch_one( sa.select([sa.BangumiBilibili ]).where(sa.BangumiBilibili.season_id == bangumi_id)) else: r = await db.fetch_one( sa.select([sa.BangumiIqiyi ]).where(sa.BangumiIqiyi.bangumi_id == bangumi_id)) if not r: raise HTTPException(404) resp = { "source": source, "bangumi_id": bangumi_id, **r, } return resp
async def select(db: Database, *where) -> List[sa.Subject]: query = sa.select([sa.Subject]) for w in where: query = query.where(w) return [sa.Subject(**r) for r in await db.fetch_all(query)]