brass/src/models/vehicle.rs

81 lines
1.9 KiB
Rust

use sqlx::{query, PgPool};
use super::Result;
pub struct Vehicle {
pub id: i32,
pub radio_call_name: String,
pub station: String,
}
impl Vehicle {
pub async fn create(pool: &PgPool, radio_call_name: &str, station: &str) -> Result<()> {
query!(
"INSERT INTO vehicle (radioCallName, station) VALUES ($1, $2);",
radio_call_name,
station
)
.execute(pool)
.await?;
Ok(())
}
pub async fn read_all(pool: &PgPool) -> Result<Vec<Vehicle>> {
let records = query!("SELECT * FROM vehicle;").fetch_all(pool).await?;
let vehicles = records
.into_iter()
.map(|v| Vehicle {
id: v.id,
radio_call_name: v.radiocallname,
station: v.station,
})
.collect();
Ok(vehicles)
}
pub async fn read(pool: &PgPool, id: i32) -> Result<Option<Vehicle>> {
let record = query!("SELECT * FROM vehicle WHERE id = $1;", id)
.fetch_optional(pool)
.await?;
let vehicle = record.and_then(|v| {
Some(Vehicle {
id: v.id,
radio_call_name: v.radiocallname,
station: v.station,
})
});
Ok(vehicle)
}
pub async fn update(
pool: &PgPool,
id: i32,
radio_call_name: &str,
station: &str,
) -> Result<()> {
query!(
"UPDATE vehicle SET radiocallname = $1, station = $2 WHERE id = $3;",
radio_call_name,
station,
id
)
.execute(pool)
.await?;
Ok(())
}
pub async fn delete(pool: &PgPool, id: i32) -> Result<()> {
query!("DELETE FROM vehicle WHERE id = $1;", id)
.execute(pool)
.await?;
Ok(())
}
}