This commit is contained in:
2025-11-02 09:31:01 +01:00
commit 455e144ffb
37 changed files with 4193 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
use axum::{Json, extract::State, http::StatusCode};
use libertas_core::schema::{CreateUserData, LoginUserData};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::{error::ApiError, middleware::auth::UserId, state::AppState};
#[derive(Deserialize)]
pub struct RegisterRequest {
pub username: String,
pub email: String,
pub password: String,
}
#[derive(Serialize)]
pub struct UserResponse {
id: Uuid,
username: String,
email: String,
}
pub async fn register(
State(state): State<AppState>,
Json(payload): Json<RegisterRequest>,
) -> Result<(StatusCode, Json<UserResponse>), ApiError> {
let user_data = CreateUserData {
username: &payload.username,
email: &payload.email,
password: &payload.password,
};
let user = state.user_service.register(user_data).await?;
let response = UserResponse {
id: user.id,
username: user.username,
email: user.email,
};
Ok((StatusCode::CREATED, Json(response)))
}
#[derive(Deserialize)]
pub struct LoginRequest {
pub username_or_email: String,
pub password: String,
}
#[derive(Serialize)]
pub struct LoginResponse {
token: String,
}
pub async fn login(
State(state): State<AppState>,
Json(payload): Json<LoginRequest>,
) -> Result<Json<LoginResponse>, ApiError> {
let login_data = LoginUserData {
username_or_email: &payload.username_or_email,
password: &payload.password,
};
let token = state.user_service.login(login_data).await?;
Ok(Json(LoginResponse { token }))
}
pub async fn get_me(
State(state): State<AppState>,
UserId(user_id): UserId,
) -> Result<Json<UserResponse>, ApiError> {
let user = state.user_service.get_user_details(user_id).await?;
let response = UserResponse {
id: user.id,
username: user.username,
email: user.email,
};
Ok(Json(response))
}