use rocket::serde::{Deserialize, Serialize}; use sqlx::FromRow; #[derive(Debug, FromRow)] pub struct User { pub id: i32, pub username: String, pub password_hash: String, pub created_at: chrono::DateTime, } #[derive(Debug, FromRow, Clone)] pub struct Person { pub id: i32, pub first_name: String, pub last_name: String, pub grade: Option, pub parent_name: Option, pub parent_phone_number: Option, pub checked_in: bool, pub inside: bool, pub visitor: bool, pub sleeping_spot: bool, } #[derive(Debug, Deserialize)] #[serde(crate = "rocket::serde")] pub struct LoginRequest { pub username: String, pub password: String, } #[derive(Debug, Serialize)] #[serde(crate = "rocket::serde")] pub struct LoginResponse { pub username: String, } #[derive(Debug, Serialize, Clone)] #[serde(crate = "rocket::serde")] pub struct PersonResponse { pub id: i32, pub first_name: String, pub last_name: String, pub grade: Option, pub parent_name: Option, pub parent_phone_number: Option, pub checked_in: bool, pub inside: bool, pub visitor: bool, pub sleeping_spot: bool, } impl From for PersonResponse { fn from(person: Person) -> Self { PersonResponse { id: person.id, first_name: person.first_name, last_name: person.last_name, grade: person.grade, parent_name: person.parent_name, parent_phone_number: person.parent_phone_number, checked_in: person.checked_in, inside: person.inside, visitor: person.visitor, sleeping_spot: person.sleeping_spot, } } } #[derive(Debug, Serialize, Clone)] #[serde(crate = "rocket::serde")] pub struct PersonsResponse { pub persons: Vec, } #[derive(Debug, Serialize, Clone)] #[serde(crate = "rocket::serde")] pub struct PersonActionResponse { pub person: PersonResponse, } #[derive(Debug, Serialize, Clone)] #[serde(crate = "rocket::serde")] pub struct ImportPersonError { pub line: usize, pub message: String, } #[derive(Debug, Serialize, Clone)] #[serde(crate = "rocket::serde")] pub struct ImportPersonsResponse { pub imported: usize, #[serde(default)] pub updated: usize, pub failed: usize, #[serde(default)] pub errors: Vec, } #[derive(Debug, Deserialize)] #[serde(crate = "rocket::serde")] pub struct NewPersonRequest { pub first_name: String, pub last_name: String, #[serde(default)] pub grade: Option, #[serde(default)] pub parent_name: Option, #[serde(default)] pub parent_phone_number: Option, #[serde(default)] pub id: Option, #[serde(default)] pub checked_in: Option, #[serde(default)] pub inside: Option, #[serde(default)] pub visitor: Option, #[serde(default)] pub sleeping_spot: Option, } #[derive(Debug, Deserialize)] #[serde(crate = "rocket::serde")] pub struct UpdatePersonRequest { pub first_name: String, pub last_name: String, #[serde(default)] pub grade: Option, #[serde(default)] pub parent_name: Option, #[serde(default)] pub parent_phone_number: Option, #[serde(default)] pub checked_in: Option, #[serde(default)] pub inside: Option, pub visitor: bool, pub sleeping_spot: bool, }