tdm_server_rust/web/
login_controller.rs1use crate::{
7 common::AppJson,
8 app::AppState,
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("/invitationCodes", get(get_invitation_codes).post(add_invitation_code))
26 .route("/invitationCodes/:id", delete(delete_invitation_code))
27}
28
29#[tracing::instrument(skip_all, level = "info")]
31pub async fn login(
32 State(state): State<AppState>,
33 AppJson(req): AppJson<MemberLoginRequest>,
34) -> ApiResult<ResultBody<String>> {
35 match LoginService::login(&state, req).await? {
36 Some(jwt) => Ok(ResultBody::success_data(jwt)),
37 None => Ok(ResultBody {
38 code: ErrorCode::SYSTEM_ERROR,
39 msg: "用户名(或者QQ号)与密码不匹配喵……".into(),
40 data: None,
41 }),
42 }
43}
44
45#[tracing::instrument(skip_all, level = "info")]
47pub async fn reg(
48 State(state): State<AppState>,
49 AppJson(body): AppJson<Reg>,
50) -> ApiResult<ResultBody<()>> {
51 LoginService::register(&state, body).await?;
52 Ok(ResultBody::success())
53}
54
55#[tracing::instrument(skip_all, level = "info")]
57pub async fn get_invitation_codes(
58 State(state): State<AppState>,
59) -> ApiResult<ResultBody<Vec<InvitationCode>>> {
60 let data = MemberService::get_invitation_codes(&state).await?;
61 Ok(ResultBody::success_data(data))
62}
63
64#[tracing::instrument(skip_all, level = "info")]
66pub async fn delete_invitation_code(
67 State(state): State<AppState>,
68 Path(id): Path<i32>,
69) -> ApiResult<ResultBody<()>> {
70 MemberService::delete_invitation_code(&state, id).await?;
71 Ok(ResultBody::success())
72}
73
74#[tracing::instrument(skip_all, level = "info")]
76pub async fn add_invitation_code(
77 State(state): State<AppState>,
78 AppJson(body): AppJson<InvitationCode>,
79) -> ApiResult<ResultBody<()>> {
80 MemberService::add_invitation_code(&state, body).await?;
81 Ok(ResultBody::success())
82}