tdm_server_rust/web/
task_tracking_controller.rs1use crate::utils::query_deserialize::{de_opt_string, de_page, de_page_size};
7use crate::{
8 app::AppState,
9 common::{page_bean::PageBean, result::ResultBody},
10 entity::episode::{MemberTaskCount, PendingMangaTask, TaskTrackingResponse},
11 error::ApiResult,
12 service::task_tracking_service::TaskTrackingService,
13};
14use axum::{
15 extract::{Query, State},
16 routing::get,
17 Router,
18};
19use serde::Deserialize;
20
21#[derive(Debug, Deserialize)]
23#[serde(rename_all = "camelCase")]
24pub struct PendingMangaQuery {
25 #[serde(default, deserialize_with = "de_page")]
27 pub page: i32,
28 #[serde(default, deserialize_with = "de_page_size")]
30 pub page_size: i32,
31 #[serde(default, deserialize_with = "de_opt_string")]
33 pub manga_tran_name: Option<String>,
34}
35
36pub fn routes() -> Router<AppState> {
38 Router::new()
39 .route("/memberTaskCounts", get(get_member_task_counts))
40 .route("/episodeTasks", get(get_episode_tasks))
41 .route("/pendingMangaTasks", get(get_pending_manga_tasks))
42}
43
44#[tracing::instrument(skip_all, level = "info")]
46pub async fn get_member_task_counts(
47 State(state): State<AppState>,
48) -> ApiResult<ResultBody<Vec<MemberTaskCount>>> {
49 let data = TaskTrackingService::get_member_task_count_list(&state).await?;
50 Ok(ResultBody::success_data(data))
51}
52
53#[tracing::instrument(skip_all, level = "info")]
55pub async fn get_episode_tasks(
56 State(state): State<AppState>,
57) -> ApiResult<ResultBody<TaskTrackingResponse>> {
58 let data = TaskTrackingService::get_all_task(&state).await?;
59 Ok(ResultBody::success_data(data))
60}
61
62#[tracing::instrument(skip_all, level = "info")]
64pub async fn get_pending_manga_tasks(
65 State(state): State<AppState>,
66 Query(q): Query<PendingMangaQuery>,
67) -> ApiResult<ResultBody<PageBean<PendingMangaTask>>> {
68 let data = TaskTrackingService::get_pending_manga_tasks(
69 &state,
70 q.page,
71 q.page_size,
72 q.manga_tran_name,
73 )
74 .await?;
75 Ok(ResultBody::success_data(data))
76}