Skip to main content

fistinc_auth/api/controllers/
auth.rs

1use actix_web::web;
2use email_address::EmailAddress;
3use fistinc_errors::ApiResult;
4use serde::{Deserialize, Serialize};
5
6use crate::domain::entity::User;
7use crate::domain::services::UserAuthService;
8
9#[derive(Debug, Deserialize)]
10pub struct LoginRequest {
11    email: EmailAddress,
12    password: String,
13}
14
15#[derive(Debug, Serialize)]
16pub struct LoginResponse {
17    token: String,
18    user: User,
19}
20
21pub async fn login(
22    auth_service: web::Data<dyn UserAuthService>,
23    data: web::Json<LoginRequest>,
24) -> ApiResult<web::Json<LoginResponse>> {
25    let (user, token) =
26        auth_service.login(
27            &data.email,
28            &data.password,
29        ).await?;
30    let resp = LoginResponse { user, token };
31    Ok(web::Json(resp))
32}