diff --git a/migrations/2025-10-05-145847-0000_create_trackers/down.sql b/migrations/2025-10-05-145847-0000_create_trackers/down.sql index a035419..657c0a1 100644 --- a/migrations/2025-10-05-145847-0000_create_trackers/down.sql +++ b/migrations/2025-10-05-145847-0000_create_trackers/down.sql @@ -1,4 +1,4 @@ -- This file should undo anything in `up.sql` -DROP TABLE "trackers"; DROP TABLE "hits"; +DROP TABLE "trackers"; diff --git a/migrations/2025-10-05-145847-0000_create_trackers/up.sql b/migrations/2025-10-05-145847-0000_create_trackers/up.sql index 24233bb..e5f78c2 100644 --- a/migrations/2025-10-05-145847-0000_create_trackers/up.sql +++ b/migrations/2025-10-05-145847-0000_create_trackers/up.sql @@ -2,6 +2,7 @@ CREATE TABLE "trackers" ( "id" UUID PRIMARY KEY NOT NULL UNIQUE, + "name" TEXT, "created_at" TIMESTAMP NOT NULL ); diff --git a/src/api/tracker.rs b/src/api/tracker.rs index 0362f2d..aaf5f45 100644 --- a/src/api/tracker.rs +++ b/src/api/tracker.rs @@ -1,5 +1,5 @@ use crate::auth::Authenticated; -use crate::dtos::tracker::TrackerDTO; +use crate::dtos::tracker::{NewTrackerDTO, TrackerDTO}; use crate::models::AppState; use crate::models::tracker::Tracker; use crate::schema::hits::dsl as hits; @@ -61,12 +61,18 @@ pub fn get( } } -#[post("/")] -pub fn create(_auth: Authenticated, state: &State) -> Result, Status> { +#[post("/", format = "json", data = "")] +pub fn create( + data: Json, + _auth: Authenticated, + state: &State, +) -> Result, Status> { let mut db = state.db.lock().unwrap(); + let data = data.into_inner(); let new = Tracker { id: Uuid::new_v4(), + name: data.name, created_at: Utc::now().naive_utc(), }; let result = diesel::insert_into(trackers::table) diff --git a/src/dtos/tracker.rs b/src/dtos/tracker.rs index 8a0c38a..146c16b 100644 --- a/src/dtos/tracker.rs +++ b/src/dtos/tracker.rs @@ -1,9 +1,10 @@ use crate::models::tracker::Tracker; -use serde::Serialize; +use serde::{Deserialize, Serialize}; #[derive(Serialize)] pub struct TrackerDTO { pub id: String, + pub name: Option, pub created_at: String, } @@ -11,7 +12,13 @@ impl TrackerDTO { pub fn from(tracker: &Tracker) -> TrackerDTO { TrackerDTO { id: tracker.id.to_string(), + name: tracker.name.clone(), created_at: tracker.created_at.to_string(), } } } + +#[derive(Deserialize)] +pub struct NewTrackerDTO { + pub name: Option, +} diff --git a/src/models/tracker.rs b/src/models/tracker.rs index a2c8d1f..bb18246 100644 --- a/src/models/tracker.rs +++ b/src/models/tracker.rs @@ -7,5 +7,6 @@ use uuid::Uuid; #[diesel(check_for_backend(diesel::pg::Pg))] pub struct Tracker { pub id: Uuid, + pub name: Option, pub created_at: NaiveDateTime, } diff --git a/src/schema.rs b/src/schema.rs index ec23be5..34f09e2 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -14,6 +14,7 @@ diesel::table! { diesel::table! { trackers (id) { id -> Uuid, + name -> Nullable, created_at -> Timestamp, } }