koprogo_api/application/dto/
auth_dto.rs

1use serde::{Deserialize, Serialize};
2use validator::Validate;
3
4#[derive(Debug, Deserialize, Validate)]
5pub struct LoginRequest {
6    #[validate(email(message = "Email must be valid"))]
7    pub email: String,
8
9    #[validate(length(min = 6, message = "Password must be at least 6 characters"))]
10    pub password: String,
11}
12
13#[derive(Debug, Deserialize, Validate)]
14pub struct RegisterRequest {
15    #[validate(email(message = "Email must be valid"))]
16    pub email: String,
17
18    #[validate(length(min = 6, message = "Password must be at least 6 characters"))]
19    pub password: String,
20
21    #[validate(length(min = 2, message = "First name must be at least 2 characters"))]
22    pub first_name: String,
23
24    #[validate(length(min = 2, message = "Last name must be at least 2 characters"))]
25    pub last_name: String,
26
27    pub role: String,
28
29    pub organization_id: Option<uuid::Uuid>,
30}
31
32#[derive(Debug, Serialize)]
33pub struct LoginResponse {
34    pub token: String,
35    pub refresh_token: String,
36    pub user: UserResponse,
37}
38
39#[derive(Debug, Deserialize)]
40pub struct RefreshTokenRequest {
41    pub refresh_token: String,
42}
43
44#[derive(Debug, Serialize, Deserialize)]
45pub struct UserResponse {
46    pub id: uuid::Uuid,
47    pub email: String,
48    pub first_name: String,
49    pub last_name: String,
50    pub role: String,
51    pub organization_id: Option<uuid::Uuid>,
52    pub is_active: bool,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct Claims {
57    pub sub: String, // user id
58    pub email: String,
59    pub role: String,
60    pub organization_id: Option<uuid::Uuid>,
61    pub exp: i64, // expiration timestamp
62    pub iat: i64, // issued at
63}