tdm_server_rust/web/
login_controller.rs1use crate::{
7 app::AppState,
8 common::AppJson,
9 common::{error_code::ErrorCode, result::ResultBody},
10 entity::member::{InvitationCode, MemberLoginRequest, Reg},
11 error::ApiResult,
12 service::{login_service::LoginService, member_service::MemberService},
13};
14use axum::{
15 extract::{Path, State},
16 routing::{delete, get, post},
17 Router,
18};
19
20pub fn routes() -> Router<AppState> {
22 Router::new()
23 .route("/login", post(login))
24 .route("/reg", post(reg))
25 .route(
26 "/invitationCodes",
27 get(get_invitation_codes).post(add_invitation_code),
28 )
29 .route("/invitationCodes/:id", delete(delete_invitation_code))
30}
31
32#[tracing::instrument(skip_all, level = "info")]
34pub async fn login(
35 State(state): State<AppState>,
36 AppJson(req): AppJson<MemberLoginRequest>,
37) -> ApiResult<ResultBody<String>> {
38 match LoginService::login(&state, req).await? {
39 Some(jwt) => Ok(ResultBody::success_data(jwt)),
40 None => Ok(ResultBody {
41 code: ErrorCode::SYSTEM_ERROR,
42 msg: "用户名(或者QQ号)与密码不匹配喵……".into(),
43 data: None,
44 }),
45 }
46}
47
48#[tracing::instrument(skip_all, level = "info")]
50pub async fn reg(
51 State(state): State<AppState>,
52 AppJson(body): AppJson<Reg>,
53) -> ApiResult<ResultBody<()>> {
54 LoginService::register(&state, body).await?;
55 Ok(ResultBody::success())
56}
57
58#[tracing::instrument(skip_all, level = "info")]
60pub async fn get_invitation_codes(
61 State(state): State<AppState>,
62) -> ApiResult<ResultBody<Vec<InvitationCode>>> {
63 let data = MemberService::get_invitation_codes(&state).await?;
64 Ok(ResultBody::success_data(data))
65}
66
67#[tracing::instrument(skip_all, level = "info")]
69pub async fn delete_invitation_code(
70 State(state): State<AppState>,
71 Path(id): Path<i32>,
72) -> ApiResult<ResultBody<()>> {
73 MemberService::delete_invitation_code(&state, id).await?;
74 Ok(ResultBody::success())
75}
76
77#[tracing::instrument(skip_all, level = "info")]
79pub async fn add_invitation_code(
80 State(state): State<AppState>,
81 AppJson(body): AppJson<InvitationCode>,
82) -> ApiResult<ResultBody<()>> {
83 MemberService::add_invitation_code(&state, body).await?;
84 Ok(ResultBody::success())
85}