1use 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}