36 lines
1.5 KiB
Rust
36 lines
1.5 KiB
Rust
use axum::{extract::State, http::StatusCode, response::IntoResponse, Json};
|
|
use api_types::{requests::{LoginRequest, RegisterRequest}, responses::{AuthResponse, UserResponse}};
|
|
use application::use_cases::auth::{login, register, LoginInput, RegisterInput};
|
|
use crate::{errors::ApiError, state::AppState};
|
|
|
|
pub fn to_user_response(u: &domain::models::user::User) -> UserResponse {
|
|
UserResponse {
|
|
id: u.id.as_uuid(),
|
|
username: u.username.to_string(),
|
|
display_name: u.display_name.clone(),
|
|
bio: u.bio.clone(),
|
|
avatar_url: u.avatar_url.clone(),
|
|
header_url: u.header_url.clone(),
|
|
local: u.local,
|
|
created_at: u.created_at,
|
|
}
|
|
}
|
|
|
|
pub async fn post_register(State(s): State<AppState>, Json(body): Json<RegisterRequest>) -> Result<impl IntoResponse, ApiError> {
|
|
let out = register(&*s.users, &*s.hasher, &*s.auth, &*s.events, RegisterInput {
|
|
username: body.username,
|
|
email: body.email,
|
|
password: body.password,
|
|
}).await?;
|
|
let resp = AuthResponse { token: out.token, user: to_user_response(&out.user) };
|
|
Ok((StatusCode::CREATED, Json(resp)))
|
|
}
|
|
|
|
pub async fn post_login(State(s): State<AppState>, Json(body): Json<LoginRequest>) -> Result<impl IntoResponse, ApiError> {
|
|
let out = login(&*s.users, &*s.hasher, &*s.auth, LoginInput {
|
|
email: body.email,
|
|
password: body.password,
|
|
}).await?;
|
|
Ok(Json(AuthResponse { token: out.token, user: to_user_response(&out.user) }))
|
|
}
|