From 686c0dec05026163e6074ac817e37ef30751c08d Mon Sep 17 00:00:00 2001 From: jxxghp Date: Mon, 19 Jun 2023 17:21:09 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E5=8E=86=E5=8F=B2=E8=AE=B0=E5=BD=95API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/apiv1.py | 5 +++- app/api/endpoints/history.py | 39 +++++++++++++++++++++++++ app/db/downloadhistory_oper.py | 6 ++++ app/db/models/downloadhistory.py | 4 +++ app/db/models/transferhistory.py | 9 ++++-- app/schemas/history.py | 49 ++++++++++++++++++++++++++++++++ 6 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 app/api/endpoints/history.py create mode 100644 app/schemas/history.py diff --git a/app/api/apiv1.py b/app/api/apiv1.py index 47ac15b9..84997941 100644 --- a/app/api/apiv1.py +++ b/app/api/apiv1.py @@ -1,6 +1,7 @@ from fastapi import APIRouter -from app.api.endpoints import login, user, site, message, webhook, subscribe, media, douban, search, plugin, tmdb +from app.api.endpoints import login, user, site, message, webhook, subscribe, \ + media, douban, search, plugin, tmdb, history api_router = APIRouter() api_router.include_router(login.router, tags=["login"]) @@ -14,3 +15,5 @@ api_router.include_router(search.router, prefix="/search", tags=["search"]) api_router.include_router(douban.router, prefix="/douban", tags=["douban"]) api_router.include_router(tmdb.router, prefix="/tmdb", tags=["tmdb"]) api_router.include_router(plugin.router, prefix="/plugin", tags=["plugin"]) +api_router.include_router(history.router, prefix="/history", tags=["history"]) +api_router.include_router(plugin.router, prefix="/plugin", tags=["plugin"]) diff --git a/app/api/endpoints/history.py b/app/api/endpoints/history.py new file mode 100644 index 00000000..863c578a --- /dev/null +++ b/app/api/endpoints/history.py @@ -0,0 +1,39 @@ +from typing import List, Any + +from fastapi import APIRouter, Depends +from sqlalchemy.orm import Session + +from app import schemas +from app.db import get_db +from app.db.models.downloadhistory import DownloadHistory +from app.db.models.transferhistory import TransferHistory +from app.db.models.user import User +from app.db.userauth import get_current_active_user + +router = APIRouter() + + +@router.get("/download", summary="下载历史记录", response_model=List[schemas.Context]) +async def download_history(page: int = 1, + count: int = 30, + db: Session = Depends(get_db), + _: User = Depends(get_current_active_user)) -> Any: + """ + 查询下载历史记录 + """ + return DownloadHistory.list_by_page(db, page, count) + + +@router.get("/transfer", summary="转移历史记录", response_model=List[schemas.TorrentInfo]) +async def transfer_history(title: str = None, + page: int = 1, + count: int = 30, + db: Session = Depends(get_db), + _: User = Depends(get_current_active_user)) -> Any: + """ + 查询转移历史记录 + """ + if title: + return TransferHistory.list_by_title(db, title, page, count) + else: + return TransferHistory.list_by_page(db, page, count) diff --git a/app/db/downloadhistory_oper.py b/app/db/downloadhistory_oper.py index 8008cd4f..7b19d997 100644 --- a/app/db/downloadhistory_oper.py +++ b/app/db/downloadhistory_oper.py @@ -30,3 +30,9 @@ class DownloadHistoryOper(DbOper): """ downloadhistory = DownloadHistory(**kwargs) return downloadhistory.create(self._db) + + def list_by_page(self, page: int = 1, count: int = 30): + """ + 分页查询下载历史 + """ + return DownloadHistory.list_by_page(self._db, page, count) diff --git a/app/db/models/downloadhistory.py b/app/db/models/downloadhistory.py index 18b9d295..239701ed 100644 --- a/app/db/models/downloadhistory.py +++ b/app/db/models/downloadhistory.py @@ -29,3 +29,7 @@ class DownloadHistory(Base): @staticmethod def get_by_hash(db: Session, download_hash: str): return db.query(DownloadHistory).filter(DownloadHistory.download_hash == download_hash).first() + + @staticmethod + def list_by_page(db: Session, page: int = 1, count: int = 30): + return db.query(DownloadHistory).offset((page - 1) * count).limit(count).all() diff --git a/app/db/models/transferhistory.py b/app/db/models/transferhistory.py index f025b936..74050134 100644 --- a/app/db/models/transferhistory.py +++ b/app/db/models/transferhistory.py @@ -29,5 +29,10 @@ class TransferHistory(Base): date = Column(String, index=True, default=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) @staticmethod - def search_by_title(db: Session, title: str): - return db.query(TransferHistory).filter(TransferHistory.title == title).all() + def list_by_title(db: Session, title: str, page: int = 1, count: int = 30): + return db.query(TransferHistory).filter(TransferHistory.title == title).offset((page - 1) * count).limit( + count).all() + + @staticmethod + def list_by_page(db: Session, page: int = 1, count: int = 30): + return db.query(TransferHistory).offset((page - 1) * count).limit(count).all() diff --git a/app/schemas/history.py b/app/schemas/history.py new file mode 100644 index 00000000..9e9e1b2b --- /dev/null +++ b/app/schemas/history.py @@ -0,0 +1,49 @@ +from typing import Optional + +from pydantic import BaseModel + + +class DownloadHistory(BaseModel): + id: int + path: Optional[str] = None + type: Optional[str] = None + title: Optional[str] = None + year: Optional[str] = None + tmdbid: Optional[int] = None + imdbid: Optional[str] = None + tvdbid: Optional[int] = None + doubanid: Optional[str] = None + seasons: Optional[str] = None + episodes: Optional[str] = None + image: Optional[str] = None + download_hash: Optional[str] = None + torrent_name: Optional[str] = None + torrent_description: Optional[str] = None + torrent_site: Optional[str] = None + note: Optional[str] = None + + class Config: + orm_mode = True + + +class TransferHistory(BaseModel): + id: int + src: Optional[str] = None + dest: Optional[str] = None + mode: Optional[str] = None + type: Optional[str] = None + category: Optional[str] = None + title: Optional[str] = None + year: Optional[str] = None + tmdbid: Optional[int] = None + imdbid: Optional[str] = None + tvdbid: Optional[int] = None + doubanid: Optional[str] = None + seasons: Optional[str] = None + episodes: Optional[str] = None + image: Optional[str] = None + download_hash: Optional[str] = None + date: Optional[str] = None + + class Config: + orm_mode = True