use axum::{Json, Router, extract::State, routing::post}; use serde::{Deserialize, Serialize}; use std::sync::Arc; use crate::error::ErrorResponse; use crate::state::AppState; #[derive(Debug, Deserialize)] pub struct LoginRequest { pub token: Option, } #[derive(Debug, Serialize)] pub struct LoginResponse { pub user_id: String, pub email: Option, pub roles: Vec, } pub async fn login_handler( State(state): State>, Json(req): Json, ) -> Result, ErrorResponse> { let token = req.token.ok_or_else(|| ErrorResponse { error: "Invalid input".to_string(), message: Some("Token field is required".to_string()), })?; let claims = state.dependencies.auth_service.authenticate(&token).await?; Ok(Json(LoginResponse { user_id: claims.user_id, email: claims.email, roles: claims.roles, })) } pub fn routes() -> Router> { Router::new().route("/login", post(login_handler)) }