use axum::{Json, extract::State, http::StatusCode}; use libertas_core::schema::{CreateUserData, LoginUserData}; use crate::{ error::ApiError, schema::{LoginRequest, LoginResponse, RegisterRequest, UserResponse}, state::AppState, }; pub async fn register( State(state): State, Json(payload): Json, ) -> Result<(StatusCode, Json), 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, storage_used: user.storage_used, storage_quota: user.storage_quota, }; Ok((StatusCode::CREATED, Json(response))) } pub async fn login( State(state): State, Json(payload): Json, ) -> Result, 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 fn auth_routes() -> axum::Router { axum::Router::new() .route("/register", axum::routing::post(register)) .route("/login", axum::routing::post(login)) }