URL handling in backend

This commit is contained in:
Felipe 2023-03-27 22:11:29 -03:00
parent f7afdf6785
commit e728b0b56a
Signed by: pitbuster
SSH key fingerprint: SHA256:HDYu2Pm4/TmSX8GBwV49UvFWr1Ljg8XlHxKeCpjJpOk
3 changed files with 11 additions and 7 deletions

2
Cargo.lock generated
View file

@ -654,7 +654,7 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
[[package]] [[package]]
name = "huellas" name = "huellas"
version = "0.1.3" version = "0.1.4"
dependencies = [ dependencies = [
"rocket", "rocket",
"rocket_db_pools", "rocket_db_pools",

View file

@ -11,4 +11,5 @@ pub struct Place {
pub description: String, pub description: String,
pub longitude: f64, pub longitude: f64,
pub latitude: f64, pub latitude: f64,
pub url: Option<String>,
} }

View file

@ -16,7 +16,7 @@ struct Db(rocket_db_pools::sqlx::SqlitePool);
#[get("/places")] #[get("/places")]
async fn get_places(mut db: Connection<Db>) -> Result<Json<Vec<Place>>> { async fn get_places(mut db: Connection<Db>) -> Result<Json<Vec<Place>>> {
let places = rocket_db_pools::sqlx::query!( let places = rocket_db_pools::sqlx::query!(
"SELECT id, name, address, open_hours, icon, description," + "SELECT id, name, address, open_hours, icon, description, url," +
r#"longitude as "longitude: f64", latitude as "latitude: f64" FROM places WHERE active = TRUE"# r#"longitude as "longitude: f64", latitude as "latitude: f64" FROM places WHERE active = TRUE"#
) )
.fetch(&mut *db) .fetch(&mut *db)
@ -29,6 +29,7 @@ async fn get_places(mut db: Connection<Db>) -> Result<Json<Vec<Place>>> {
description: p.description, description: p.description,
latitude: p.latitude, latitude: p.latitude,
longitude: p.longitude, longitude: p.longitude,
url: p.url,
}) })
.try_collect::<Vec<_>>() .try_collect::<Vec<_>>()
.await?; .await?;
@ -59,8 +60,8 @@ struct Id {
async fn insert_place(mut db: Connection<Db>, mut place: Json<Place>) -> Result<UpsertResponse> { async fn insert_place(mut db: Connection<Db>, mut place: Json<Place>) -> Result<UpsertResponse> {
let i = ::sqlx::query_as!( let i = ::sqlx::query_as!(
Id, Id,
"INSERT INTO places (name, address, open_hours, icon, description, longitude, latitude)\ "INSERT INTO places (name, address, open_hours, icon, description, longitude, latitude, url)\
VALUES (?, ?, ?, ?, ?, ?, ?)\ VALUES (?, ?, ?, ?, ?, ?, ?, ?)\
RETURNING id", RETURNING id",
place.name, place.name,
place.address, place.address,
@ -68,7 +69,8 @@ async fn insert_place(mut db: Connection<Db>, mut place: Json<Place>) -> Result<
place.icon, place.icon,
place.description, place.description,
place.longitude, place.longitude,
place.latitude place.latitude,
place.url
) )
.fetch_one(&mut *db) .fetch_one(&mut *db)
.await?; .await?;
@ -79,7 +81,7 @@ async fn insert_place(mut db: Connection<Db>, mut place: Json<Place>) -> Result<
async fn update_place(mut db: Connection<Db>, place: Json<Place>) -> Result<UpsertResponse> { async fn update_place(mut db: Connection<Db>, place: Json<Place>) -> Result<UpsertResponse> {
let result = ::sqlx::query!( let result = ::sqlx::query!(
"UPDATE places SET (name, address, open_hours, icon, description, longitude, latitude) = (?, ?, ?, ?, ?, ?, ?) WHERE id = ?", "UPDATE places SET (name, address, open_hours, icon, description, longitude, latitude, url) = (?, ?, ?, ?, ?, ?, ?, ?) WHERE id = ?",
place.name, place.name,
place.address, place.address,
place.open_hours, place.open_hours,
@ -88,6 +90,7 @@ async fn update_place(mut db: Connection<Db>, place: Json<Place>) -> Result<Upse
place.longitude, place.longitude,
place.latitude, place.latitude,
place.id, place.id,
place.url,
) )
.execute(&mut *db) .execute(&mut *db)
.await?; .await?;
@ -105,7 +108,7 @@ async fn delete_place(mut db: Connection<Db>, id: i64) -> Result<Option<()>> {
.execute(&mut *db) .execute(&mut *db)
.await?; .await?;
Ok((result.rows_affected() == 1).then(|| ())) Ok((result.rows_affected() == 1).then_some(()))
} }
async fn run_migrations(rocket: Rocket<Build>) -> fairing::Result { async fn run_migrations(rocket: Rocket<Build>) -> fairing::Result {