import { pgSchema, primaryKey, text, uuid } from 'drizzle-orm/pg-core'
import { drizzle } from 'drizzle-orm/postgres-js'
import { eq } from 'drizzle-orm'
export const schema = pgSchema('neon_app')
export const users = schema.table('users', {
id: uuid('id').primaryKey(),
})
export const pizzas = schema.table('pizzas', {
id: uuid('id').primaryKey(),
flavour: text('flavour').notNull(),
})
export const usersToPizzas = schema.table('users', {
userId: uuid('user_id').references(() => users.id),
pizzaId: uuid('pizza_id').references(() => pizzas.id),
}, table => [primaryKey({ columns: [table.userId, table.pizzaId] })])
const db = drizzle(process.env.DATABASE_URL!)
// Not an especially sane example, but SQL will return values for this.
async function getUserAndTheirFlavours() {
const result = await db
.select({
userId: users.id,
flavours: pizzas.flavour
})
.from(users)
.leftJoin(usersToPizzas, eq(usersToPizzas.userId, users.id))
.leftJoin(pizzas, eq(pizzas.id, usersToPizzas.pizzaId))
// result is never[]!
}