managarten/packages/uload-database/src/schema/clicks.ts
Wuesteon d36b321d9d style: auto-format codebase with Prettier
Applied formatting to 1487+ files using pnpm format:write
  - TypeScript/JavaScript files
  - Svelte components
  - Astro pages
  - JSON configs
  - Markdown docs

  13 files still need manual review (Astro JSX comments)
2025-11-27 18:33:16 +01:00

33 lines
1,022 B
TypeScript

import { pgTable, uuid, text, timestamp, index } from 'drizzle-orm/pg-core';
import { links } from './links.js';
export const clicks = pgTable(
'clicks',
{
id: uuid('id').primaryKey().defaultRandom(),
linkId: uuid('link_id')
.references(() => links.id, { onDelete: 'cascade' })
.notNull(),
ipHash: text('ip_hash'),
userAgent: text('user_agent'),
referer: text('referer'),
browser: text('browser'),
deviceType: text('device_type'),
os: text('os'),
country: text('country'),
city: text('city'),
clickedAt: timestamp('clicked_at').defaultNow().notNull(),
utmSource: text('utm_source'),
utmMedium: text('utm_medium'),
utmCampaign: text('utm_campaign'),
createdAt: timestamp('created_at').defaultNow().notNull(),
},
(table) => [
index('clicks_link_id_idx').on(table.linkId),
index('clicks_clicked_at_idx').on(table.clickedAt),
index('clicks_country_idx').on(table.country),
]
);
export type Click = typeof clicks.$inferSelect;
export type NewClick = typeof clicks.$inferInsert;