11from fastapi import APIRouter , Depends
22from fastapi .responses import JSONResponse
3+ from sqlalchemy .util .concurrency import asyncio
34
5+ from module .database import Database , engine
46from module .manager import TorrentManager
5- from module .models import APIResponse , Bangumi , BangumiUpdate
6- from module .security .api import UNAUTHORIZED , get_current_user
7+ from module .models import APIResponse , Bangumi , BangumiUpdate , ResponseModel
8+ from module .security .api import get_current_user
79
810from .response import u_response
911
@@ -20,8 +22,8 @@ def str_to_list(data: Bangumi):
2022 "/get/all" , response_model = list [Bangumi ], dependencies = [Depends (get_current_user )]
2123)
2224async def get_all_data ():
23- with TorrentManager () as manager :
24- return manager .bangumi .search_all ()
25+ with Database () as db :
26+ return db .bangumi .search_all ()
2527
2628
2729@router .get (
@@ -30,8 +32,7 @@ async def get_all_data():
3032 dependencies = [Depends (get_current_user )],
3133)
3234async def get_data (bangumi_id : str ):
33- with TorrentManager () as manager :
34- resp = manager .search_one (bangumi_id )
35+ resp = TorrentManager ().search_one (bangumi_id )
3536 return resp
3637
3738
@@ -44,8 +45,22 @@ async def update_rule(
4445 bangumi_id : int ,
4546 data : BangumiUpdate ,
4647):
47- with TorrentManager () as manager :
48- resp = manager .update_rule (bangumi_id , data )
48+ resp = await TorrentManager ().update_rule (bangumi_id , data )
49+ if resp :
50+ resp = ResponseModel (
51+ status_code = 200 ,
52+ status = True ,
53+ msg_en = f"Update rule for { data .official_title } " ,
54+ msg_zh = f"更新 { data .official_title } 规则" ,
55+ )
56+
57+ else :
58+ resp = ResponseModel (
59+ status_code = 406 ,
60+ status = False ,
61+ msg_en = f"Can't find data with { bangumi_id } " ,
62+ msg_zh = f"无法找到 id { bangumi_id } 的数据" ,
63+ )
4964 return u_response (resp )
5065
5166
@@ -55,8 +70,21 @@ async def update_rule(
5570 dependencies = [Depends (get_current_user )],
5671)
5772async def delete_rule (bangumi_id : str , file : bool = False ):
58- with TorrentManager () as manager :
59- resp = manager .delete_rule (bangumi_id , file )
73+ data ,torrent_message = await TorrentManager ().delete_rule (bangumi_id , file )
74+ if data :
75+ resp = ResponseModel (
76+ status_code = 200 ,
77+ status = True ,
78+ msg_en = f"Delete rule for { data .official_title } . { torrent_message .msg_en if file else '' } " ,
79+ msg_zh = f"删除 { data .official_title } 规则。{ torrent_message .msg_zh if file else '' } " ,
80+ )
81+ else :
82+ resp = ResponseModel (
83+ status_code = 406 ,
84+ status = False ,
85+ msg_en = f"Can't find id { bangumi_id } " ,
86+ msg_zh = f"无法找到 id { bangumi_id } " ,
87+ )
6088 return u_response (resp )
6189
6290
@@ -66,9 +94,12 @@ async def delete_rule(bangumi_id: str, file: bool = False):
6694 dependencies = [Depends (get_current_user )],
6795)
6896async def delete_many_rule (bangumi_id : list , file : bool = False ):
69- with TorrentManager () as manager :
70- for i in bangumi_id :
71- resp = manager .delete_rule (i , file )
97+ tasks = []
98+ for i in bangumi_id :
99+ tasks .append (TorrentManager ().delete_rule (i , file ))
100+
101+ resp = await asyncio .gather (* tasks )
102+ resp = resp [0 ]
72103 return u_response (resp )
73104
74105
@@ -78,8 +109,7 @@ async def delete_many_rule(bangumi_id: list, file: bool = False):
78109 dependencies = [Depends (get_current_user )],
79110)
80111async def disable_rule (bangumi_id : str , file : bool = False ):
81- with TorrentManager () as manager :
82- resp = manager .disable_rule (bangumi_id , file )
112+ resp = await TorrentManager ().disable_rule (bangumi_id , file )
83113 return u_response (resp )
84114
85115
@@ -89,9 +119,11 @@ async def disable_rule(bangumi_id: str, file: bool = False):
89119 dependencies = [Depends (get_current_user )],
90120)
91121async def disable_many_rule (bangumi_id : list , file : bool = False ):
92- with TorrentManager () as manager :
93- for i in bangumi_id :
94- resp = manager .disable_rule (i , file )
122+ tasks = []
123+ for i in bangumi_id :
124+ tasks .append (TorrentManager ().disable_rule (i , file ))
125+ resp = await asyncio .gather (* tasks )
126+ resp = resp [- 1 ]
95127 return u_response (resp )
96128
97129
@@ -101,8 +133,7 @@ async def disable_many_rule(bangumi_id: list, file: bool = False):
101133 dependencies = [Depends (get_current_user )],
102134)
103135async def enable_rule (bangumi_id : str ):
104- with TorrentManager () as manager :
105- resp = manager .enable_rule (bangumi_id )
136+ resp = await TorrentManager ().enable_rule (bangumi_id )
106137 return u_response (resp )
107138
108139
@@ -112,28 +143,30 @@ async def enable_rule(bangumi_id: str):
112143 dependencies = [Depends (get_current_user )],
113144)
114145async def refresh_poster ():
115- with TorrentManager () as manager :
116- resp = manager .refresh_poster ()
146+ resp = await TorrentManager ().refresh_poster ()
117147 return u_response (resp )
118148
149+
119150@router .get (
120151 path = "/refresh/poster/{bangumi_id}" ,
121152 response_model = APIResponse ,
122153 dependencies = [Depends (get_current_user )],
123154)
124- async def refresh_poster (bangumi_id : int ):
125- with TorrentManager () as manager :
126- resp = manager .refind_poster (bangumi_id )
155+ async def refresh_single_poster (bangumi_id : int ):
156+ resp = await TorrentManager ().refind_poster (bangumi_id )
127157 return u_response (resp )
128158
129159
130160@router .get (
131161 "/reset/all" , response_model = APIResponse , dependencies = [Depends (get_current_user )]
132162)
133163async def reset_all ():
134- with TorrentManager ( ) as manager :
135- manager .bangumi .delete_all ()
164+ with Database ( engine ) as db :
165+ db .bangumi .delete_all ()
136166 return JSONResponse (
137167 status_code = 200 ,
138- content = {"msg_en" : "Reset all rules successfully." , "msg_zh" : "重置所有规则成功。" },
168+ content = {
169+ "msg_en" : "Reset all rules successfully." ,
170+ "msg_zh" : "重置所有规则成功。" ,
171+ },
139172 )
0 commit comments