Add PostgreSQL support with SQLite/Postgres database compatibility layer
- Add dbGet/dbAll helper functions for database-agnostic queries - Add toDbBool/convertBooleansForDb for boolean type conversion - Add toDbDate/getNow for timestamp type handling - Add generateId that returns UUID for Postgres, nanoid for SQLite - Update all routes to use compatibility helpers - Add normalizeEvent to return clean number types from Postgres decimal - Add formatPrice utility for consistent price display - Add legal pages admin interface with RichTextEditor - Update carousel images - Add drizzle migration files for PostgreSQL
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { Hono } from 'hono';
|
||||
import { zValidator } from '@hono/zod-validator';
|
||||
import { z } from 'zod';
|
||||
import { db, contacts, emailSubscribers } from '../db/index.js';
|
||||
import { db, dbGet, dbAll, contacts, emailSubscribers } from '../db/index.js';
|
||||
import { eq, desc } from 'drizzle-orm';
|
||||
import { requireAuth } from '../lib/auth.js';
|
||||
import { generateId, getNow } from '../lib/utils.js';
|
||||
@@ -48,11 +48,12 @@ contactsRouter.post('/subscribe', zValidator('json', subscribeSchema), async (c)
|
||||
const data = c.req.valid('json');
|
||||
|
||||
// Check if already subscribed
|
||||
const existing = await (db as any)
|
||||
.select()
|
||||
.from(emailSubscribers)
|
||||
.where(eq((emailSubscribers as any).email, data.email))
|
||||
.get();
|
||||
const existing = await dbGet<any>(
|
||||
(db as any)
|
||||
.select()
|
||||
.from(emailSubscribers)
|
||||
.where(eq((emailSubscribers as any).email, data.email))
|
||||
);
|
||||
|
||||
if (existing) {
|
||||
if (existing.status === 'unsubscribed') {
|
||||
@@ -87,11 +88,9 @@ contactsRouter.post('/subscribe', zValidator('json', subscribeSchema), async (c)
|
||||
contactsRouter.post('/unsubscribe', zValidator('json', z.object({ email: z.string().email() })), async (c) => {
|
||||
const { email } = c.req.valid('json');
|
||||
|
||||
const existing = await (db as any)
|
||||
.select()
|
||||
.from(emailSubscribers)
|
||||
.where(eq((emailSubscribers as any).email, email))
|
||||
.get();
|
||||
const existing = await dbGet<any>(
|
||||
(db as any).select().from(emailSubscribers).where(eq((emailSubscribers as any).email, email))
|
||||
);
|
||||
|
||||
if (!existing) {
|
||||
return c.json({ error: 'Email not found' }, 404);
|
||||
@@ -115,7 +114,7 @@ contactsRouter.get('/', requireAuth(['admin', 'organizer']), async (c) => {
|
||||
query = query.where(eq((contacts as any).status, status));
|
||||
}
|
||||
|
||||
const result = await query.orderBy(desc((contacts as any).createdAt)).all();
|
||||
const result = await dbAll(query.orderBy(desc((contacts as any).createdAt)));
|
||||
|
||||
return c.json({ contacts: result });
|
||||
});
|
||||
@@ -124,11 +123,12 @@ contactsRouter.get('/', requireAuth(['admin', 'organizer']), async (c) => {
|
||||
contactsRouter.get('/:id', requireAuth(['admin', 'organizer']), async (c) => {
|
||||
const id = c.req.param('id');
|
||||
|
||||
const contact = await (db as any)
|
||||
.select()
|
||||
.from(contacts)
|
||||
.where(eq((contacts as any).id, id))
|
||||
.get();
|
||||
const contact = await dbGet(
|
||||
(db as any)
|
||||
.select()
|
||||
.from(contacts)
|
||||
.where(eq((contacts as any).id, id))
|
||||
);
|
||||
|
||||
if (!contact) {
|
||||
return c.json({ error: 'Contact not found' }, 404);
|
||||
@@ -142,11 +142,9 @@ contactsRouter.put('/:id', requireAuth(['admin', 'organizer']), zValidator('json
|
||||
const id = c.req.param('id');
|
||||
const data = c.req.valid('json');
|
||||
|
||||
const existing = await (db as any)
|
||||
.select()
|
||||
.from(contacts)
|
||||
.where(eq((contacts as any).id, id))
|
||||
.get();
|
||||
const existing = await dbGet<any>(
|
||||
(db as any).select().from(contacts).where(eq((contacts as any).id, id))
|
||||
);
|
||||
|
||||
if (!existing) {
|
||||
return c.json({ error: 'Contact not found' }, 404);
|
||||
@@ -157,11 +155,9 @@ contactsRouter.put('/:id', requireAuth(['admin', 'organizer']), zValidator('json
|
||||
.set({ status: data.status })
|
||||
.where(eq((contacts as any).id, id));
|
||||
|
||||
const updated = await (db as any)
|
||||
.select()
|
||||
.from(contacts)
|
||||
.where(eq((contacts as any).id, id))
|
||||
.get();
|
||||
const updated = await dbGet<any>(
|
||||
(db as any).select().from(contacts).where(eq((contacts as any).id, id))
|
||||
);
|
||||
|
||||
return c.json({ contact: updated });
|
||||
});
|
||||
@@ -185,7 +181,7 @@ contactsRouter.get('/subscribers/list', requireAuth(['admin', 'marketing']), asy
|
||||
query = query.where(eq((emailSubscribers as any).status, status));
|
||||
}
|
||||
|
||||
const result = await query.orderBy(desc((emailSubscribers as any).createdAt)).all();
|
||||
const result = await dbAll(query.orderBy(desc((emailSubscribers as any).createdAt)));
|
||||
|
||||
return c.json({ subscribers: result });
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user