🔨 Refactors into packages models and dtos
This commit is contained in:
@@ -1,29 +1,73 @@
|
||||
use crate::dtos::TrackerDTO;
|
||||
use crate::models::{AppState, Tracker};
|
||||
use crate::schema::trackers::dsl::trackers;
|
||||
use diesel::{QueryDsl, RunQueryDsl, SelectableHelper};
|
||||
use crate::dtos::tracker::TrackerDTO;
|
||||
use crate::models::AppState;
|
||||
use crate::models::tracker::{NewTracker, Tracker};
|
||||
use crate::schema::trackers;
|
||||
use chrono::Utc;
|
||||
use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl, SelectableHelper};
|
||||
use rocket::State;
|
||||
use rocket::http::Status;
|
||||
use rocket::serde::json::Json;
|
||||
use uuid::Uuid;
|
||||
|
||||
#[get("/?<offset>&<limit>")]
|
||||
pub fn index(
|
||||
offset: Option<i64>,
|
||||
limit: Option<i64>,
|
||||
data: &State<AppState>,
|
||||
) -> Json<Vec<TrackerDTO>> {
|
||||
let mut db = data.db.lock().unwrap();
|
||||
state: &State<AppState>,
|
||||
) -> Result<Json<Vec<TrackerDTO>>, Status> {
|
||||
let mut db = state.db.lock().unwrap();
|
||||
|
||||
let offset = offset.unwrap_or(0);
|
||||
let limit = limit.unwrap_or(10);
|
||||
|
||||
println!("hey");
|
||||
let results = trackers
|
||||
let results = trackers::dsl::trackers
|
||||
.offset(offset)
|
||||
.limit(limit)
|
||||
.select(Tracker::as_select())
|
||||
.load(&mut *db)
|
||||
.expect("Error loading trackers");
|
||||
.ok();
|
||||
|
||||
println!("hi");
|
||||
Json(results.iter().map(TrackerDTO::from).collect())
|
||||
match results {
|
||||
Some(results) => Ok(Json(results.iter().map(TrackerDTO::from).collect())),
|
||||
None => Err(Status::InternalServerError),
|
||||
}
|
||||
}
|
||||
|
||||
#[get("/<id>")]
|
||||
pub fn get(id: String, state: &State<AppState>) -> Result<Json<TrackerDTO>, Status> {
|
||||
let mut db = state.db.lock().unwrap();
|
||||
|
||||
let id = match Uuid::parse_str(id.as_str()).ok() {
|
||||
Some(id) => id,
|
||||
None => return Err(Status::NotFound),
|
||||
};
|
||||
|
||||
let result = trackers::dsl::trackers
|
||||
.filter(trackers::id.eq(id))
|
||||
.first::<Tracker>(&mut *db)
|
||||
.ok();
|
||||
|
||||
match result {
|
||||
Some(tracker) => Ok(Json(TrackerDTO::from(&tracker))),
|
||||
None => Err(Status::NotFound),
|
||||
}
|
||||
}
|
||||
|
||||
#[post("/")]
|
||||
pub fn create(state: &State<AppState>) -> Result<Json<TrackerDTO>, Status> {
|
||||
let mut db = state.db.lock().unwrap();
|
||||
|
||||
let new = NewTracker {
|
||||
created_at: Utc::now().naive_utc(),
|
||||
};
|
||||
let result = diesel::insert_into(trackers::table)
|
||||
.values(&new)
|
||||
.returning(Tracker::as_returning())
|
||||
.get_result(&mut *db)
|
||||
.ok();
|
||||
|
||||
match result {
|
||||
Some(tracker) => Ok(Json(TrackerDTO::from(&tracker))),
|
||||
None => Err(Status::InternalServerError),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user