/** * Stops + Locations. Source: `db/migrations/0001_init.sql`. */ import { pgTable, uuid, text, date, boolean, timestamp, index, } from "drizzle-orm/pg-core"; import { brands } from "./brands"; export const stops = pgTable( "stops", { id: uuid("id").primaryKey().defaultRandom(), brandId: uuid("brand_id") .notNull() .references(() => brands.id, { onDelete: "cascade" }), name: text("name").notNull(), location: text("location").notNull(), address: text("address"), city: text("city"), state: text("state"), zip: text("zip"), date: date("date").notNull(), // "time" is a reserved word — quoted in SQL, unquoted in JS time: text("time"), cutoffDate: date("cutoff_date"), status: text("status", { enum: ["active", "paused", "closed"] }) .notNull() .default("active"), isPublic: boolean("is_public").notNull().default(true), notes: text("notes"), createdAt: timestamp("created_at", { withTimezone: true }) .notNull() .defaultNow(), updatedAt: timestamp("updated_at", { withTimezone: true }) .notNull() .defaultNow(), }, (t) => ({ brandIdx: index("stops_brand_idx").on(t.brandId), statusIdx: index("stops_status_idx").on(t.brandId, t.status), dateIdx: index("stops_date_idx").on(t.brandId, t.date), }), ); export const locations = pgTable( "locations", { id: uuid("id").primaryKey().defaultRandom(), brandId: uuid("brand_id") .notNull() .references(() => brands.id, { onDelete: "cascade" }), name: text("name").notNull(), address: text("address"), city: text("city"), state: text("state"), zip: text("zip"), phone: text("phone"), contactName: text("contact_name"), contactEmail: text("contact_email"), notes: text("notes"), active: boolean("active").notNull().default(true), deletedAt: timestamp("deleted_at", { withTimezone: true }), createdAt: timestamp("created_at", { withTimezone: true }) .notNull() .defaultNow(), updatedAt: timestamp("updated_at", { withTimezone: true }) .notNull() .defaultNow(), }, (t) => ({ brandIdx: index("locations_brand_idx").on(t.brandId), }), ); export type Stop = typeof stops.$inferSelect; export type NewStop = typeof stops.$inferInsert; export type Location = typeof locations.$inferSelect; export type NewLocation = typeof locations.$inferInsert;