koprogo_api/application/dto/
auth_dto.rs1use serde::{Deserialize, Serialize};
2use utoipa::ToSchema;
3use validator::Validate;
4
5#[derive(Debug, Deserialize, Validate, ToSchema)]
6pub struct LoginRequest {
7 #[validate(email(message = "Email must be valid"))]
8 pub email: String,
9
10 #[validate(length(min = 6, message = "Password must be at least 6 characters"))]
11 pub password: String,
12}
13
14#[derive(Debug, Deserialize, Validate, ToSchema)]
15pub struct RegisterRequest {
16 #[validate(email(message = "Email must be valid"))]
17 pub email: String,
18
19 #[validate(length(min = 6, message = "Password must be at least 6 characters"))]
20 pub password: String,
21
22 #[validate(length(min = 2, message = "First name must be at least 2 characters"))]
23 pub first_name: String,
24
25 #[validate(length(min = 2, message = "Last name must be at least 2 characters"))]
26 pub last_name: String,
27
28 pub role: String,
29
30 pub organization_id: Option<uuid::Uuid>,
31}
32
33#[derive(Debug, Serialize, Clone)]
34pub struct LoginResponse {
35 pub token: String,
36 pub refresh_token: String,
37 pub user: UserResponse,
38}
39
40#[derive(Debug, Deserialize, ToSchema)]
41pub struct RefreshTokenRequest {
42 pub refresh_token: String,
43}
44
45#[derive(Debug, Serialize, Deserialize, Clone)]
46pub struct UserRoleSummary {
47 pub id: uuid::Uuid,
48 pub role: String,
49 pub organization_id: Option<uuid::Uuid>,
50 pub is_primary: bool,
51}
52
53#[derive(Debug, Serialize, Deserialize, Clone)]
54pub struct UserResponse {
55 pub id: uuid::Uuid,
56 pub email: String,
57 pub first_name: String,
58 pub last_name: String,
59 pub role: String,
60 pub organization_id: Option<uuid::Uuid>,
61 pub is_active: bool,
62 pub roles: Vec<UserRoleSummary>,
63 pub active_role: Option<UserRoleSummary>,
64}
65
66#[derive(Debug, Deserialize, ToSchema)]
67pub struct SwitchRoleRequest {
68 pub role_id: uuid::Uuid,
69}
70
71#[derive(Debug, Clone, Serialize, Deserialize)]
72pub struct Claims {
73 pub sub: String, pub email: String,
75 pub role: String,
76 pub organization_id: Option<uuid::Uuid>,
77 pub role_id: Option<uuid::Uuid>,
78 pub exp: i64, pub iat: i64, }