Files
otto/lib/db/schema.ts
T
2026-07-08 19:17:05 +02:00

40 lines
1.6 KiB
TypeScript

import { pgTable, serial, text, timestamp, numeric, integer, uuid, jsonb } from 'drizzle-orm/pg-core';
export const trips = pgTable('trips', {
id: uuid('id').primaryKey().defaultRandom(),
destination: text('destination').notNull(),
lat: numeric('lat'),
lng: numeric('lng'),
startDate: timestamp('start_date', { withTimezone: true }),
numDays: integer('num_days').notNull(),
totalBudget: numeric('total_budget'),
currency: text('currency').default('EUR'),
preferences: jsonb('preferences').$type<string[]>().default([]),
experienceMode: text('experience_mode').default('balanced'),
estimatedTotalCost: numeric('estimated_total_cost'),
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow(),
});
export const activities = pgTable('activities', {
id: serial('id').primaryKey(),
tripId: uuid('trip_id').references(() => trips.id, { onDelete: 'cascade' }),
dayNumber: integer('day_number').notNull(),
startTime: text('start_time'),
title: text('title').notNull(),
type: text('type').notNull(), // attraction | restaurant | bar | event | meal | other
estimatedCost: numeric('estimated_cost'),
address: text('address'),
lat: numeric('lat'),
lng: numeric('lng'),
rating: numeric('rating'),
source: text('source'),
sourceUrl: text('source_url'),
notes: text('notes'),
orderInDay: integer('order_in_day').default(0),
});
export type Trip = typeof trips.$inferSelect;
export type NewTrip = typeof trips.$inferInsert;
export type Activity = typeof activities.$inferSelect;
export type NewActivity = typeof activities.$inferInsert;