Adds name to tracker

This commit is contained in:
2025-10-07 11:17:31 +02:00
parent cd537524ce
commit 7f1af014ae
6 changed files with 21 additions and 5 deletions

View File

@@ -1,4 +1,4 @@
-- This file should undo anything in `up.sql` -- This file should undo anything in `up.sql`
DROP TABLE "trackers";
DROP TABLE "hits"; DROP TABLE "hits";
DROP TABLE "trackers";

View File

@@ -2,6 +2,7 @@
CREATE TABLE "trackers" CREATE TABLE "trackers"
( (
"id" UUID PRIMARY KEY NOT NULL UNIQUE, "id" UUID PRIMARY KEY NOT NULL UNIQUE,
"name" TEXT,
"created_at" TIMESTAMP NOT NULL "created_at" TIMESTAMP NOT NULL
); );

View File

@@ -1,5 +1,5 @@
use crate::auth::Authenticated; use crate::auth::Authenticated;
use crate::dtos::tracker::TrackerDTO; use crate::dtos::tracker::{NewTrackerDTO, TrackerDTO};
use crate::models::AppState; use crate::models::AppState;
use crate::models::tracker::Tracker; use crate::models::tracker::Tracker;
use crate::schema::hits::dsl as hits; use crate::schema::hits::dsl as hits;
@@ -61,12 +61,18 @@ pub fn get(
} }
} }
#[post("/")] #[post("/", format = "json", data = "<data>")]
pub fn create(_auth: Authenticated, state: &State<AppState>) -> Result<Json<TrackerDTO>, Status> { pub fn create(
data: Json<NewTrackerDTO>,
_auth: Authenticated,
state: &State<AppState>,
) -> Result<Json<TrackerDTO>, Status> {
let mut db = state.db.lock().unwrap(); let mut db = state.db.lock().unwrap();
let data = data.into_inner();
let new = Tracker { let new = Tracker {
id: Uuid::new_v4(), id: Uuid::new_v4(),
name: data.name,
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)

View File

@@ -1,9 +1,10 @@
use crate::models::tracker::Tracker; use crate::models::tracker::Tracker;
use serde::Serialize; use serde::{Deserialize, Serialize};
#[derive(Serialize)] #[derive(Serialize)]
pub struct TrackerDTO { pub struct TrackerDTO {
pub id: String, pub id: String,
pub name: Option<String>,
pub created_at: String, pub created_at: String,
} }
@@ -11,7 +12,13 @@ impl TrackerDTO {
pub fn from(tracker: &Tracker) -> TrackerDTO { pub fn from(tracker: &Tracker) -> TrackerDTO {
TrackerDTO { TrackerDTO {
id: tracker.id.to_string(), id: tracker.id.to_string(),
name: tracker.name.clone(),
created_at: tracker.created_at.to_string(), created_at: tracker.created_at.to_string(),
} }
} }
} }
#[derive(Deserialize)]
pub struct NewTrackerDTO {
pub name: Option<String>,
}

View File

@@ -7,5 +7,6 @@ use uuid::Uuid;
#[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 name: Option<String>,
pub created_at: NaiveDateTime, pub created_at: NaiveDateTime,
} }

View File

@@ -14,6 +14,7 @@ diesel::table! {
diesel::table! { diesel::table! {
trackers (id) { trackers (id) {
id -> Uuid, id -> Uuid,
name -> Nullable<Text>,
created_at -> Timestamp, created_at -> Timestamp,
} }
} }