✨ Adds delete method
This commit is contained in:
@@ -1,7 +1,8 @@
|
|||||||
use crate::dtos::tracker::TrackerDTO;
|
use crate::dtos::tracker::TrackerDTO;
|
||||||
use crate::models::AppState;
|
use crate::models::AppState;
|
||||||
use crate::models::tracker::{NewTracker, Tracker};
|
use crate::models::tracker::Tracker;
|
||||||
use crate::schema::trackers;
|
use crate::schema::trackers;
|
||||||
|
use crate::schema::trackers::dsl;
|
||||||
use chrono::Utc;
|
use chrono::Utc;
|
||||||
use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl, SelectableHelper};
|
use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl, SelectableHelper};
|
||||||
use rocket::State;
|
use rocket::State;
|
||||||
@@ -20,7 +21,7 @@ pub fn index(
|
|||||||
let offset = offset.unwrap_or(0);
|
let offset = offset.unwrap_or(0);
|
||||||
let limit = limit.unwrap_or(10);
|
let limit = limit.unwrap_or(10);
|
||||||
|
|
||||||
let results = trackers::dsl::trackers
|
let results = dsl::trackers
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.select(Tracker::as_select())
|
.select(Tracker::as_select())
|
||||||
@@ -39,10 +40,10 @@ pub fn get(id: String, state: &State<AppState>) -> Result<Json<TrackerDTO>, Stat
|
|||||||
|
|
||||||
let id = match Uuid::parse_str(id.as_str()).ok() {
|
let id = match Uuid::parse_str(id.as_str()).ok() {
|
||||||
Some(id) => id,
|
Some(id) => id,
|
||||||
None => return Err(Status::NotFound),
|
None => return Err(Status::BadRequest),
|
||||||
};
|
};
|
||||||
|
|
||||||
let result = trackers::dsl::trackers
|
let result = dsl::trackers
|
||||||
.filter(trackers::id.eq(id))
|
.filter(trackers::id.eq(id))
|
||||||
.first::<Tracker>(&mut *db)
|
.first::<Tracker>(&mut *db)
|
||||||
.ok();
|
.ok();
|
||||||
@@ -57,7 +58,8 @@ pub fn get(id: String, state: &State<AppState>) -> Result<Json<TrackerDTO>, Stat
|
|||||||
pub fn create(state: &State<AppState>) -> Result<Json<TrackerDTO>, Status> {
|
pub fn create(state: &State<AppState>) -> Result<Json<TrackerDTO>, Status> {
|
||||||
let mut db = state.db.lock().unwrap();
|
let mut db = state.db.lock().unwrap();
|
||||||
|
|
||||||
let new = NewTracker {
|
let new = Tracker {
|
||||||
|
id: Uuid::new_v4(),
|
||||||
created_at: Utc::now().naive_utc(),
|
created_at: Utc::now().naive_utc(),
|
||||||
};
|
};
|
||||||
let result = diesel::insert_into(trackers::table)
|
let result = diesel::insert_into(trackers::table)
|
||||||
@@ -71,3 +73,23 @@ pub fn create(state: &State<AppState>) -> Result<Json<TrackerDTO>, Status> {
|
|||||||
None => Err(Status::InternalServerError),
|
None => Err(Status::InternalServerError),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[delete("/<id>")]
|
||||||
|
pub fn delete(id: String, state: &State<AppState>) -> Result<Status, 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::BadRequest),
|
||||||
|
};
|
||||||
|
|
||||||
|
let count = diesel::delete(dsl::trackers.filter(dsl::id.eq(id)))
|
||||||
|
.execute(&mut *db)
|
||||||
|
.ok();
|
||||||
|
|
||||||
|
match count {
|
||||||
|
Some(count) if count > 0 => Ok(Status::Ok),
|
||||||
|
Some(_) => Ok(Status::NotFound),
|
||||||
|
None => Err(Status::InternalServerError),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
use crate::models::tracker::Tracker;
|
use crate::models::tracker::Tracker;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::Serialize;
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
pub struct TrackerDTO {
|
pub struct TrackerDTO {
|
||||||
|
|||||||
10
src/main.rs
10
src/main.rs
@@ -27,5 +27,13 @@ fn rocket() -> _ {
|
|||||||
rocket::build()
|
rocket::build()
|
||||||
.manage(app_data)
|
.manage(app_data)
|
||||||
.mount("/", routes![index])
|
.mount("/", routes![index])
|
||||||
.mount("/tracker", routes![tracker::index, tracker::get, tracker::create])
|
.mount(
|
||||||
|
"/tracker",
|
||||||
|
routes![
|
||||||
|
tracker::index,
|
||||||
|
tracker::get,
|
||||||
|
tracker::create,
|
||||||
|
tracker::delete
|
||||||
|
],
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,17 +2,10 @@ use chrono::NaiveDateTime;
|
|||||||
use diesel::{Insertable, Queryable, Selectable};
|
use diesel::{Insertable, Queryable, Selectable};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
#[derive(Queryable, Selectable, Clone)]
|
#[derive(Queryable, Selectable, Insertable, Clone)]
|
||||||
#[diesel(table_name = crate::schema::trackers)]
|
#[diesel(table_name = crate::schema::trackers)]
|
||||||
#[diesel(check_for_backend(diesel::pg::Pg))]
|
#[diesel(check_for_backend(diesel::pg::Pg))]
|
||||||
pub struct Tracker {
|
pub struct Tracker {
|
||||||
pub id: Uuid,
|
pub id: Uuid,
|
||||||
pub created_at: NaiveDateTime,
|
pub created_at: NaiveDateTime,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Insertable)]
|
|
||||||
#[diesel(table_name = crate::schema::trackers)]
|
|
||||||
#[diesel(check_for_backend(diesel::pg::Pg))]
|
|
||||||
pub struct NewTracker {
|
|
||||||
pub created_at: NaiveDateTime,
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user