// src/services/auth.rs use tonic::transport::Channel; use common::proto::KompAC::auth::{ auth_service_client::AuthServiceClient, LoginRequest, LoginResponse, RegisterRequest, AuthResponse, }; use anyhow::{Context, Result}; #[derive(Clone)] pub struct AuthClient { client: AuthServiceClient, } impl AuthClient { pub async fn new() -> Result { let client = AuthServiceClient::connect("http://[::1]:50051") .await .context("Failed to connect to auth service")?; Ok(Self { client }) } /// Login user via gRPC. pub async fn login(&mut self, identifier: String, password: String) -> Result { let request = tonic::Request::new(LoginRequest { identifier, password }); let response = self.client.login(request).await?.into_inner(); Ok(response) } /// Registers a new user via gRPC. pub async fn register( &mut self, username: String, email: String, password: Option, password_confirmation: Option, role: Option, ) -> Result { let request = tonic::Request::new(RegisterRequest { username, email, password: password.unwrap_or_default(), password_confirmation: password_confirmation.unwrap_or_default(), role: role.unwrap_or_default(), }); let response = self.client.register(request).await?.into_inner(); Ok(response) } }