Add endpoint for getting ticks related to a track
This commit is contained in:
parent
76cb73bb03
commit
1438ab6d24
|
@ -8,11 +8,11 @@ mod tracks;
|
||||||
use std::default::default;
|
use std::default::default;
|
||||||
use std::net::{IpAddr, Ipv4Addr};
|
use std::net::{IpAddr, Ipv4Addr};
|
||||||
|
|
||||||
|
use crate::error::Error;
|
||||||
|
use crate::rocket::{Build, Rocket};
|
||||||
use rocket::fs::{FileServer, NamedFile};
|
use rocket::fs::{FileServer, NamedFile};
|
||||||
use rocket::{routes, Config};
|
use rocket::{routes, Config};
|
||||||
use sea_orm::DatabaseConnection;
|
use sea_orm::DatabaseConnection;
|
||||||
use crate::error::Error;
|
|
||||||
use crate::rocket::{Build, Rocket};
|
|
||||||
|
|
||||||
pub(crate) use error::ErrorResponder;
|
pub(crate) use error::ErrorResponder;
|
||||||
|
|
||||||
|
@ -44,7 +44,14 @@ pub(crate) fn start_server(db: DatabaseConnection) -> Rocket<Build> {
|
||||||
.mount("/api/v1", routes![status])
|
.mount("/api/v1", routes![status])
|
||||||
.mount(
|
.mount(
|
||||||
"/api/v1/tracks",
|
"/api/v1/tracks",
|
||||||
routes![all_tracks, track, insert_track, update_track, delete_track],
|
routes![
|
||||||
|
all_tracks,
|
||||||
|
track,
|
||||||
|
ticks_for_track,
|
||||||
|
insert_track,
|
||||||
|
update_track,
|
||||||
|
delete_track
|
||||||
|
],
|
||||||
)
|
)
|
||||||
.mount(
|
.mount(
|
||||||
"/api/v1/ticks",
|
"/api/v1/ticks",
|
||||||
|
|
|
@ -4,7 +4,7 @@ use crate::error::Error;
|
||||||
use either::Either::{self, Left, Right};
|
use either::Either::{self, Left, Right};
|
||||||
use rocket::http::Status;
|
use rocket::http::Status;
|
||||||
use rocket::{serde::json::Json, State};
|
use rocket::{serde::json::Json, State};
|
||||||
use sea_orm::{prelude::*, DatabaseConnection};
|
use sea_orm::{prelude::*, DatabaseConnection, EntityOrSelect};
|
||||||
use std::default::default;
|
use std::default::default;
|
||||||
|
|
||||||
#[get("/")]
|
#[get("/")]
|
||||||
|
@ -29,6 +29,25 @@ pub(super) async fn track(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[get("/<id>/ticks")]
|
||||||
|
pub(super) async fn ticks_for_track(
|
||||||
|
db: &State<DatabaseConnection>,
|
||||||
|
id: i32,
|
||||||
|
) -> Result<Json<Vec<ticks::Model>>, Either<Status, api::ErrorResponder>> {
|
||||||
|
let db = db as &DatabaseConnection;
|
||||||
|
match Tracks::find_by_id(id).one(db).await {
|
||||||
|
Ok(Some(track)) => {
|
||||||
|
let result = track.find_related(Ticks).all(db).await;
|
||||||
|
match result {
|
||||||
|
Ok(ticks) => Ok(Json(ticks)),
|
||||||
|
Err(err) => Err(Right(Error::from(err).into())),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(None) => Err(Left(Status::NotFound)),
|
||||||
|
Err(err) => Err(Right(Error::from(err).into())),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[post("/", format = "application/json", data = "<track>")]
|
#[post("/", format = "application/json", data = "<track>")]
|
||||||
pub(super) async fn insert_track(
|
pub(super) async fn insert_track(
|
||||||
db: &State<DatabaseConnection>,
|
db: &State<DatabaseConnection>,
|
||||||
|
|
Loading…
Reference in a new issue