vbytes-lan-attendence/api/src/models/person.rs

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,
}