From 2852c0b4507dd7914709c7cf19859bfbb204712d Mon Sep 17 00:00:00 2001 From: Michael Freno Date: Mon, 29 Dec 2025 17:47:35 -0500 Subject: [PATCH] post fields improvements --- src/db/create.ts | 5 ++-- src/db/types.ts | 9 ++++--- src/server/api/routers/database.ts | 43 +++++++++++++++++++++++++++--- 3 files changed, 49 insertions(+), 8 deletions(-) diff --git a/src/db/create.ts b/src/db/create.ts index 27b18d6..69fe0a1 100644 --- a/src/db/create.ts +++ b/src/db/create.ts @@ -20,12 +20,13 @@ export const model: { [key: string]: string } = { subtitle TEXT, body TEXT NOT NULL, banner_photo TEXT, - date TEXT NOT NULL DEFAULT (datetime('now')), + date TEXT, published INTEGER NOT NULL, category TEXT, author_id TEXT NOT NULL, reads INTEGER NOT NULL DEFAULT 0, - attachments TEXT + attachments TEXT, + last_edited_date TEXT ); CREATE INDEX IF NOT EXISTS idx_posts_category ON Post (category); `, diff --git a/src/db/types.ts b/src/db/types.ts index bba4961..e5c13a2 100644 --- a/src/db/types.ts +++ b/src/db/types.ts @@ -22,11 +22,12 @@ export interface Post { subtitle?: string; body: string; banner_photo?: string; - date: string; + date?: string | null; published: boolean; author_id: string; reads: number; attachments?: string; + last_edited_date?: string | null; } export interface PostLike { @@ -72,13 +73,14 @@ export interface PostWithCommentsAndLikes { subtitle: string; body: string; banner_photo: string; - date: string; + date?: string | null; published: boolean; author_id: string; reads: number; attachments: string; total_likes: number; total_comments: number; + last_edited_date?: string | null; } export interface PostWithTags { id: number; @@ -87,10 +89,11 @@ export interface PostWithTags { subtitle: string; body: string; banner_photo: string; - date: string; + date?: string | null; published: boolean; author_id: string; reads: number; attachments: string; tags: Tag[]; + last_edited_date?: string | null; } diff --git a/src/server/api/routers/database.ts b/src/server/api/routers/database.ts index efc639d..6ee2442 100644 --- a/src/server/api/routers/database.ts +++ b/src/server/api/routers/database.ts @@ -382,9 +382,12 @@ export const databaseRouter = createTRPCRouter({ ? env.VITE_AWS_BUCKET_STRING + input.banner_photo : null; + const now = new Date().toISOString(); + const publishDate = input.published ? now : null; + const query = ` - INSERT INTO Post (title, category, subtitle, body, banner_photo, published, author_id) - VALUES (?, ?, ?, ?, ?, ?, ?) + INSERT INTO Post (title, category, subtitle, body, banner_photo, date, published, author_id, last_edited_date) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) `; const params = [ input.title, @@ -392,8 +395,10 @@ export const databaseRouter = createTRPCRouter({ input.subtitle, input.body, fullURL, + publishDate, input.published, - input.author_id + input.author_id, + now ]; const results = await conn.execute({ sql: query, args: params }); @@ -436,6 +441,26 @@ export const databaseRouter = createTRPCRouter({ try { const conn = ConnectionFactory(); + // Check if post is being published for the first time + let shouldSetPublishDate = false; + if (input.published !== undefined && input.published !== null) { + const currentPostQuery = await conn.execute({ + sql: "SELECT published, date FROM Post WHERE id = ?", + args: [input.id] + }); + const currentPost = currentPostQuery.rows[0] as any; + + // Set publish date if transitioning from unpublished to published and date is null + if ( + currentPost && + !currentPost.published && + input.published && + !currentPost.date + ) { + shouldSetPublishDate = true; + } + } + let query = "UPDATE Post SET "; let params: any[] = []; let first = true; @@ -474,6 +499,18 @@ export const databaseRouter = createTRPCRouter({ first = false; } + // Set date if publishing for the first time + if (shouldSetPublishDate) { + query += first ? "date = ?" : ", date = ?"; + params.push(new Date().toISOString()); + first = false; + } + + // Always update last_edited_date + query += first ? "last_edited_date = ?" : ", last_edited_date = ?"; + params.push(new Date().toISOString()); + first = false; + query += first ? "author_id = ?" : ", author_id = ?"; params.push(input.author_id);