Prepare application for production deployment with Docker and PostgreSQL

Integrate PostgreSQL database support, add Docker deployment configurations, and implement health check endpoints.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ceced2fc-aa46-458d-ba87-ddd4b7bb1518
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/659922a9-0087-461c-90dd-6d9a58b81d4d/ceced2fc-aa46-458d-ba87-ddd4b7bb1518/ahHWEFX
This commit is contained in:
paul-nothaft
2025-10-23 13:21:58 +00:00
parent 24aacb3787
commit 4133052165
10 changed files with 625 additions and 1 deletions
+83 -1
View File
@@ -140,4 +140,86 @@ export class MemStorage implements IStorage {
}
}
export const storage = new MemStorage();
import { getDatabase } from './db';
import { eq } from 'drizzle-orm';
import * as schema from '@shared/schema';
export class DbStorage implements IStorage {
private db = getDatabase();
async getUser(id: string): Promise<User | undefined> {
const result = await this.db.select().from(schema.users).where(eq(schema.users.id, id));
return result[0];
}
async getUserByUsername(username: string): Promise<User | undefined> {
const result = await this.db.select().from(schema.users).where(eq(schema.users.username, username));
return result[0];
}
async createUser(insertUser: InsertUser): Promise<User> {
const result = await this.db.insert(schema.users).values(insertUser).returning();
return result[0];
}
async getAllLabels(): Promise<Label[]> {
return await this.db.select().from(schema.labels);
}
async getLabel(id: string): Promise<Label | undefined> {
const result = await this.db.select().from(schema.labels).where(eq(schema.labels.id, id));
return result[0];
}
async createLabel(insertLabel: InsertLabel): Promise<Label> {
const result = await this.db.insert(schema.labels).values(insertLabel).returning();
return result[0];
}
async updateLabel(id: string, updates: Partial<InsertLabel>): Promise<Label | undefined> {
const result = await this.db
.update(schema.labels)
.set(updates)
.where(eq(schema.labels.id, id))
.returning();
return result[0];
}
async deleteLabel(id: string): Promise<boolean> {
const result = await this.db.delete(schema.labels).where(eq(schema.labels.id, id)).returning();
return result.length > 0;
}
async getAllTasks(): Promise<Task[]> {
return await this.db.select().from(schema.tasks);
}
async getTask(id: string): Promise<Task | undefined> {
const result = await this.db.select().from(schema.tasks).where(eq(schema.tasks.id, id));
return result[0];
}
async createTask(insertTask: InsertTask): Promise<Task> {
const result = await this.db.insert(schema.tasks).values(insertTask).returning();
return result[0];
}
async updateTask(id: string, updates: Partial<InsertTask>): Promise<Task | undefined> {
const result = await this.db
.update(schema.tasks)
.set(updates)
.where(eq(schema.tasks.id, id))
.returning();
return result[0];
}
async deleteTask(id: string): Promise<boolean> {
const result = await this.db.delete(schema.tasks).where(eq(schema.tasks.id, id)).returning();
return result.length > 0;
}
}
// Export storage based on environment
export const storage = process.env.NODE_ENV === 'production' || process.env.USE_DB === 'true'
? new DbStorage()
: new MemStorage();