141 lines
3.4 KiB
Rust
141 lines
3.4 KiB
Rust
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<chrono::Utc>,
|
|
}
|
|
|
|
#[derive(Debug, FromRow, Clone)]
|
|
pub struct Person {
|
|
pub id: i32,
|
|
pub first_name: String,
|
|
pub last_name: String,
|
|
pub grade: Option<i32>,
|
|
pub parent_name: Option<String>,
|
|
pub parent_phone_number: Option<String>,
|
|
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<i32>,
|
|
pub parent_name: Option<String>,
|
|
pub parent_phone_number: Option<String>,
|
|
pub checked_in: bool,
|
|
pub inside: bool,
|
|
pub visitor: bool,
|
|
pub sleeping_spot: bool,
|
|
}
|
|
|
|
impl From<Person> 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<PersonResponse>,
|
|
}
|
|
|
|
#[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<ImportPersonError>,
|
|
}
|
|
|
|
#[derive(Debug, Deserialize)]
|
|
#[serde(crate = "rocket::serde")]
|
|
pub struct NewPersonRequest {
|
|
pub first_name: String,
|
|
pub last_name: String,
|
|
#[serde(default)]
|
|
pub grade: Option<i32>,
|
|
#[serde(default)]
|
|
pub parent_name: Option<String>,
|
|
#[serde(default)]
|
|
pub parent_phone_number: Option<String>,
|
|
#[serde(default)]
|
|
pub id: Option<i32>,
|
|
#[serde(default)]
|
|
pub checked_in: Option<bool>,
|
|
#[serde(default)]
|
|
pub inside: Option<bool>,
|
|
#[serde(default)]
|
|
pub visitor: Option<bool>,
|
|
#[serde(default)]
|
|
pub sleeping_spot: Option<bool>,
|
|
}
|
|
|
|
#[derive(Debug, Deserialize)]
|
|
#[serde(crate = "rocket::serde")]
|
|
pub struct UpdatePersonRequest {
|
|
pub first_name: String,
|
|
pub last_name: String,
|
|
#[serde(default)]
|
|
pub grade: Option<i32>,
|
|
#[serde(default)]
|
|
pub parent_name: Option<String>,
|
|
#[serde(default)]
|
|
pub parent_phone_number: Option<String>,
|
|
#[serde(default)]
|
|
pub checked_in: Option<bool>,
|
|
#[serde(default)]
|
|
pub inside: Option<bool>,
|
|
pub visitor: bool,
|
|
pub sleeping_spot: bool,
|
|
}
|