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`
DROP TABLE "trackers";
DROP TABLE "hits";
DROP TABLE "trackers";

View File

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

View File

@@ -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<AppState>) -> Result<Json<TrackerDTO>, Status> {
#[post("/", format = "json", data = "<data>")]
pub fn create(
data: Json<NewTrackerDTO>,
_auth: Authenticated,
state: &State<AppState>,
) -> Result<Json<TrackerDTO>, 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)

View File

@@ -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<String>,
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<String>,
}

View File

@@ -7,5 +7,6 @@ use uuid::Uuid;
#[diesel(check_for_backend(diesel::pg::Pg))]
pub struct Tracker {
pub id: Uuid,
pub name: Option<String>,
pub created_at: NaiveDateTime,
}

View File

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