import { pgTable, foreignKey, text, numeric, boolean, timestamp, unique, primaryKey } from "drizzle-orm/pg-core" import { sql } from "drizzle-orm" export const items = pgTable("items", { id: text().primaryKey().notNull(), wishlistId: text("wishlist_id").notNull(), title: text().notNull(), description: text(), link: text(), imageUrl: text("image_url"), price: numeric({ precision: 10, scale: 2 }), currency: text().default('DKK'), color: text(), order: numeric().default('0').notNull(), isReserved: boolean("is_reserved").default(false).notNull(), createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(), updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow().notNull(), }, (table) => [ foreignKey({ columns: [table.wishlistId], foreignColumns: [wishlists.id], name: "items_wishlist_id_wishlists_id_fk" }).onDelete("cascade"), ]); export const wishlists = pgTable("wishlists", { id: text().primaryKey().notNull(), userId: text("user_id"), title: text().notNull(), description: text(), ownerToken: text("owner_token").notNull(), publicToken: text("public_token").notNull(), isFavorite: boolean("is_favorite").default(false).notNull(), color: text(), endDate: timestamp("end_date", { mode: 'string' }), createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(), updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow().notNull(), theme: text().default('none'), }, (table) => [ foreignKey({ columns: [table.userId], foreignColumns: [user.id], name: "wishlists_user_id_user_id_fk" }).onDelete("set null"), unique("wishlists_owner_token_unique").on(table.ownerToken), unique("wishlists_public_token_unique").on(table.publicToken), ]); export const savedWishlists = pgTable("saved_wishlists", { id: text().primaryKey().notNull(), userId: text("user_id").notNull(), wishlistId: text("wishlist_id").notNull(), isFavorite: boolean("is_favorite").default(false).notNull(), createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(), ownerToken: text("owner_token"), }, (table) => [ foreignKey({ columns: [table.userId], foreignColumns: [user.id], name: "saved_wishlists_user_id_user_id_fk" }).onDelete("cascade"), foreignKey({ columns: [table.wishlistId], foreignColumns: [wishlists.id], name: "saved_wishlists_wishlist_id_wishlists_id_fk" }).onDelete("cascade"), ]); export const user = pgTable("user", { id: text().primaryKey().notNull(), name: text(), email: text(), emailVerified: timestamp({ mode: 'string' }), image: text(), password: text(), username: text(), dashboardTheme: text("dashboard_theme").default('none'), dashboardColor: text("dashboard_color"), lastLogin: timestamp("last_login", { mode: 'string' }), createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(), updatedAt: timestamp("updated_at", { mode: 'string' }).defaultNow().notNull(), }, (table) => [ unique("user_email_unique").on(table.email), unique("user_username_unique").on(table.username), ]); export const reservations = pgTable("reservations", { id: text().primaryKey().notNull(), itemId: text("item_id").notNull(), reserverName: text("reserver_name"), createdAt: timestamp("created_at", { mode: 'string' }).defaultNow().notNull(), }, (table) => [ foreignKey({ columns: [table.itemId], foreignColumns: [items.id], name: "reservations_item_id_items_id_fk" }).onDelete("cascade"), ]); export const session = pgTable("session", { sessionToken: text().primaryKey().notNull(), userId: text().notNull(), expires: timestamp({ mode: 'string' }).notNull(), }, (table) => [ foreignKey({ columns: [table.userId], foreignColumns: [user.id], name: "session_userId_user_id_fk" }).onDelete("cascade"), ]); export const verificationToken = pgTable("verificationToken", { identifier: text().notNull(), token: text().notNull(), expires: timestamp({ mode: 'string' }).notNull(), }, (table) => [ primaryKey({ columns: [table.identifier, table.token], name: "verificationToken_identifier_token_pk"}), ]); export const account = pgTable("account", { userId: text().notNull(), type: text().notNull(), provider: text().notNull(), providerAccountId: text().notNull(), refreshToken: text("refresh_token"), accessToken: text("access_token"), expiresAt: numeric("expires_at"), tokenType: text("token_type"), scope: text(), idToken: text("id_token"), sessionState: text("session_state"), }, (table) => [ foreignKey({ columns: [table.userId], foreignColumns: [user.id], name: "account_userId_user_id_fk" }).onDelete("cascade"), primaryKey({ columns: [table.provider, table.providerAccountId], name: "account_provider_providerAccountId_pk"}), ]);