feat: add OEM code copy tracking, PostHog analytics, Postal email integration
- Add oem_code_copies table and analytics module for tracking part code copies - Integrate PostHog for frontend product analytics (VIN decode, OEM copy events) - Switch email service from stub to Postal API with proper error handling - Add copy button to parts panel with clipboard + server-side logging - Add admin copy-logs page with filtering and top-copied-codes view - Add VIN report endpoint for users to flag unrecognized chassis numbers - Add Postal email env vars to config schema Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -210,6 +210,27 @@ export const queryLogs = pgTable(
|
||||
],
|
||||
);
|
||||
|
||||
// ─── OEM Code Copies ──────────────────────────────────
|
||||
export const oemCodeCopies = pgTable(
|
||||
"oem_code_copies",
|
||||
{
|
||||
id: uuid("id").primaryKey().defaultRandom(),
|
||||
userId: uuid("user_id")
|
||||
.notNull()
|
||||
.references(() => users.id, { onDelete: "cascade" }),
|
||||
oemCode: varchar("oem_code", { length: 100 }).notNull(),
|
||||
partId: uuid("part_id"),
|
||||
vehicleId: uuid("vehicle_id"),
|
||||
categoryId: uuid("category_id"),
|
||||
createdAt: timestamp("created_at", { withTimezone: true }).defaultNow().notNull(),
|
||||
},
|
||||
(table) => [
|
||||
index("oem_code_copies_user_id_created_at_idx").on(table.userId, table.createdAt),
|
||||
index("oem_code_copies_oem_code_idx").on(table.oemCode),
|
||||
index("oem_code_copies_created_at_idx").on(table.createdAt),
|
||||
],
|
||||
);
|
||||
|
||||
// ─── Vehicles ───────────────────────────────────────
|
||||
export const vehicles = pgTable(
|
||||
"vehicles",
|
||||
|
||||
Reference in New Issue
Block a user