slave 0.2.0

Laravel-inspired CLI for Rust web apps: scaffold Axum projects with built-in auth, users, roles and Turso migrations
use serde::{Deserialize, Serialize};

use crate::modules::auth::services::auth_service::Session;

/// Request body for `POST /auth/register`.
#[derive(Debug, Deserialize)]
pub struct RegisterRequest {
    pub name: String,
    pub email: String,
    pub password: String,
}

/// Request body for `POST /auth/login`.
#[derive(Debug, Deserialize)]
pub struct LoginRequest {
    pub email: String,
    pub password: String,
}

/// The authenticated user, as returned by `GET /auth/me`.
#[derive(Debug, Serialize)]
pub struct MeResponse {
    pub id: i64,
    pub name: String,
    pub email: String,
    pub roles: Vec<String>,
}

/// Response for register and login. Send `access_token` as
/// `Authorization: Bearer <access_token>`.
#[derive(Debug, Serialize)]
pub struct TokenResponse {
    pub token_type: &'static str,
    pub access_token: String,
    pub expires_at: String,
    pub user: MeResponse,
}

impl From<Session> for TokenResponse {
    fn from(session: Session) -> Self {
        Self {
            token_type: "Bearer",
            access_token: session.token,
            expires_at: session.expires_at,
            user: MeResponse {
                id: session.user.id,
                name: session.user.name,
                email: session.user.email,
                roles: session.roles,
            },
        }
    }
}