Skip to main content

heldar_entry/
models.rs

1//! Access-control domain models (registry + canonical entry events). The RBAC/auth models
2//! (User, ApiKey, …) remain in the kernel auth module for now.
3
4use chrono::{DateTime, Utc};
5use serde::{Deserialize, Serialize};
6use serde_json::Value;
7use sqlx::types::Json;
8use sqlx::FromRow;
9
10#[derive(Debug, Clone, Serialize, FromRow)]
11pub struct Vehicle {
12    pub id: String,
13    pub plate: String,
14    pub plate_norm: String,
15    pub owner_name: Option<String>,
16    pub owner_type: String,
17    pub owner_ref: Option<String>,
18    pub site_id: Option<String>,
19    pub vehicle_type: Option<String>,
20    pub make: Option<String>,
21    pub model: Option<String>,
22    pub color: Option<String>,
23    pub notes: Option<String>,
24    pub active: bool,
25    pub valid_from: Option<DateTime<Utc>>,
26    pub valid_until: Option<DateTime<Utc>>,
27    pub created_at: DateTime<Utc>,
28    pub updated_at: DateTime<Utc>,
29}
30
31#[derive(Debug, Deserialize)]
32pub struct VehicleCreate {
33    pub plate: String,
34    pub owner_name: Option<String>,
35    pub owner_type: Option<String>,
36    pub owner_ref: Option<String>,
37    pub site_id: Option<String>,
38    pub vehicle_type: Option<String>,
39    pub make: Option<String>,
40    pub model: Option<String>,
41    pub color: Option<String>,
42    pub notes: Option<String>,
43    pub active: Option<bool>,
44    pub valid_from: Option<String>,
45    pub valid_until: Option<String>,
46}
47
48#[derive(Debug, Deserialize, Default)]
49pub struct VehicleUpdate {
50    pub plate: Option<String>,
51    pub owner_name: Option<String>,
52    pub owner_type: Option<String>,
53    pub owner_ref: Option<String>,
54    pub site_id: Option<String>,
55    pub vehicle_type: Option<String>,
56    pub make: Option<String>,
57    pub model: Option<String>,
58    pub color: Option<String>,
59    pub notes: Option<String>,
60    pub active: Option<bool>,
61    pub valid_from: Option<String>,
62    pub valid_until: Option<String>,
63}
64
65#[derive(Debug, Clone, Serialize, FromRow)]
66pub struct VisitorPass {
67    pub id: String,
68    pub code: String,
69    pub visitor_name: String,
70    pub phone: Option<String>,
71    pub company: Option<String>,
72    pub host: Option<String>,
73    pub purpose: Option<String>,
74    pub plate: Option<String>,
75    pub plate_norm: Option<String>,
76    pub vehicle_desc: Option<String>,
77    pub site_id: Option<String>,
78    pub valid_from: DateTime<Utc>,
79    pub valid_until: DateTime<Utc>,
80    pub status: String,
81    pub checked_in_at: Option<DateTime<Utc>>,
82    pub checked_out_at: Option<DateTime<Utc>>,
83    pub created_by: Option<String>,
84    pub created_at: DateTime<Utc>,
85    pub updated_at: DateTime<Utc>,
86}
87
88#[derive(Debug, Deserialize)]
89pub struct VisitorPassCreate {
90    pub visitor_name: String,
91    pub phone: Option<String>,
92    pub company: Option<String>,
93    pub host: Option<String>,
94    pub purpose: Option<String>,
95    pub plate: Option<String>,
96    pub vehicle_desc: Option<String>,
97    pub site_id: Option<String>,
98    pub valid_from: Option<String>,
99    pub valid_until: Option<String>,
100}
101
102#[derive(Debug, Deserialize, Default)]
103pub struct VisitorPassUpdate {
104    pub visitor_name: Option<String>,
105    pub phone: Option<String>,
106    pub company: Option<String>,
107    pub host: Option<String>,
108    pub purpose: Option<String>,
109    pub plate: Option<String>,
110    pub vehicle_desc: Option<String>,
111    pub valid_from: Option<String>,
112    pub valid_until: Option<String>,
113    pub status: Option<String>,
114}
115
116#[derive(Debug, Clone, Serialize, FromRow)]
117pub struct Watchlist {
118    pub id: String,
119    pub plate: String,
120    pub plate_norm: String,
121    pub kind: String,
122    pub reason: Option<String>,
123    pub severity: String,
124    pub active: bool,
125    pub created_by: Option<String>,
126    pub created_at: DateTime<Utc>,
127    pub updated_at: DateTime<Utc>,
128}
129
130#[derive(Debug, Deserialize)]
131pub struct WatchlistCreate {
132    pub plate: String,
133    pub kind: Option<String>,
134    pub reason: Option<String>,
135    pub severity: Option<String>,
136    pub active: Option<bool>,
137}
138
139#[derive(Debug, Deserialize, Default)]
140pub struct WatchlistUpdate {
141    pub kind: Option<String>,
142    pub reason: Option<String>,
143    pub severity: Option<String>,
144    pub active: Option<bool>,
145}
146
147#[derive(Debug, Clone, Serialize, FromRow)]
148pub struct EntryEvent {
149    pub id: String,
150    pub site_id: Option<String>,
151    pub camera_id: Option<String>,
152    pub event_type: String,
153    pub timestamp: DateTime<Utc>,
154    pub direction: String,
155    pub plate: Option<String>,
156    pub plate_confidence: Option<f64>,
157    pub subject: Json<Value>,
158    pub authorization: Json<Value>,
159    pub auth_status: String,
160    pub evidence: Json<Value>,
161    pub workflow_status: String,
162    pub workflow: Json<Value>,
163    pub audit: Json<Value>,
164    pub track_id: Option<String>,
165    pub created_at: DateTime<Utc>,
166}
167
168#[derive(Debug, Clone, Serialize, FromRow)]
169pub struct AuditLog {
170    pub id: String,
171    pub actor: String,
172    pub actor_name: Option<String>,
173    pub role: Option<String>,
174    pub action: String,
175    pub target_type: Option<String>,
176    pub target_id: Option<String>,
177    pub detail: Json<Value>,
178    pub created_at: DateTime<Utc>,
179}