diff --git a/.cta.json b/.cta.json index 8a495a3..fbb2a92 100644 --- a/.cta.json +++ b/.cta.json @@ -12,9 +12,5 @@ "routerOnly": false, "version": 1, "framework": "react", - "chosenAddOns": [ - "eslint", - "nitro", - "tanstack-query" - ] -} \ No newline at end of file + "chosenAddOns": ["eslint", "nitro", "tanstack-query"] +} diff --git a/.env.example b/.env.example index 4c32ad6..6f3d087 100644 --- a/.env.example +++ b/.env.example @@ -1 +1,4 @@ -DATABASE_URL=postgres://bss:bss@127.0.0.1:5582/bss \ No newline at end of file +DATABASE_URL=postgres://bss:bss@127.0.0.1:5582/bss + +# Integrációs tesztek adminisztrátori kapcsolata (adatbázis-létrehozáshoz) +TEST_DATABASE_URL=postgres://bss:bss@127.0.0.1:5582/bss diff --git a/.gitignore b/.gitignore index 8b25bb5..314bbc0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,12 @@ node_modules .DS_Store +._* dist dist-ssr *.local .env +.env.* +oob .nitro .tanstack .wrangler diff --git a/.prettierignore b/.prettierignore index 5322d7f..da75634 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,12 @@ package-lock.json pnpm-lock.yaml -yarn.lock \ No newline at end of file +yarn.lock + +dist +.output +.nitro +.tanstack +node_modules +**/._* + +docs/api/members-webhook.openapi.yaml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ecfbc0e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,29 @@ +FROM node:22-alpine AS build + +WORKDIR /app + +RUN corepack enable \ + && corepack prepare pnpm@11.15.1 --activate + +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ +RUN pnpm install --frozen-lockfile + +COPY . . +RUN pnpm build + + +FROM node:22-alpine AS runtime + +WORKDIR /app + +ENV NODE_ENV=production +ENV HOST=0.0.0.0 +ENV PORT=3000 + +COPY --from=build --chown=node:node /app/.output ./.output + +USER node + +EXPOSE 3000 + +CMD ["node", ".output/server/index.mjs"] \ No newline at end of file diff --git a/README.md b/README.md index 7c9bdd9..6510851 100644 --- a/README.md +++ b/README.md @@ -1,218 +1,178 @@ -Welcome to your new TanStack Start app! +# BSS weboldal V0 -# Getting Started +A Budavári Schönherz Studió videóarchívum és szerkesztői rendszerének lokálisan +futtatható V0 megvalósítása (TanStack Start + PostgreSQL + Authentik). -To run this application: +## Dokumentáció -```bash -pnpm install -pnpm dev -``` - -# Building For Production - -To build this application for production: - -```bash -pnpm build -``` - -## Testing - -This project uses [Vitest](https://vitest.dev/) for testing. You can run the tests with: - -```bash -pnpm test -``` +- [V0 követelményspecifikáció](./docs/product-specification.md) +- [Kártyákra bontott implementációs terv](./docs/implementation-plan.md) +- [Implementációs állapot](./docs/implementation-progress.md) +- [OOB bemenetek](./docs/oob-inputs.md) +- [Példa OOB config](./docs/examples/oob-config.example.json) +- [Példa seed JSON](./docs/examples/seed.example.json) -## Styling +## Előfeltételek -This project uses [Tailwind CSS](https://tailwindcss.com/) for styling. +- Node 24+ és pnpm (`corepack enable`) +- Docker (PostgreSQL + Authentik) -### Removing Tailwind CSS +## Telepítés és indítás (tiszta klónból) -If you prefer not to use Tailwind CSS: - -1. Remove the demo pages in `src/routes/demo/` -2. Replace the Tailwind import in `src/styles.css` with your own styles -3. Remove `tailwindcss()` from the plugins array in `vite.config.ts` -4. Uninstall the packages: `pnpm add @tailwindcss/vite tailwindcss --dev` - -## Linting & Formatting - - -This project uses [eslint](https://eslint.org/) and [prettier](https://prettier.io/) for linting and formatting. Eslint is configured using [tanstack/eslint-config](https://tanstack.com/config/latest/docs/eslint). The following scripts are available: - -```bash -pnpm lint -pnpm format -pnpm check -``` - - -## Deploy with Nitro - -This project uses Nitro as a generic server adapter, so it can run on any Node-compatible host. +A sorrend a specifikáció 17.2 fejezetét követi. Adatbázis-kézi módosítás +nincs szükség egyik lépéshez sem. ```bash -npm run build -node dist/server/index.mjs -``` - -The build output is a self-contained Node server. To deploy, push the `dist/` directory to your host (Render, Fly.io, your own VPS, etc.) and run the server command above. - -For host-specific presets (Vercel, Netlify, Cloudflare, AWS Lambda, etc.) and tuning, see https://v3.nitro.build/deploy. - - - -## Routing - -This project uses [TanStack Router](https://tanstack.com/router) with file-based routing. Routes are managed as files in `src/routes`. - -### Adding A Route - -To add a new route to your application just add a new file in the `./src/routes` directory. - -TanStack will automatically generate the content of the route file for you. - -Now that you have two routes you can use a `Link` component to navigate between them. - -### Adding Links - -To use SPA (Single Page Application) navigation you will need to import the `Link` component from `@tanstack/react-router`. - -```tsx -import { Link } from "@tanstack/react-router"; -``` - -Then anywhere in your JSX you can use it like so: - -```tsx -About -``` - -This will create a link that will navigate to the `/about` route. - -More information on the `Link` component can be found in the [Link documentation](https://tanstack.com/router/v1/docs/framework/react/api/router/linkComponent). - -### Using A Layout - -In the File Based Routing setup the layout is located in `src/routes/__root.tsx`. Anything you add to the root route will appear in all the routes. The route content will appear in the JSX where you render `{children}` in the `shellComponent`. - -Here is an example layout that includes a header: - -```tsx -import { HeadContent, Scripts, createRootRoute } from '@tanstack/react-router' - -export const Route = createRootRoute({ - head: () => ({ - meta: [ - { charSet: 'utf-8' }, - { name: 'viewport', content: 'width=device-width, initial-scale=1' }, - { title: 'My App' }, - ], - }), - shellComponent: ({ children }) => ( - - - - - -
- -
- {children} - - - - ), -}) -``` - -More information on layouts can be found in the [Layouts documentation](https://tanstack.com/router/latest/docs/framework/react/guide/routing-concepts#layouts). - -## Server Functions - -TanStack Start provides server functions that allow you to write server-side code that seamlessly integrates with your client components. +# 1. Függőségek telepítése +pnpm install -```tsx -import { createServerFn } from '@tanstack/react-start' +# 2. Helyi titkok és Authentik blueprint generálása (idempotens) +pnpm infra:bootstrap -const getServerTime = createServerFn({ - method: 'GET', -}).handler(async () => { - return new Date().toISOString() -}) +# 3. PostgreSQL és Authentik indítása +docker compose -f docker-compose.dev.yml up -d +export DATABASE_URL=postgres://bss:bss@127.0.0.1:5582/bss -// Use in a component -function MyComponent() { - const [time, setTime] = useState('') - - useEffect(() => { - getServerTime().then(setTime) - }, []) - - return
Server time: {time}
-} -``` +# 4. Migrációk futtatása tiszta adatbázison +pnpm db:migrate -## API Routes +# 5. OOB fájlok ellenőrzése (konkrét magyar hibaüzenet hiány esetén) +pnpm check:oob -You can create API routes by using the `server` property in your route definitions: +# 6. Seed betöltése (opcionális; az oob/seed.json-t a scraper állítja elő, +# lásd docs/oob-inputs.md). Idempotens: újrafuttatás nem duplikál. +pnpm db:seed -```tsx -import { createFileRoute } from '@tanstack/react-router' -import { json } from '@tanstack/react-start' +# 7. Tagfrissítő webhook kliens (az első tokenhez, bejelentkezés nélkül) +pnpm webhook:client create "lokális push" -export const Route = createFileRoute('/api/hello')({ - server: { - handlers: { - GET: () => json({ message: 'Hello, World!' }), - }, - }, -}) -``` +# 8. Alkalmazás indítása +pnpm dev # http://localhost:3000 -## Data Fetching - -There are multiple ways to fetch data in your application. You can use TanStack Query to fetch data from a server. But you can also use the `loader` functionality built into TanStack Router to load the data for a route before it's rendered. - -For example: - -```tsx -import { createFileRoute } from '@tanstack/react-router' - -export const Route = createFileRoute('/people')({ - loader: async () => { - const response = await fetch('https://swapi.dev/api/people') - return response.json() - }, - component: PeopleComponent, -}) - -function PeopleComponent() { - const data = Route.useLoaderData() - return ( - - ) -} +# 9. Minőségi kapu +pnpm typecheck && pnpm lint && pnpm check +TEST_DATABASE_URL=postgres://bss:bss@127.0.0.1:5582/bss pnpm test +pnpm build ``` -Loaders simplify your data fetching logic dramatically. Check out more information in the [Loader documentation](https://tanstack.com/router/latest/docs/framework/react/guide/data-loading#loader-parameters). - -# Demo files - -Files prefixed with `demo` can be safely deleted. They are there to provide a starting point for you to play around with the features you've installed. - -# Learn More - -You can learn more about all of the offerings from TanStack in the [TanStack documentation](https://tanstack.com). - -For TanStack Start specific documentation, visit [TanStack Start](https://tanstack.com/start). +Megjegyzések: + +- A `pnpm infra:bootstrap` meglévő titkokat nem ír felül; újraindítás nem + duplikál. +- A tagadatokat az alkalmazás birtokolja: a `POST /api/webhooks/members` + végpontra beküldött frissítések írják őket (lásd + [`docs/member-webhook.md`](docs/member-webhook.md)). Authentikből automatikus + szinkron nincs — az Authentik már csak a bejelentkezést és a csoportokat adja. +- A webhook OpenAPI 3.1 leírása generált: + [`docs/api/members-webhook.openapi.yaml`](docs/api/members-webhook.openapi.yaml). + Kézzel ne szerkeszd — `pnpm openapi:generate` írja újra a szerver + mezőspecifikációjából; eltérés esetén a unit teszt elbukik. +- A seed stáblistája a bootstrap tesztprofiljaihoz kötődik (`tag-dev`, + `vezetoseg-dev`, …); ha a tagtábla még üres, az importer magyar hibaüzenettel + kéri a tagok beküldését. +- Az Authentik felülete: http://127.0.0.1:9000 + +## Tesztfelhasználók + +Jelszavak: `oob/local-secrets.json` (gitignore-olt). + +| Felhasználó | Szerep | +| --------------------- | --------------------------------------------------------------------- | +| (nincs bejelentkezés) | névtelen látogató — csak publikus videók | +| schonherz-dev | bejelentkezett schönherzes — publikus + schönherz videók, admin nincs | +| tag-dev | BSS-tag — minden láthatóság, adminjogok | +| vezetoseg-dev | vezetőség — kibővített adminjogok | +| további `-dev` userek | szintetikus tagprofilok minden tagsági státuszhoz | + +## Demo forgatókönyvek szereplőnként + +### Névtelen látogató + +1. Nyisd meg http://localhost:3000 — homepage normál vagy kiemelt/live hero-val. +2. `/videos`: csak publikus videók jelennek meg; korlátozott tartalom metaadata + sem szivárog (keresésben, eseményoldalakon és kapcsolódó videóknál sem). +3. Nyiss meg egy videót: player, kapcsolódó videók, címkére kattintva aktív + szűrős videólista. +4. A navbar Belépés gombja belépésre visz, megtartva a kért oldalt. + +### Schönherzes (schonherz-dev) + +1. Jelentkezz be; a `/videos` listában már a schönherz láthatóságú videók is + megjelennek. +2. `/admin` közvetlenül: magyar tiltóoldal (403), sidebar sem látszik. + +### BSS-tag (tag-dev) + +1. Jelentkezz be, menj `/admin`-ra: Videók lista nyílik. +2. Hozz létre piszkozatot (Új videó), adj meg érvénytelen média-URL-t — + piszkozatként menthető; a Publikálás magyar hibával elutasítja. +3. Érvényes URL-lel (`https://v.bsstudio.hu/…`) publikálás — a média + hálózati ellenőrzése mockolható fejlesztésben, élesben HEAD-kéréssel fut. +4. Egynapos eseményhez rendelve a videó automatikusan dátumot kap; többnaposnál + a hiányzó dátum publikálást blokkol, a tartományon kívüli figyelmeztet. +5. Címkék és stáblista kezelése; archiválás és lomtárba helyezés. + +### Vezetőség (vezetoseg-dev) + +1. Lomtár (`/admin/trash`): visszaállítás archivált állapotba, kapcsolatokkal. +2. Live és kiemelés (`/admin/homepage`): YouTube URL ütemezése (átfedés + kliensen és szerveren is tiltott), Indítás most / Lezárás most, kiemelt + videó választása, Rólunk-videók rendezése. +3. Katalógusok: címke létrehozás/összevonás/törlés (használt címke csak név + beírásával), stábszerepek sorrendezése. +4. Tagok (`/admin/members`): webhook végpont URL-je, webhook kliensek + létrehozása/titokcseréje/visszavonása, beérkezési napló, csak olvasható + profillista. +5. Auditnapló (`/admin/audit`): minden előző lépés előtte-utána értékkel. +6. Homepage: a kiemelt videó hero-ként jelenik meg; live aktiválásakor a + prioritás frissítés nélkül vált (percenkénti ellenőrzés). +7. 30 napos törlés szimulációja: lomtárazz egy videót, majd az idő + előretolásával (tesztóra) a napi feladat véglegesen törli — külső médiafájl + érintetlen marad. + +## Ismert V0-korlátok + +- Éles telepítés nem része a V0-nak; a célkörnyezet a dokumentált lokális futtatás. +- A külső MP4 URL-ek publikusak; a média tényleges hozzáférés-védelme külön feladat. +- Email és mobil mezők nem léteznek; a tagprofilok csak olvashatók (Authentik forrás). +- Audit export/visszaállítás és tömeges adminműveletek szándékosan nincsenek. +- Rating, komment, share/download gomb, tanfolyamkezelés nem része a V0-nak. +- A régi Drupal linkek (/video, /event, /user) átirányítása production feladat. +- A kereső popoverje csoportonként öt találtat mutat thumbnail nélkül. + +## Production előtti backlog (nem blokkolja a V0-t) + +Teljes régioldal-migráció; Drupal linkátirányítások; production telepítési +pipeline; UptimeRobot; backup/visszaállítás; védett média; IP-alapú egyedi +nézettség; tanfolyam- és felkéréskezelő integráció; tömeges adminműveletek; +formális akadálymentességi audit. + +## Fejlesztői parancsok + +| Parancs | Funkció | +| -------------------------------------- | ------------------------------------ | +| `pnpm dev` | fejlesztői szerver | +| `pnpm check` | formátumellenőrzés (Prettier) | +| `pnpm lint` | ESLint | +| `pnpm typecheck` | route-generálás + `tsc --noEmit` | +| `TEST_DATABASE_URL=… pnpm test` | unit + integrációs tesztek | +| `pnpm build` | produkciós build (Nitro) | +| `pnpm db:generate` / `pnpm db:migrate` | migráció generálása / futtatása | +| `pnpm db:seed` | idempotens seed import | +| `pnpm check:oob` | OOB config validáció | +| `pnpm infra:bootstrap` | lokális titkok + Authentik blueprint | + +## Tiszta klónból végzett átadási próba + +Az elfogadási bemutató (spec 20/17) a fenti „Telepítés és indítás” szakasz +lépéseit követi adatbázis-kézi módosítás nélkül, majd a négy szereplő +demoforgatókönyvét futtatja végig. Ellenőrzési pontok: + +- `pnpm check:oob` hiányzó OOB elemnél konkrét magyar hibát ad, az alkalmazás + nem indul félkonfiguráltan; +- `pnpm db:migrate` tiszta adatbázison hibátlanul lefut; +- `pnpm db:seed` újrafuttatva nem duplikál; +- a tesztek determinisztikus mockokkal futnak (külső média, YouTube, + Authentik hívások élő elérése nélkül); +- a kizárt V0 elemek (rating, komment, médiafeltöltés, tömeges műveletek stb.) + sehol nem jelennek meg. diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 883c527..8cba9f7 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -4,14 +4,21 @@ services: image: postgres:18.4 restart: always ports: - - "5582:5432" + - '5582:5432' environment: POSTGRES_USER: bss POSTGRES_PASSWORD: bss POSTGRES_DB: bss volumes: - bss-dev_db:/var/lib/postgresql -# - ./assets/initdb.sql:/docker-entrypoint-initdb.d/initdb.sql + healthcheck: + test: + - CMD-SHELL + - pg_isready -U bss -d bss + interval: 10s + timeout: 5s + retries: 5 + start_period: 10s networks: - bss-dev @@ -21,7 +28,7 @@ services: image: dpage/pgadmin4:9.16 restart: always ports: - - "8081:80" + - '8081:80' environment: PGADMIN_DEFAULT_EMAIL: bss@bss.dev PGADMIN_DEFAULT_USERNAME: bss @@ -31,7 +38,6 @@ services: - bss-dev_pgadmin:/var/lib/pgadmin networks: - bss-dev - - bss-dev-authentik bss-dev-authentik-postgresql: container_name: bss-dev-authentik-postgresql @@ -61,21 +67,21 @@ services: depends_on: bss-dev-authentik-postgresql: condition: service_healthy + env_file: + - path: ./oob/authentik.env + required: false environment: AUTHENTIK_POSTGRESQL__HOST: bss-dev-authentik-postgresql AUTHENTIK_POSTGRESQL__NAME: authentik AUTHENTIK_POSTGRESQL__PASSWORD: authentik AUTHENTIK_POSTGRESQL__USER: authentik - AUTHENTIK_SECRET_KEY: secret image: authentik/server:2026.5.4 ports: - - "9000:9000" - - "9443:9443" + - '9000:9000' restart: unless-stopped shm_size: 512mb volumes: - - ./assets/data:/data - - ./assets/custom-templates:/templates + - ./oob/authentik/blueprints:/blueprints networks: - bss-dev-authentik @@ -85,30 +91,29 @@ services: depends_on: bss-dev-authentik-postgresql: condition: service_healthy + env_file: + - path: ./oob/authentik.env + required: false environment: AUTHENTIK_POSTGRESQL__HOST: bss-dev-authentik-postgresql AUTHENTIK_POSTGRESQL__NAME: authentik AUTHENTIK_POSTGRESQL__PASSWORD: authentik AUTHENTIK_POSTGRESQL__USER: authentik - AUTHENTIK_SECRET_KEY: secret image: authentik/server:2026.5.4 restart: unless-stopped shm_size: 512mb user: root volumes: - - /var/run/docker.sock:/var/run/docker.sock - - ./assets/data:/data - - ./assets/certs:/certs - - ./assets/custom-templates:/templates + - ./oob/authentik/blueprints:/blueprints networks: - bss-dev-authentik networks: - bss-dev: - bss-dev-authentik: + bss-dev: + bss-dev-authentik: volumes: bss-dev_db: bss-dev_pgadmin: bss-dev-authentik_database: - driver: local \ No newline at end of file + driver: local diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..fce9e74 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,119 @@ +x-authentik-environment: &authentik-environment + AUTHENTIK_POSTGRESQL__HOST: authentik-db + AUTHENTIK_POSTGRESQL__NAME: authentik + AUTHENTIK_POSTGRESQL__USER: authentik + AUTHENTIK_POSTGRESQL__PASSWORD: ${AUTHENTIK_DB_PASSWORD} + AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY} + +services: + app: + build: + context: . + target: runtime + restart: unless-stopped + container_name: bss-app + environment: + NODE_ENV: production + HOST: 0.0.0.0 + PORT: 3000 + DATABASE_URL: postgresql://bss:${BSS_DB_PASSWORD}@app-db:5432/bss + BSS_OOB_CONFIG: /app/oob/config.json + depends_on: + app-db: + condition: service_healthy + ports: + - '8070:3000' + volumes: + - ./oob:/app/oob:ro + + app-db: + image: postgres:18.4-alpine + restart: unless-stopped + container_name: bss-db + environment: + POSTGRES_DB: bss + POSTGRES_USER: bss + POSTGRES_PASSWORD: ${BSS_DB_PASSWORD} + healthcheck: + test: ['CMD-SHELL', 'pg_isready -U bss -d bss'] + interval: 10s + timeout: 5s + retries: 10 + volumes: + - app_database:/var/lib/postgresql + + # Run manually with: + # docker compose --profile tools run --rm db-migrate + db-migrate: + build: + context: . + target: build + profiles: ['tools'] + command: ['pnpm', 'db:migrate'] + environment: + DATABASE_URL: postgresql://bss:${BSS_DB_PASSWORD}@app-db:5432/bss + depends_on: + app-db: + condition: service_healthy + + volumes: + - ./oob:/app/oob + + authentik-db: + image: postgres:16-alpine + restart: unless-stopped + environment: + POSTGRES_DB: authentik + POSTGRES_USER: authentik + POSTGRES_PASSWORD: ${AUTHENTIK_DB_PASSWORD} + healthcheck: + test: ['CMD-SHELL', 'pg_isready -U authentik -d authentik'] + interval: 30s + timeout: 5s + retries: 5 + start_period: 20s + volumes: + - authentik_database:/var/lib/postgresql/data + + authentik-server: + image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2026.5.4} + command: server + restart: unless-stopped + shm_size: 512mb + container_name: bss-authentik + environment: + <<: *authentik-environment + depends_on: + authentik-db: + condition: service_healthy + ports: + - '8071:9000' + - '8072:9443' + volumes: + - authentik_data:/data + - authentik_templates:/templates + + authentik-worker: + image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2026.5.4} + command: worker + restart: unless-stopped + user: root + shm_size: 512mb + environment: + <<: *authentik-environment + depends_on: + authentik-db: + condition: service_healthy + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - authentik_data:/data + - authentik_certs:/certs + - authentik_templates:/templates + - ./oob/authentik/blueprints:/blueprints/custom + +volumes: + app_database: + authentik_database: + authentik_data: + authentik_certs: + authentik_templates: diff --git a/docs/api/members-webhook.openapi.yaml b/docs/api/members-webhook.openapi.yaml new file mode 100644 index 0000000..0033d37 --- /dev/null +++ b/docs/api/members-webhook.openapi.yaml @@ -0,0 +1,347 @@ +# Generated file — do not edit by hand. +# Source: src/server/api/openapi.ts (pnpm openapi:generate) +openapi: "3.1.0" +info: + title: "BSS member update webhook" + version: "1.0.0" + description: "This file is generated — do not edit by hand. Regenerate with `pnpm openapi:generate`." +servers: +- url: "https://bss.kir-dev.hu" + description: "Lois" +tags: +- name: "members" + description: "Member registry push" +paths: + "/api/webhooks/members": + post: + tags: + - "members" + operationId: "pushMembers" + summary: "Push member data" + description: |- + A single request may carry any number of operations; they all run in + one transaction, so either every one of them takes effect or none does. + The same `sub` may appear only once per request. + + `delete` is a soft delete: the member disappears from the public + surfaces, but their row and the roles recorded in credit lists are kept, + and a later `upsert` restores them. + security: + - webhookBearer: [] + parameters: + - name: "x-bss-delivery-id" + in: "header" + required: false + description: |- + Idempotency key. When supplied, the same request never runs twice: + the repeat gets a `200` with `duplicate: true`. A rejected push does + not consume the identifier, so after a fix it can be retried with the + same one. The `Idempotency-Key` header works as well. + schema: + type: "string" + maxLength: 200 + example: "2026-08-28T10:00:00Z-1" + requestBody: + required: true + description: "At most 5242880 bytes." + content: + application/json: + schema: + oneOf: + - "$ref": "#/components/schemas/OperationsPayload" + - "$ref": "#/components/schemas/ReplacePayload" + examples: + operations: + summary: "Operations (create and delete in one request)" + value: + operations: + - op: "upsert" + member: + sub: "42" + username: "gipsz.jakab" + fullName: "Gipsz Jakab" + nickname: "Pitypang" + avatarUrl: null + membershipStatus: "studio_member" + isLeadership: false + joinedSemester: "2021/2022/1" + - op: "delete" + sub: "57" + replace: + summary: "Full roster replacement" + value: + mode: "replace" + members: + - sub: "42" + username: "gipsz.jakab" + fullName: "Gipsz Jakab" + nickname: "Pitypang" + avatarUrl: null + membershipStatus: "studio_member" + isLeadership: false + joinedSemester: "2021/2022/1" + responses: + "200": + description: "Processed, or a repeat." + content: + application/json: + schema: + "$ref": "#/components/schemas/PushResponse" + "400": + description: "Invalid request body. The `problems` array lists every error." + content: + application/json: + schema: + "$ref": "#/components/schemas/Error" + "401": + description: "Missing, unknown or revoked token, or one with a wrong secret." + content: + application/json: + schema: + "$ref": "#/components/schemas/Error" + "405": + description: "Only POST requests are accepted." + content: + application/json: + schema: + "$ref": "#/components/schemas/Error" + "409": + description: "One of the supplied usernames already belongs to another member." + content: + application/json: + schema: + "$ref": "#/components/schemas/Error" + "413": + description: "The request body exceeds 5242880 bytes." + content: + application/json: + schema: + "$ref": "#/components/schemas/Error" + "500": + description: "Saving the member update failed." + content: + application/json: + schema: + "$ref": "#/components/schemas/Error" +components: + securitySchemes: + webhookBearer: + type: "http" + scheme: "bearer" + description: |- + The token of a webhook client issued by a leadership member, in + `.` form. The secret is shown only at creation and + on secret rotation; the application stores a scrypt hash. + schemas: + Member: + type: "object" + description: "Unknown fields are ignored rather than rejected. `introduction` is not part of the contract for now: a push never overwrites the bio stored in the database." + required: + - "sub" + - "username" + - "fullName" + - "membershipStatus" + properties: + sub: + type: "string" + maxLength: 255 + description: "The value of the Authentik OIDC `sub` claim. This is what ties the member to their login, to the credit lists and to editorial data." + examples: + - "42" + username: + type: "string" + maxLength: 200 + description: "Unique username; also the last path segment of the public profile URL." + examples: + - "gipsz.jakab" + fullName: + type: "string" + maxLength: 200 + description: "The member's full name as shown on the public pages." + examples: + - "Gipsz Jakab" + nickname: + type: + - "string" + - "null" + maxLength: 200 + description: "Nickname; shown in parentheses next to the name." + examples: + - "Pitypang" + avatarUrl: + type: + - "string" + - "null" + maxLength: 2048 + pattern: "^https?://" + description: "Profile picture URL (http or https)." + membershipStatus: + type: "string" + enum: + - "studio_member" + - "studio_candidate" + - "studio_applicant" + - "senior_active" + - "senior_archived" + - "contributor" + description: "Membership status. It decides which public list the member appears on; it grants NO permissions." + examples: + - "studio_member" + isLeadership: + type: "boolean" + default: false + description: "Only controls whether the member is shown in the public leadership block. Actual permissions come from Authentik group membership." + examples: + - false + joinedSemester: + type: + - "string" + - "null" + pattern: "^(\\d{4})/(\\d{4})/([12])$" + description: "The semester of joining, in `YYYY/YYYY/N` form: the second year is the one following the first, and `N` is 1 (autumn) or 2 (spring)." + examples: + - "2021/2022/1" + examples: + - sub: "42" + username: "gipsz.jakab" + fullName: "Gipsz Jakab" + nickname: "Pitypang" + avatarUrl: null + membershipStatus: "studio_member" + isLeadership: false + joinedSemester: "2021/2022/1" + UpsertOperation: + type: "object" + required: + - "op" + - "member" + properties: + op: + type: "string" + const: "upsert" + member: + "$ref": "#/components/schemas/Member" + DeleteOperation: + type: "object" + required: + - "op" + - "sub" + properties: + op: + type: "string" + const: "delete" + sub: + type: "string" + maxLength: 255 + description: "The `sub` of the member to delete. An unknown `sub` is not an error, it is simply ignored." + OperationsPayload: + type: "object" + required: + - "operations" + description: "A list of targeted operations." + properties: + mode: + type: "string" + const: "operations" + default: "operations" + operations: + type: "array" + minItems: 1 + items: + oneOf: + - "$ref": "#/components/schemas/UpsertOperation" + - "$ref": "#/components/schemas/DeleteOperation" + ReplacePayload: + type: "object" + required: + - "mode" + - "members" + description: |- + The full member roster. Anything left out of the list gets deleted — + a faulty client can empty the entire roster this way. + properties: + mode: + type: "string" + const: "replace" + members: + type: "array" + items: + "$ref": "#/components/schemas/Member" + IngestResult: + type: "object" + required: + - "mode" + - "operationCount" + - "created" + - "updated" + - "deleted" + - "restored" + - "unchanged" + - "ignored" + properties: + mode: + type: "string" + enum: + - "operations" + - "replace" + operationCount: + type: "integer" + created: + type: "integer" + updated: + type: "integer" + deleted: + type: "integer" + description: "Soft-deleted members." + restored: + type: "integer" + description: "Members previously deleted and now restored." + unchanged: + type: "integer" + description: "Unchanged members; no audit row is written for these." + ignored: + type: "integer" + description: "Deletes targeting an unknown `sub`." + PushResponse: + type: "object" + required: + - "ok" + - "duplicate" + properties: + ok: + type: "boolean" + const: true + duplicate: + type: "boolean" + description: "True when this delivery identifier has already been processed; `result` is then absent." + deliveryId: + type: + - "string" + - "null" + result: + "$ref": "#/components/schemas/IngestResult" + message: + type: "string" + Error: + type: "object" + required: + - "error" + - "message" + properties: + error: + type: "string" + enum: + - "validation" + - "bad_request" + - "unauthorized" + - "method_not_allowed" + - "conflict" + - "payload_too_large" + - "internal" + message: + type: "string" + problems: + type: "array" + items: + type: "string" + description: "On a validation error, every problem in the body at once." diff --git a/docs/examples/oob-config.example.json b/docs/examples/oob-config.example.json new file mode 100644 index 0000000..97db2a4 --- /dev/null +++ b/docs/examples/oob-config.example.json @@ -0,0 +1,26 @@ +{ + "authentik": { + "issuerUrl": "https://TÖLTSD-KI/authentik/application/o/bss-stack/", + "clientId": "TÖLTSD-KI", + "clientSecret": "TÖLTSD-KI-titok-nem-kerülhet-gitbe", + "scopes": ["openid", "profile", "email"], + "claims": { + "sub": "sub", + "username": "preferred_username", + "fullName": "name", + "nickname": "nickname", + "avatarUrl": "picture" + }, + "groups": { + "schonherz": "TÖLTSD-KI-schönherzes-csoport-neve", + "tag": "TÖLTSD-KI-tag-csoport-neve", + "vezetoseg": "TÖLTSD-KI-vezetőség-csoport-neve" + } + }, + "youtube": { + "oEmbedEndpoint": "https://www.youtube.com/oembed" + }, + "seed": { + "path": "oob/seed.json" + } +} diff --git a/docs/examples/seed.example.json b/docs/examples/seed.example.json new file mode 100644 index 0000000..87eb9db --- /dev/null +++ b/docs/examples/seed.example.json @@ -0,0 +1,39 @@ +{ + "version": 1, + "events": [ + { + "key": "gala-2025", + "title": "Tavaszi Gála 2025", + "description": "A stúdió tavaszi gálaműsora.", + "thumbnailUrl": null, + "startDate": "2025-05-10", + "endDate": null, + "status": "published" + } + ], + "tags": ["Gála", "Adás"], + "staffRoles": ["Operatőr", "Vágó"], + "videos": [ + { + "key": "vid-001", + "title": "Gálanyitó 2025", + "description": "A gála felvétele.", + "guests": null, + "songs": "Előadó - Szám címe", + "encodingGroup": "16a9_HD", + "hasHq": true, + "hasLq": true, + "baseFilename": "galanyito-2025", + "visibility": "public", + "status": "published", + "recordedAt": "2025-05-10", + "publishedAt": "2025-06-01T12:00:00Z", + "eventKey": "gala-2025", + "tags": ["Gála", "Adás"], + "staff": [ + { "username": "tag-dev", "role": "Operatőr" }, + { "username": "vezetoseg-dev", "role": "Vágó" } + ] + } + ] +} diff --git a/docs/oob-inputs.md b/docs/oob-inputs.md new file mode 100644 index 0000000..43cc0c1 --- /dev/null +++ b/docs/oob-inputs.md @@ -0,0 +1,127 @@ +# OOB bemenetek + +Az alkalmazás három bemenete out-of-band, azaz nem a git repóban érkezik. Hiányzó vagy érvénytelen fájl esetén az alkalmazás konkrét hibaüzenettel áll meg, kitalált alapértéket soha nem használ. + +## 1. BSS OOB config + +- Helye alapból: `oob/config.json` (gitignore-olt). +- Felülírható a `BSS_OOB_CONFIG` környezeti változóval. +- Formája: JSON, a szerkezetét a [`docs/examples/oob-config.example.json`](./examples/oob-config.example.json) mutatja. +- Tartalma: + - Authentik OIDC kapcsolat: issuer URL, client id, client secret, scope-ok; + - claim-leképezés: `sub`, felhasználónév, teljes név, becenév, profilkép URL; + - csoportleképezés: schönherzes, tag és vezetőség csoport neve; + - médiahost-engedélylista (specifikáció szerint `v.bsstudio.hu`); + - YouTube oEmbed végpont; + - seed JSON helye. + +## 2. Helyi titkok + +A titkok (pl. Authentik client secret, session titok) kizárólag OOB fájlokban vagy környezeti változókban élnek: + +- `.env` (gitignore-olt) — pl. `DATABASE_URL`; +- a config fájl `clientSecret` mezője. + +Titok soha nem kerül kliensbundle-be: a config csak szerveroldalon töltődik be. + +Lokális fejlesztésben a titkokat a bootstrap script generálja (`pnpm infra:bootstrap`), a generált fájlok az `oob/` könyvtárba íródnak. + +## 3. Előre kinyert seed JSON + +- Helye: a config `seed.path` mezője által megadott fájl (alapból `oob/seed.json`, gitignore-olt). +- A scraper kimenete; személyes adatot és médiát nem tartalmaz, álneveket használ. +- Formátumverzió: `1`. Példa: [`docs/examples/seed.example.json`](./examples/seed.example.json). + +### Scraper futtatási szabályai (spec 17.1) + +A scraper külön agent-feladat, nem része a repónak. Az eredménye a fenti JSON. +Futtatási követelményei: + +- legfeljebb öt párhuzamos kérés; +- `429` és `5xx` esetén exponenciális visszalépés; +- oldalanként legfeljebb három próbálkozás; +- megszakítás után folytatható checkpoint (nem indul elölről); +- médiafájl nem töltődik le; email és profilbemutatkozás nem kerül a JSON-ba; +- a személyek konzisztens álnevesítése a lokális Authentik bootstrap + tesztprofiljainak felhasználónevére mutat (`oob/local-secrets.json`, + `scripts/lib/local-bootstrap.ts`: `tag-dev`, `vezetoseg-dev`, stb.). + +### Seed JSON formátuma + +```jsonc +{ + "version": 1, + "events": [ + { + "key": "gala-2025", // belső hivatkozási kulcs + "title": "Tavaszi Gála 2025", // kötelező + "slug": null, // opcionális; alapból a keyből slugifyolva + "description": null, + "thumbnailUrl": null, // csak engedélyezett médiahost + "startDate": "2025-05-10", + "endDate": null, + "status": "published", // published|draft|archived, alap: published + }, + ], + "tags": ["Gála", "Adás"], // a videók csak ezeket hivatkozhatják + "staffRoles": ["Operatőr", "Vágó"], + "videos": [ + { + "key": "vid-001", + "title": "Gálanyitó 2025", // kötelező + "slug": null, // alapból a címből slugifyolva + "description": null, + "guests": null, + "songs": null, // soronként „Előadó - Szám címe” + "encodingGroup": "16a9_HD", // 4a3_SD|16a9_SD|16a9_HD + "hasHq": true, + "hasLq": true, + "baseFilename": "galanyito-2025", // könyvtár és kiterjesztés nélkül + "visibility": "public", // public|schonherz|bss, alap: public + "status": "published", + "recordedAt": "2025-05-10", + "publishedAt": "2025-06-01T12:00:00Z", + "eventKey": "gala-2025", + "tags": ["Gála"], + "staff": [{ "username": "tag-dev", "role": "Operatőr" }], + }, + ], +} +``` + +Szabályok: + +- legfeljebb 50 videó (spec 17.1); +- `email`, `introduction`/`bemutatkozas` mező bármhol tiltott; +- az esemény-thumbnail URL-je csak `https://v.bsstudio.hu` hostról jöhet; +- publikált videónál kötelező az `encodingGroup`, a `baseFilename`, valamint + legalább az egyik minőségjelző (`hasHq` vagy `hasLq`); +- publikált eseménynél kötelező `startDate`; `endDate >= startDate`; +- a `staff[].username` a tagtábla felhasználónevére mutat — a betöltés előtt + +### Betöltés + +```bash +pnpm db:migrate # tiszta séma +pnpm db:seed # a OOB config seed.path fájljának idempotens importja +``` + +Az importer természetes kulcsok (slug, normalizált név) alapján dolgozik: +újrafuttatás nem duplikál, változatlan entitásra nem ír (audit sem készül), +a módosult mezőket és kapcsolatokat szinkronizálja. Megszakadt betöltés után +biztonságosan újrafuttatható. + +## Ellenőrzés + +A config fájl ellenőrzése a repó gyökeréből: + +```bash +pnpm check:oob +``` + +A parancs kiírja az összes hiányzó vagy érvénytelen elemet magyarul, felsorolásosan. Sikeres ellenőrzésnél összefoglalja a betöltött értékeket (a titok nélkül). + +## Viselkedés hiányzó fájl esetén + +- Az alkalmazás indítása megszakad konkrét hibaüzenettel, amely megnevezi a hiányzó fájl elérési útját és az első hibákat. +- Nincs „félig működő” névtelen mód és nincs kitalált mapping. diff --git a/drizzle/20260823133645_silent_titanium_man/migration.sql b/drizzle/20260823133645_silent_titanium_man/migration.sql new file mode 100644 index 0000000..dd5fbcb --- /dev/null +++ b/drizzle/20260823133645_silent_titanium_man/migration.sql @@ -0,0 +1,220 @@ +-- Tiszta migrációs alap: a specifikáció szerint a prototípus sémája eldobható. +-- Ez a migráció a régi lokális prototípus-objektumokat eldobja. +-- Csak fejlesztői környezetben fusson! +DROP TABLE IF EXISTS "users_roles" CASCADE;--> statement-breakpoint +DROP TABLE IF EXISTS "videos_events" CASCADE;--> statement-breakpoint +DROP TABLE IF EXISTS "events_roles_users" CASCADE;--> statement-breakpoint +DROP TABLE IF EXISTS "videos_roles_users" CASCADE;--> statement-breakpoint +DROP TABLE IF EXISTS "roles" CASCADE;--> statement-breakpoint +DROP TABLE IF EXISTS "events" CASCADE;--> statement-breakpoint +DROP TABLE IF EXISTS "video_tags" CASCADE;--> statement-breakpoint +DROP TABLE IF EXISTS "related_videos" CASCADE;--> statement-breakpoint +DROP TABLE IF EXISTS "videos" CASCADE;--> statement-breakpoint +DROP TABLE IF EXISTS "tags" CASCADE;--> statement-breakpoint +DROP TABLE IF EXISTS "users" CASCADE;--> statement-breakpoint +DROP TABLE IF EXISTS "current_homepage_status" CASCADE;--> statement-breakpoint +DROP TABLE IF EXISTS "homepage_status" CASCADE;--> statement-breakpoint +DROP TYPE IF EXISTS "homepage_status";--> statement-breakpoint +DROP TYPE IF EXISTS "visibility";--> statement-breakpoint +CREATE EXTENSION IF NOT EXISTS "btree_gist";--> statement-breakpoint +CREATE TYPE "content_status" AS ENUM('draft', 'published', 'archived', 'trash');--> statement-breakpoint +CREATE TYPE "event_status" AS ENUM('draft', 'published', 'archived');--> statement-breakpoint +CREATE TYPE "live_status" AS ENUM('scheduled', 'active', 'ended');--> statement-breakpoint +CREATE TYPE "member_sync_status" AS ENUM('ok', 'error');--> statement-breakpoint +CREATE TYPE "membership_status" AS ENUM('studio_member', 'studio_candidate', 'studio_applicant', 'senior_active', 'senior_archived', 'contributor');--> statement-breakpoint +CREATE TYPE "semester" AS ENUM('spring', 'autumn');--> statement-breakpoint +CREATE TYPE "slug_entity_type" AS ENUM('video', 'event');--> statement-breakpoint +CREATE TYPE "visibility" AS ENUM('public', 'schonherz', 'bss');--> statement-breakpoint +CREATE TABLE "about_page_videos" ( + "position" integer, + "video_id" uuid, + CONSTRAINT "about_page_videos_pkey" PRIMARY KEY("position","video_id"), + CONSTRAINT "about_page_videos_position_range_check" CHECK ("position" >= 1 and "position" <= 6) +); +--> statement-breakpoint +CREATE TABLE "audit_log" ( + "id" bigserial PRIMARY KEY, + "actor" varchar(255) NOT NULL, + "entity_type" varchar(50) NOT NULL, + "entity_id" varchar(255) NOT NULL, + "action" varchar(50) NOT NULL, + "before_value" jsonb, + "after_value" jsonb, + "occurred_at" timestamp with time zone DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "events" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(), + "slug" varchar(200) NOT NULL, + "title" varchar(200) NOT NULL, + "description" varchar(10000), + "thumbnail_url" varchar(2048), + "start_date" date NOT NULL, + "end_date" date, + "status" "event_status" DEFAULT 'draft'::"event_status" NOT NULL, + "created_by" varchar(255), + "updated_by" varchar(255), + "version" integer DEFAULT 1 NOT NULL, + "created_at" timestamp with time zone DEFAULT now() NOT NULL, + "updated_at" timestamp with time zone DEFAULT now() NOT NULL, + CONSTRAINT "events_end_after_start_check" CHECK ("end_date" is null or "end_date" >= "start_date") +); +--> statement-breakpoint +CREATE TABLE "live_streams" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(), + "youtube_video_id" varchar(64) NOT NULL, + "starts_at" timestamp with time zone NOT NULL, + "ends_at" timestamp with time zone NOT NULL, + "status" "live_status" DEFAULT 'scheduled'::"live_status" NOT NULL, + "activation_error" text, + "activated_at" timestamp with time zone, + "ended_at" timestamp with time zone, + "created_by" varchar(255), + "created_at" timestamp with time zone DEFAULT now() NOT NULL, + "updated_at" timestamp with time zone DEFAULT now() NOT NULL, + CONSTRAINT "live_streams_end_after_start_check" CHECK ("ends_at" > "starts_at") +); +--> statement-breakpoint +CREATE TABLE "member_cache" ( + "sub" varchar(255) PRIMARY KEY, + "username" varchar(200) NOT NULL, + "full_name" varchar(200) NOT NULL, + "nickname" varchar(200), + "avatar_url" varchar(2048), + "membership_status" "membership_status" NOT NULL, + "is_leadership" boolean DEFAULT false NOT NULL, + "joined_year" integer, + "joined_semester" "semester", + "joined_semester_raw" varchar(100), + "introduction" varchar(10000), + "sync_status" "member_sync_status" DEFAULT 'ok'::"member_sync_status" NOT NULL, + "last_sync_error" text, + "last_seen_at" timestamp with time zone DEFAULT now() NOT NULL, + "updated_at" timestamp with time zone DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "related_videos" ( + "video_id" uuid, + "related_video_id" uuid, + "position" integer NOT NULL, + CONSTRAINT "related_videos_pkey" PRIMARY KEY("video_id","related_video_id"), + CONSTRAINT "related_videos_no_self_reference_check" CHECK ("video_id" <> "related_video_id") +); +--> statement-breakpoint +CREATE TABLE "site_settings" ( + "id" integer PRIMARY KEY DEFAULT 0, + "highlighted_video_id" uuid, + "updated_at" timestamp with time zone DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "slug_history" ( + "entity_type" "slug_entity_type", + "slug" varchar(200), + "entity_id" uuid NOT NULL, + "created_at" timestamp with time zone DEFAULT now() NOT NULL, + CONSTRAINT "slug_history_pkey" PRIMARY KEY("entity_type","slug") +); +--> statement-breakpoint +CREATE TABLE "staff_roles" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(), + "name" varchar(64) NOT NULL, + "normalized_name" varchar(64) NOT NULL, + "display_order" integer DEFAULT 0 NOT NULL, + "created_at" timestamp with time zone DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "tags" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(), + "name" varchar(64) NOT NULL, + "normalized_name" varchar(64) NOT NULL, + "created_at" timestamp with time zone DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "video_staff" ( + "video_id" uuid, + "role_id" uuid, + "member_sub" varchar(255), + CONSTRAINT "video_staff_pkey" PRIMARY KEY("video_id","role_id","member_sub") +); +--> statement-breakpoint +CREATE TABLE "video_tags" ( + "video_id" uuid, + "tag_id" uuid, + CONSTRAINT "video_tags_pkey" PRIMARY KEY("video_id","tag_id") +); +--> statement-breakpoint +CREATE TABLE "videos" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(), + "slug" varchar(200) NOT NULL, + "title" varchar(200) NOT NULL, + "description" varchar(10000), + "guests" varchar(5000), + "songs" varchar(5000), + "video_url" varchar(2048), + "thumbnail_url" varchar(2048), + "visibility" "visibility" DEFAULT 'public'::"visibility" NOT NULL, + "status" "content_status" DEFAULT 'draft'::"content_status" NOT NULL, + "event_id" uuid, + "recorded_at" date, + "published_at" timestamp with time zone, + "view_count" integer DEFAULT 0 NOT NULL, + "created_by" varchar(255), + "updated_by" varchar(255), + "version" integer DEFAULT 1 NOT NULL, + "created_at" timestamp with time zone DEFAULT now() NOT NULL, + "updated_at" timestamp with time zone DEFAULT now() NOT NULL, + "trashed_at" timestamp with time zone, + "trashed_by" varchar(255), + CONSTRAINT "videos_published_requires_timestamp_check" CHECK ("status" <> 'published' or "published_at" is not null), + CONSTRAINT "videos_trash_needs_timestamp_check" CHECK ("status" <> 'trash' or "trashed_at" is not null) +); +--> statement-breakpoint +CREATE TABLE "view_sessions" ( + "video_id" uuid, + "session_id" varchar(128), + "viewed_at" timestamp with time zone DEFAULT now() NOT NULL, + CONSTRAINT "view_sessions_pkey" PRIMARY KEY("video_id","session_id") +); +--> statement-breakpoint +CREATE UNIQUE INDEX "about_page_videos_video_key" ON "about_page_videos" ("video_id");--> statement-breakpoint +CREATE INDEX "audit_log_occurred_idx" ON "audit_log" ("occurred_at");--> statement-breakpoint +CREATE INDEX "audit_log_entity_idx" ON "audit_log" ("entity_type","entity_id");--> statement-breakpoint +CREATE INDEX "audit_log_actor_idx" ON "audit_log" ("actor");--> statement-breakpoint +CREATE INDEX "audit_log_action_idx" ON "audit_log" ("action");--> statement-breakpoint +CREATE UNIQUE INDEX "events_slug_key" ON "events" ("slug");--> statement-breakpoint +CREATE INDEX "events_status_start_idx" ON "events" ("status","start_date");--> statement-breakpoint +CREATE INDEX "live_streams_status_starts_idx" ON "live_streams" ("status","starts_at");--> statement-breakpoint +CREATE UNIQUE INDEX "member_cache_username_key" ON "member_cache" ("username");--> statement-breakpoint +CREATE INDEX "member_cache_status_idx" ON "member_cache" ("membership_status");--> statement-breakpoint +CREATE INDEX "slug_history_entity_idx" ON "slug_history" ("entity_type","entity_id");--> statement-breakpoint +CREATE UNIQUE INDEX "staff_roles_normalized_name_key" ON "staff_roles" ("normalized_name");--> statement-breakpoint +CREATE INDEX "staff_roles_display_order_idx" ON "staff_roles" ("display_order");--> statement-breakpoint +CREATE UNIQUE INDEX "tags_normalized_name_key" ON "tags" ("normalized_name");--> statement-breakpoint +CREATE INDEX "video_staff_member_idx" ON "video_staff" ("member_sub");--> statement-breakpoint +CREATE INDEX "video_staff_role_idx" ON "video_staff" ("role_id");--> statement-breakpoint +CREATE INDEX "video_tags_tag_idx" ON "video_tags" ("tag_id");--> statement-breakpoint +CREATE UNIQUE INDEX "videos_slug_key" ON "videos" ("slug");--> statement-breakpoint +CREATE INDEX "videos_visibility_status_idx" ON "videos" ("visibility","status","published_at");--> statement-breakpoint +CREATE INDEX "videos_event_idx" ON "videos" ("event_id");--> statement-breakpoint +CREATE INDEX "videos_recorded_at_idx" ON "videos" ("recorded_at");--> statement-breakpoint +CREATE INDEX "videos_trash_purge_idx" ON "videos" ("status","trashed_at");--> statement-breakpoint +CREATE INDEX "view_sessions_viewed_idx" ON "view_sessions" ("viewed_at");--> statement-breakpoint +ALTER TABLE "about_page_videos" ADD CONSTRAINT "about_page_videos_video_id_videos_id_fkey" FOREIGN KEY ("video_id") REFERENCES "videos"("id") ON DELETE CASCADE;--> statement-breakpoint +ALTER TABLE "events" ADD CONSTRAINT "events_created_by_member_cache_sub_fkey" FOREIGN KEY ("created_by") REFERENCES "member_cache"("sub");--> statement-breakpoint +ALTER TABLE "events" ADD CONSTRAINT "events_updated_by_member_cache_sub_fkey" FOREIGN KEY ("updated_by") REFERENCES "member_cache"("sub");--> statement-breakpoint +ALTER TABLE "live_streams" ADD CONSTRAINT "live_streams_created_by_member_cache_sub_fkey" FOREIGN KEY ("created_by") REFERENCES "member_cache"("sub");--> statement-breakpoint +ALTER TABLE "related_videos" ADD CONSTRAINT "related_videos_video_id_videos_id_fkey" FOREIGN KEY ("video_id") REFERENCES "videos"("id") ON DELETE CASCADE;--> statement-breakpoint +ALTER TABLE "related_videos" ADD CONSTRAINT "related_videos_related_video_id_videos_id_fkey" FOREIGN KEY ("related_video_id") REFERENCES "videos"("id") ON DELETE CASCADE;--> statement-breakpoint +ALTER TABLE "site_settings" ADD CONSTRAINT "site_settings_highlighted_video_id_videos_id_fkey" FOREIGN KEY ("highlighted_video_id") REFERENCES "videos"("id") ON DELETE SET NULL;--> statement-breakpoint +ALTER TABLE "video_staff" ADD CONSTRAINT "video_staff_video_id_videos_id_fkey" FOREIGN KEY ("video_id") REFERENCES "videos"("id") ON DELETE CASCADE;--> statement-breakpoint +ALTER TABLE "video_staff" ADD CONSTRAINT "video_staff_role_id_staff_roles_id_fkey" FOREIGN KEY ("role_id") REFERENCES "staff_roles"("id") ON DELETE RESTRICT;--> statement-breakpoint +ALTER TABLE "video_staff" ADD CONSTRAINT "video_staff_member_sub_member_cache_sub_fkey" FOREIGN KEY ("member_sub") REFERENCES "member_cache"("sub");--> statement-breakpoint +ALTER TABLE "video_tags" ADD CONSTRAINT "video_tags_video_id_videos_id_fkey" FOREIGN KEY ("video_id") REFERENCES "videos"("id") ON DELETE CASCADE;--> statement-breakpoint +ALTER TABLE "video_tags" ADD CONSTRAINT "video_tags_tag_id_tags_id_fkey" FOREIGN KEY ("tag_id") REFERENCES "tags"("id") ON DELETE CASCADE;--> statement-breakpoint +ALTER TABLE "videos" ADD CONSTRAINT "videos_event_id_events_id_fkey" FOREIGN KEY ("event_id") REFERENCES "events"("id") ON DELETE SET NULL;--> statement-breakpoint +ALTER TABLE "videos" ADD CONSTRAINT "videos_created_by_member_cache_sub_fkey" FOREIGN KEY ("created_by") REFERENCES "member_cache"("sub");--> statement-breakpoint +ALTER TABLE "videos" ADD CONSTRAINT "videos_updated_by_member_cache_sub_fkey" FOREIGN KEY ("updated_by") REFERENCES "member_cache"("sub");--> statement-breakpoint +ALTER TABLE "videos" ADD CONSTRAINT "videos_trashed_by_member_cache_sub_fkey" FOREIGN KEY ("trashed_by") REFERENCES "member_cache"("sub");--> statement-breakpoint +ALTER TABLE "view_sessions" ADD CONSTRAINT "view_sessions_video_id_videos_id_fkey" FOREIGN KEY ("video_id") REFERENCES "videos"("id") ON DELETE CASCADE;--> statement-breakpoint +-- Live időablakok nem fedhetik egymást (specifikáció 9.3). +ALTER TABLE "live_streams" ADD CONSTRAINT "live_streams_no_overlap_excl" EXCLUDE USING gist (tstzrange("starts_at", "ends_at") WITH &&); diff --git a/drizzle/20260823133645_silent_titanium_man/snapshot.json b/drizzle/20260823133645_silent_titanium_man/snapshot.json new file mode 100644 index 0000000..43229a5 --- /dev/null +++ b/drizzle/20260823133645_silent_titanium_man/snapshot.json @@ -0,0 +1,2316 @@ +{ + "version": "8", + "dialect": "postgres", + "id": "eb102e26-e589-497d-aab1-16017519f1ce", + "prevIds": ["00000000-0000-0000-0000-000000000000"], + "ddl": [ + { + "values": ["draft", "published", "archived", "trash"], + "name": "content_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["draft", "published", "archived"], + "name": "event_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["scheduled", "active", "ended"], + "name": "live_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["ok", "error"], + "name": "member_sync_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": [ + "studio_member", + "studio_candidate", + "studio_applicant", + "senior_active", + "senior_archived", + "contributor" + ], + "name": "membership_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["spring", "autumn"], + "name": "semester", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["video", "event"], + "name": "slug_entity_type", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["public", "schonherz", "bss"], + "name": "visibility", + "entityType": "enums", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "about_page_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "audit_log", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "live_streams", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_cache", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "related_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "site_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "slug_history", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "staff_roles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_staff", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "view_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actor", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "action", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "before_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "after_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "occurred_at", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "start_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "end_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "event_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "youtube_video_id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "starts_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ends_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "live_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'scheduled'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activation_error", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ended_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sub", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "full_name", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "nickname", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatar_url", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "membership_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "membership_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "is_leadership", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_year", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "semester", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester_raw", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "introduction", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'ok'", + "generated": null, + "identity": null, + "name": "sync_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_sync_error", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "last_seen_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "related_video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "highlighted_video_id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "slug_entity_type", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "display_order", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "role_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tag_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "guests", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "songs", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_url", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "visibility", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'public'", + "generated": null, + "identity": null, + "name": "visibility", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "content_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "event_id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "recorded_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "published_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "view_count", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "session_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "viewed_at", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "video_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "about_page_videos_video_key", + "entityType": "indexes", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "occurred_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_occurred_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actor", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_actor_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "action", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_action_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "start_date", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_status_start_idx", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "starts_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "live_streams_status_starts_idx", + "entityType": "indexes", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "username", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_username_key", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "membership_status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "slug_history_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "display_order", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_display_order_idx", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "tags_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "member_sub", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_member_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "role_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_role_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "tag_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_tags_tag_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "visibility", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "published_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_visibility_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "event_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_event_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "recorded_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_recorded_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "trashed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_trash_purge_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "viewed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "view_sessions_viewed_idx", + "entityType": "indexes", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "about_page_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "live_streams_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["related_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_related_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["highlighted_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "site_settings_highlighted_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "site_settings" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_staff_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["role_id"], + "schemaTo": "public", + "tableTo": "staff_roles", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "RESTRICT", + "name": "video_staff_role_id_staff_roles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["member_sub"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "video_staff_member_sub_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["tag_id"], + "schemaTo": "public", + "tableTo": "tags", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_tag_id_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["event_id"], + "schemaTo": "public", + "tableTo": "events", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "videos_event_id_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["trashed_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_trashed_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "view_sessions_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["position", "video_id"], + "nameExplicit": false, + "name": "about_page_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "about_page_videos" + }, + { + "columns": ["video_id", "related_video_id"], + "nameExplicit": false, + "name": "related_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "related_videos" + }, + { + "columns": ["entity_type", "slug"], + "nameExplicit": false, + "name": "slug_history_pkey", + "entityType": "pks", + "schema": "public", + "table": "slug_history" + }, + { + "columns": ["video_id", "role_id", "member_sub"], + "nameExplicit": false, + "name": "video_staff_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_staff" + }, + { + "columns": ["video_id", "tag_id"], + "nameExplicit": false, + "name": "video_tags_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_tags" + }, + { + "columns": ["video_id", "session_id"], + "nameExplicit": false, + "name": "view_sessions_pkey", + "entityType": "pks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "audit_log_pkey", + "schema": "public", + "table": "audit_log", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "events_pkey", + "schema": "public", + "table": "events", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "live_streams_pkey", + "schema": "public", + "table": "live_streams", + "entityType": "pks" + }, + { + "columns": ["sub"], + "nameExplicit": false, + "name": "member_cache_pkey", + "schema": "public", + "table": "member_cache", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "site_settings_pkey", + "schema": "public", + "table": "site_settings", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "staff_roles_pkey", + "schema": "public", + "table": "staff_roles", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "tags_pkey", + "schema": "public", + "table": "tags", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "videos_pkey", + "schema": "public", + "table": "videos", + "entityType": "pks" + }, + { + "value": "\"position\" >= 1 and \"position\" <= 6", + "name": "about_page_videos_position_range_check", + "entityType": "checks", + "schema": "public", + "table": "about_page_videos" + }, + { + "value": "\"end_date\" is null or \"end_date\" >= \"start_date\"", + "name": "events_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "events" + }, + { + "value": "\"ends_at\" > \"starts_at\"", + "name": "live_streams_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "live_streams" + }, + { + "value": "\"video_id\" <> \"related_video_id\"", + "name": "related_videos_no_self_reference_check", + "entityType": "checks", + "schema": "public", + "table": "related_videos" + }, + { + "value": "\"status\" <> 'published' or \"published_at\" is not null", + "name": "videos_published_requires_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + }, + { + "value": "\"status\" <> 'trash' or \"trashed_at\" is not null", + "name": "videos_trash_needs_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + } + ], + "renames": [] +} diff --git a/drizzle/20260823151053_solid_stingray/migration.sql b/drizzle/20260823151053_solid_stingray/migration.sql new file mode 100644 index 0000000..3c9de1a --- /dev/null +++ b/drizzle/20260823151053_solid_stingray/migration.sql @@ -0,0 +1,11 @@ +CREATE TABLE "auth_sessions" ( + "id" varchar(64) PRIMARY KEY, + "member_sub" varchar(255) NOT NULL, + "username" varchar(200) NOT NULL, + "groups" jsonb DEFAULT '[]' NOT NULL, + "access_token" text, + "created_at" timestamp with time zone DEFAULT now() NOT NULL, + "expires_at" timestamp with time zone NOT NULL +); +--> statement-breakpoint +CREATE INDEX "auth_sessions_expires_idx" ON "auth_sessions" ("expires_at"); \ No newline at end of file diff --git a/drizzle/20260823151053_solid_stingray/snapshot.json b/drizzle/20260823151053_solid_stingray/snapshot.json new file mode 100644 index 0000000..f6cbd73 --- /dev/null +++ b/drizzle/20260823151053_solid_stingray/snapshot.json @@ -0,0 +1,2442 @@ +{ + "version": "8", + "dialect": "postgres", + "id": "377136ef-6e59-4cd0-8717-f131f79a5f2b", + "prevIds": ["eb102e26-e589-497d-aab1-16017519f1ce"], + "ddl": [ + { + "values": ["draft", "published", "archived", "trash"], + "name": "content_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["draft", "published", "archived"], + "name": "event_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["scheduled", "active", "ended"], + "name": "live_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["ok", "error"], + "name": "member_sync_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": [ + "studio_member", + "studio_candidate", + "studio_applicant", + "senior_active", + "senior_archived", + "contributor" + ], + "name": "membership_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["spring", "autumn"], + "name": "semester", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["video", "event"], + "name": "slug_entity_type", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["public", "schonherz", "bss"], + "name": "visibility", + "entityType": "enums", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "about_page_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "audit_log", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "auth_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "live_streams", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_cache", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "related_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "site_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "slug_history", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "staff_roles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_staff", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "view_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actor", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "action", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "before_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "after_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "occurred_at", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "groups", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "access_token", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "start_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "end_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "event_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "youtube_video_id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "starts_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ends_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "live_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'scheduled'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activation_error", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ended_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sub", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "full_name", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "nickname", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatar_url", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "membership_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "membership_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "is_leadership", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_year", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "semester", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester_raw", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "introduction", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'ok'", + "generated": null, + "identity": null, + "name": "sync_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_sync_error", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "last_seen_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "related_video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "highlighted_video_id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "slug_entity_type", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "display_order", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "role_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tag_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "guests", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "songs", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_url", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "visibility", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'public'", + "generated": null, + "identity": null, + "name": "visibility", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "content_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "event_id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "recorded_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "published_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "view_count", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "session_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "viewed_at", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "video_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "about_page_videos_video_key", + "entityType": "indexes", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "occurred_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_occurred_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actor", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_actor_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "action", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_action_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expires_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "auth_sessions_expires_idx", + "entityType": "indexes", + "schema": "public", + "table": "auth_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "start_date", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_status_start_idx", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "starts_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "live_streams_status_starts_idx", + "entityType": "indexes", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "username", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_username_key", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "membership_status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "slug_history_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "display_order", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_display_order_idx", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "tags_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "member_sub", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_member_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "role_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_role_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "tag_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_tags_tag_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "visibility", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "published_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_visibility_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "event_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_event_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "recorded_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_recorded_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "trashed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_trash_purge_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "viewed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "view_sessions_viewed_idx", + "entityType": "indexes", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "about_page_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "live_streams_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["related_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_related_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["highlighted_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "site_settings_highlighted_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "site_settings" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_staff_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["role_id"], + "schemaTo": "public", + "tableTo": "staff_roles", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "RESTRICT", + "name": "video_staff_role_id_staff_roles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["member_sub"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "video_staff_member_sub_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["tag_id"], + "schemaTo": "public", + "tableTo": "tags", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_tag_id_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["event_id"], + "schemaTo": "public", + "tableTo": "events", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "videos_event_id_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["trashed_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_trashed_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "view_sessions_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["position", "video_id"], + "nameExplicit": false, + "name": "about_page_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "about_page_videos" + }, + { + "columns": ["video_id", "related_video_id"], + "nameExplicit": false, + "name": "related_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "related_videos" + }, + { + "columns": ["entity_type", "slug"], + "nameExplicit": false, + "name": "slug_history_pkey", + "entityType": "pks", + "schema": "public", + "table": "slug_history" + }, + { + "columns": ["video_id", "role_id", "member_sub"], + "nameExplicit": false, + "name": "video_staff_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_staff" + }, + { + "columns": ["video_id", "tag_id"], + "nameExplicit": false, + "name": "video_tags_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_tags" + }, + { + "columns": ["video_id", "session_id"], + "nameExplicit": false, + "name": "view_sessions_pkey", + "entityType": "pks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "audit_log_pkey", + "schema": "public", + "table": "audit_log", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "auth_sessions_pkey", + "schema": "public", + "table": "auth_sessions", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "events_pkey", + "schema": "public", + "table": "events", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "live_streams_pkey", + "schema": "public", + "table": "live_streams", + "entityType": "pks" + }, + { + "columns": ["sub"], + "nameExplicit": false, + "name": "member_cache_pkey", + "schema": "public", + "table": "member_cache", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "site_settings_pkey", + "schema": "public", + "table": "site_settings", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "staff_roles_pkey", + "schema": "public", + "table": "staff_roles", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "tags_pkey", + "schema": "public", + "table": "tags", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "videos_pkey", + "schema": "public", + "table": "videos", + "entityType": "pks" + }, + { + "value": "\"position\" >= 1 and \"position\" <= 6", + "name": "about_page_videos_position_range_check", + "entityType": "checks", + "schema": "public", + "table": "about_page_videos" + }, + { + "value": "\"end_date\" is null or \"end_date\" >= \"start_date\"", + "name": "events_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "events" + }, + { + "value": "\"ends_at\" > \"starts_at\"", + "name": "live_streams_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "live_streams" + }, + { + "value": "\"video_id\" <> \"related_video_id\"", + "name": "related_videos_no_self_reference_check", + "entityType": "checks", + "schema": "public", + "table": "related_videos" + }, + { + "value": "\"status\" <> 'published' or \"published_at\" is not null", + "name": "videos_published_requires_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + }, + { + "value": "\"status\" <> 'trash' or \"trashed_at\" is not null", + "name": "videos_trash_needs_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + } + ], + "renames": [] +} diff --git a/drizzle/20260823164832_married_vivisector/migration.sql b/drizzle/20260823164832_married_vivisector/migration.sql new file mode 100644 index 0000000..1cc3a69 --- /dev/null +++ b/drizzle/20260823164832_married_vivisector/migration.sql @@ -0,0 +1,14 @@ +CREATE TYPE "member_sync_trigger" AS ENUM('startup', 'hourly', 'manual', 'test');--> statement-breakpoint +CREATE TABLE "member_sync_runs" ( + "id" bigserial PRIMARY KEY, + "trigger" "member_sync_trigger" NOT NULL, + "status" "member_sync_status" NOT NULL, + "started_at" timestamp with time zone DEFAULT now() NOT NULL, + "finished_at" timestamp with time zone, + "total_count" integer DEFAULT 0 NOT NULL, + "changed_count" integer DEFAULT 0 NOT NULL, + "error_count" integer DEFAULT 0 NOT NULL, + "message" text +); +--> statement-breakpoint +CREATE INDEX "member_sync_runs_started_idx" ON "member_sync_runs" ("started_at"); \ No newline at end of file diff --git a/drizzle/20260823164832_married_vivisector/snapshot.json b/drizzle/20260823164832_married_vivisector/snapshot.json new file mode 100644 index 0000000..4ddef31 --- /dev/null +++ b/drizzle/20260823164832_married_vivisector/snapshot.json @@ -0,0 +1,2600 @@ +{ + "version": "8", + "dialect": "postgres", + "id": "12e7fda7-cad1-4402-b57a-66558828c74d", + "prevIds": ["377136ef-6e59-4cd0-8717-f131f79a5f2b"], + "ddl": [ + { + "values": ["draft", "published", "archived", "trash"], + "name": "content_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["draft", "published", "archived"], + "name": "event_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["scheduled", "active", "ended"], + "name": "live_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["ok", "error"], + "name": "member_sync_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["startup", "hourly", "manual", "test"], + "name": "member_sync_trigger", + "entityType": "enums", + "schema": "public" + }, + { + "values": [ + "studio_member", + "studio_candidate", + "studio_applicant", + "senior_active", + "senior_archived", + "contributor" + ], + "name": "membership_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["spring", "autumn"], + "name": "semester", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["video", "event"], + "name": "slug_entity_type", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["public", "schonherz", "bss"], + "name": "visibility", + "entityType": "enums", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "about_page_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "audit_log", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "auth_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "live_streams", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_cache", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_sync_runs", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "related_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "site_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "slug_history", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "staff_roles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_staff", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "view_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actor", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "action", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "before_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "after_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "occurred_at", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "groups", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "access_token", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "start_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "end_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "event_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "youtube_video_id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "starts_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ends_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "live_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'scheduled'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activation_error", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ended_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sub", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "full_name", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "nickname", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatar_url", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "membership_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "membership_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "is_leadership", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_year", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "semester", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester_raw", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "introduction", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'ok'", + "generated": null, + "identity": null, + "name": "sync_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_sync_error", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "last_seen_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "member_sync_trigger", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trigger", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "started_at", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "finished_at", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "total_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "changed_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "error_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "message", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "related_video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "highlighted_video_id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "slug_entity_type", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "display_order", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "role_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tag_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "guests", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "songs", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_url", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "visibility", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'public'", + "generated": null, + "identity": null, + "name": "visibility", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "content_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "event_id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "recorded_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "published_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "view_count", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "session_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "viewed_at", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "video_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "about_page_videos_video_key", + "entityType": "indexes", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "occurred_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_occurred_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actor", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_actor_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "action", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_action_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expires_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "auth_sessions_expires_idx", + "entityType": "indexes", + "schema": "public", + "table": "auth_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "start_date", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_status_start_idx", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "starts_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "live_streams_status_starts_idx", + "entityType": "indexes", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "username", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_username_key", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "membership_status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "started_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_sync_runs_started_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_sync_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "slug_history_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "display_order", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_display_order_idx", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "tags_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "member_sub", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_member_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "role_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_role_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "tag_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_tags_tag_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "visibility", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "published_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_visibility_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "event_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_event_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "recorded_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_recorded_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "trashed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_trash_purge_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "viewed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "view_sessions_viewed_idx", + "entityType": "indexes", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "about_page_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "live_streams_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["related_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_related_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["highlighted_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "site_settings_highlighted_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "site_settings" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_staff_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["role_id"], + "schemaTo": "public", + "tableTo": "staff_roles", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "RESTRICT", + "name": "video_staff_role_id_staff_roles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["member_sub"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "video_staff_member_sub_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["tag_id"], + "schemaTo": "public", + "tableTo": "tags", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_tag_id_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["event_id"], + "schemaTo": "public", + "tableTo": "events", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "videos_event_id_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["trashed_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_trashed_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "view_sessions_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["position", "video_id"], + "nameExplicit": false, + "name": "about_page_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "about_page_videos" + }, + { + "columns": ["video_id", "related_video_id"], + "nameExplicit": false, + "name": "related_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "related_videos" + }, + { + "columns": ["entity_type", "slug"], + "nameExplicit": false, + "name": "slug_history_pkey", + "entityType": "pks", + "schema": "public", + "table": "slug_history" + }, + { + "columns": ["video_id", "role_id", "member_sub"], + "nameExplicit": false, + "name": "video_staff_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_staff" + }, + { + "columns": ["video_id", "tag_id"], + "nameExplicit": false, + "name": "video_tags_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_tags" + }, + { + "columns": ["video_id", "session_id"], + "nameExplicit": false, + "name": "view_sessions_pkey", + "entityType": "pks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "audit_log_pkey", + "schema": "public", + "table": "audit_log", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "auth_sessions_pkey", + "schema": "public", + "table": "auth_sessions", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "events_pkey", + "schema": "public", + "table": "events", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "live_streams_pkey", + "schema": "public", + "table": "live_streams", + "entityType": "pks" + }, + { + "columns": ["sub"], + "nameExplicit": false, + "name": "member_cache_pkey", + "schema": "public", + "table": "member_cache", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "member_sync_runs_pkey", + "schema": "public", + "table": "member_sync_runs", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "site_settings_pkey", + "schema": "public", + "table": "site_settings", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "staff_roles_pkey", + "schema": "public", + "table": "staff_roles", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "tags_pkey", + "schema": "public", + "table": "tags", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "videos_pkey", + "schema": "public", + "table": "videos", + "entityType": "pks" + }, + { + "value": "\"position\" >= 1 and \"position\" <= 6", + "name": "about_page_videos_position_range_check", + "entityType": "checks", + "schema": "public", + "table": "about_page_videos" + }, + { + "value": "\"end_date\" is null or \"end_date\" >= \"start_date\"", + "name": "events_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "events" + }, + { + "value": "\"ends_at\" > \"starts_at\"", + "name": "live_streams_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "live_streams" + }, + { + "value": "\"video_id\" <> \"related_video_id\"", + "name": "related_videos_no_self_reference_check", + "entityType": "checks", + "schema": "public", + "table": "related_videos" + }, + { + "value": "\"status\" <> 'published' or \"published_at\" is not null", + "name": "videos_published_requires_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + }, + { + "value": "\"status\" <> 'trash' or \"trashed_at\" is not null", + "name": "videos_trash_needs_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + } + ], + "renames": [] +} diff --git a/drizzle/20260823170852_audit_immutability/migration.sql b/drizzle/20260823170852_audit_immutability/migration.sql new file mode 100644 index 0000000..d0b6f63 --- /dev/null +++ b/drizzle/20260823170852_audit_immutability/migration.sql @@ -0,0 +1,12 @@ +-- Az auditnapló alkalmazásból nem módosítható és nem törölhető (spec 13.2). +CREATE OR REPLACE FUNCTION prevent_audit_mutation() RETURNS trigger AS $$ +BEGIN + RAISE EXCEPTION 'Az auditnapló nem módosítható és nem törölhető'; +END; +$$ LANGUAGE plpgsql; + +--> statement-breakpoint + +CREATE TRIGGER audit_log_no_update +BEFORE UPDATE OR DELETE ON "audit_log" +FOR EACH ROW EXECUTE FUNCTION prevent_audit_mutation(); diff --git a/drizzle/20260823170852_audit_immutability/snapshot.json b/drizzle/20260823170852_audit_immutability/snapshot.json new file mode 100644 index 0000000..e2047b7 --- /dev/null +++ b/drizzle/20260823170852_audit_immutability/snapshot.json @@ -0,0 +1,2600 @@ +{ + "id": "516f562d-d3f2-44bb-bb25-d7a607a92f20", + "prevIds": ["12e7fda7-cad1-4402-b57a-66558828c74d"], + "version": "8", + "dialect": "postgres", + "ddl": [ + { + "values": ["draft", "published", "archived", "trash"], + "name": "content_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["draft", "published", "archived"], + "name": "event_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["scheduled", "active", "ended"], + "name": "live_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["ok", "error"], + "name": "member_sync_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["startup", "hourly", "manual", "test"], + "name": "member_sync_trigger", + "entityType": "enums", + "schema": "public" + }, + { + "values": [ + "studio_member", + "studio_candidate", + "studio_applicant", + "senior_active", + "senior_archived", + "contributor" + ], + "name": "membership_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["spring", "autumn"], + "name": "semester", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["video", "event"], + "name": "slug_entity_type", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["public", "schonherz", "bss"], + "name": "visibility", + "entityType": "enums", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "about_page_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "audit_log", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "auth_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "live_streams", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_cache", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_sync_runs", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "related_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "site_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "slug_history", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "staff_roles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_staff", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "view_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actor", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "action", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "before_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "after_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "occurred_at", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "groups", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "access_token", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "start_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "end_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "event_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "youtube_video_id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "starts_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ends_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "live_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'scheduled'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activation_error", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ended_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sub", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "full_name", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "nickname", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatar_url", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "membership_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "membership_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "is_leadership", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_year", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "semester", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester_raw", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "introduction", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'ok'", + "generated": null, + "identity": null, + "name": "sync_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_sync_error", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "last_seen_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "member_sync_trigger", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trigger", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "started_at", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "finished_at", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "total_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "changed_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "error_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "message", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "related_video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "highlighted_video_id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "slug_entity_type", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "display_order", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "role_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tag_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "guests", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "songs", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_url", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "visibility", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'public'", + "generated": null, + "identity": null, + "name": "visibility", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "content_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "event_id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "recorded_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "published_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "view_count", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "session_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "viewed_at", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "video_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "about_page_videos_video_key", + "entityType": "indexes", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "occurred_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_occurred_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actor", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_actor_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "action", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_action_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expires_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "auth_sessions_expires_idx", + "entityType": "indexes", + "schema": "public", + "table": "auth_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "start_date", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_status_start_idx", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "starts_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "live_streams_status_starts_idx", + "entityType": "indexes", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "username", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_username_key", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "membership_status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "started_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_sync_runs_started_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_sync_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "slug_history_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "display_order", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_display_order_idx", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "tags_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "member_sub", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_member_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "role_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_role_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "tag_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_tags_tag_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "visibility", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "published_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_visibility_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "event_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_event_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "recorded_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_recorded_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "trashed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_trash_purge_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "viewed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "view_sessions_viewed_idx", + "entityType": "indexes", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "about_page_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "live_streams_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["related_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_related_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["highlighted_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "site_settings_highlighted_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "site_settings" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_staff_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["role_id"], + "schemaTo": "public", + "tableTo": "staff_roles", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "RESTRICT", + "name": "video_staff_role_id_staff_roles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["member_sub"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "video_staff_member_sub_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["tag_id"], + "schemaTo": "public", + "tableTo": "tags", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_tag_id_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["event_id"], + "schemaTo": "public", + "tableTo": "events", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "videos_event_id_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["trashed_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_trashed_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "view_sessions_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["position", "video_id"], + "nameExplicit": false, + "name": "about_page_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "about_page_videos" + }, + { + "columns": ["video_id", "related_video_id"], + "nameExplicit": false, + "name": "related_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "related_videos" + }, + { + "columns": ["entity_type", "slug"], + "nameExplicit": false, + "name": "slug_history_pkey", + "entityType": "pks", + "schema": "public", + "table": "slug_history" + }, + { + "columns": ["video_id", "role_id", "member_sub"], + "nameExplicit": false, + "name": "video_staff_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_staff" + }, + { + "columns": ["video_id", "tag_id"], + "nameExplicit": false, + "name": "video_tags_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_tags" + }, + { + "columns": ["video_id", "session_id"], + "nameExplicit": false, + "name": "view_sessions_pkey", + "entityType": "pks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "audit_log_pkey", + "schema": "public", + "table": "audit_log", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "auth_sessions_pkey", + "schema": "public", + "table": "auth_sessions", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "events_pkey", + "schema": "public", + "table": "events", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "live_streams_pkey", + "schema": "public", + "table": "live_streams", + "entityType": "pks" + }, + { + "columns": ["sub"], + "nameExplicit": false, + "name": "member_cache_pkey", + "schema": "public", + "table": "member_cache", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "member_sync_runs_pkey", + "schema": "public", + "table": "member_sync_runs", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "site_settings_pkey", + "schema": "public", + "table": "site_settings", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "staff_roles_pkey", + "schema": "public", + "table": "staff_roles", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "tags_pkey", + "schema": "public", + "table": "tags", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "videos_pkey", + "schema": "public", + "table": "videos", + "entityType": "pks" + }, + { + "value": "\"position\" >= 1 and \"position\" <= 6", + "name": "about_page_videos_position_range_check", + "entityType": "checks", + "schema": "public", + "table": "about_page_videos" + }, + { + "value": "\"end_date\" is null or \"end_date\" >= \"start_date\"", + "name": "events_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "events" + }, + { + "value": "\"ends_at\" > \"starts_at\"", + "name": "live_streams_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "live_streams" + }, + { + "value": "\"video_id\" <> \"related_video_id\"", + "name": "related_videos_no_self_reference_check", + "entityType": "checks", + "schema": "public", + "table": "related_videos" + }, + { + "value": "\"status\" <> 'published' or \"published_at\" is not null", + "name": "videos_published_requires_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + }, + { + "value": "\"status\" <> 'trash' or \"trashed_at\" is not null", + "name": "videos_trash_needs_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + } + ], + "renames": [] +} diff --git a/drizzle/20260823184625_salty_jocasta/migration.sql b/drizzle/20260823184625_salty_jocasta/migration.sql new file mode 100644 index 0000000..7304456 --- /dev/null +++ b/drizzle/20260823184625_salty_jocasta/migration.sql @@ -0,0 +1 @@ +ALTER TABLE "events" ALTER COLUMN "start_date" DROP NOT NULL; \ No newline at end of file diff --git a/drizzle/20260823184625_salty_jocasta/snapshot.json b/drizzle/20260823184625_salty_jocasta/snapshot.json new file mode 100644 index 0000000..8874dc9 --- /dev/null +++ b/drizzle/20260823184625_salty_jocasta/snapshot.json @@ -0,0 +1,2600 @@ +{ + "version": "8", + "dialect": "postgres", + "id": "024533d1-c675-46af-aed6-b27d15f110ed", + "prevIds": ["516f562d-d3f2-44bb-bb25-d7a607a92f20"], + "ddl": [ + { + "values": ["draft", "published", "archived", "trash"], + "name": "content_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["draft", "published", "archived"], + "name": "event_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["scheduled", "active", "ended"], + "name": "live_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["ok", "error"], + "name": "member_sync_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["startup", "hourly", "manual", "test"], + "name": "member_sync_trigger", + "entityType": "enums", + "schema": "public" + }, + { + "values": [ + "studio_member", + "studio_candidate", + "studio_applicant", + "senior_active", + "senior_archived", + "contributor" + ], + "name": "membership_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["spring", "autumn"], + "name": "semester", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["video", "event"], + "name": "slug_entity_type", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["public", "schonherz", "bss"], + "name": "visibility", + "entityType": "enums", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "about_page_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "audit_log", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "auth_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "live_streams", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_cache", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_sync_runs", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "related_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "site_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "slug_history", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "staff_roles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_staff", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "view_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actor", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "action", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "before_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "after_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "occurred_at", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "groups", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "access_token", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "start_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "end_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "event_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "youtube_video_id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "starts_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ends_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "live_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'scheduled'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activation_error", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ended_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sub", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "full_name", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "nickname", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatar_url", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "membership_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "membership_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "is_leadership", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_year", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "semester", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester_raw", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "introduction", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'ok'", + "generated": null, + "identity": null, + "name": "sync_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_sync_error", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "last_seen_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "member_sync_trigger", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trigger", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "started_at", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "finished_at", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "total_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "changed_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "error_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "message", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "related_video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "highlighted_video_id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "slug_entity_type", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "display_order", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "role_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tag_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "guests", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "songs", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_url", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "visibility", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'public'", + "generated": null, + "identity": null, + "name": "visibility", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "content_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "event_id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "recorded_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "published_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "view_count", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "session_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "viewed_at", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "video_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "about_page_videos_video_key", + "entityType": "indexes", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "occurred_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_occurred_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actor", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_actor_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "action", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_action_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expires_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "auth_sessions_expires_idx", + "entityType": "indexes", + "schema": "public", + "table": "auth_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "start_date", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_status_start_idx", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "starts_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "live_streams_status_starts_idx", + "entityType": "indexes", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "username", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_username_key", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "membership_status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "started_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_sync_runs_started_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_sync_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "slug_history_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "display_order", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_display_order_idx", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "tags_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "member_sub", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_member_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "role_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_role_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "tag_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_tags_tag_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "visibility", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "published_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_visibility_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "event_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_event_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "recorded_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_recorded_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "trashed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_trash_purge_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "viewed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "view_sessions_viewed_idx", + "entityType": "indexes", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "about_page_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "live_streams_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["related_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_related_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["highlighted_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "site_settings_highlighted_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "site_settings" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_staff_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["role_id"], + "schemaTo": "public", + "tableTo": "staff_roles", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "RESTRICT", + "name": "video_staff_role_id_staff_roles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["member_sub"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "video_staff_member_sub_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["tag_id"], + "schemaTo": "public", + "tableTo": "tags", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_tag_id_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["event_id"], + "schemaTo": "public", + "tableTo": "events", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "videos_event_id_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["trashed_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_trashed_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "view_sessions_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["position", "video_id"], + "nameExplicit": false, + "name": "about_page_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "about_page_videos" + }, + { + "columns": ["video_id", "related_video_id"], + "nameExplicit": false, + "name": "related_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "related_videos" + }, + { + "columns": ["entity_type", "slug"], + "nameExplicit": false, + "name": "slug_history_pkey", + "entityType": "pks", + "schema": "public", + "table": "slug_history" + }, + { + "columns": ["video_id", "role_id", "member_sub"], + "nameExplicit": false, + "name": "video_staff_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_staff" + }, + { + "columns": ["video_id", "tag_id"], + "nameExplicit": false, + "name": "video_tags_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_tags" + }, + { + "columns": ["video_id", "session_id"], + "nameExplicit": false, + "name": "view_sessions_pkey", + "entityType": "pks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "audit_log_pkey", + "schema": "public", + "table": "audit_log", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "auth_sessions_pkey", + "schema": "public", + "table": "auth_sessions", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "events_pkey", + "schema": "public", + "table": "events", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "live_streams_pkey", + "schema": "public", + "table": "live_streams", + "entityType": "pks" + }, + { + "columns": ["sub"], + "nameExplicit": false, + "name": "member_cache_pkey", + "schema": "public", + "table": "member_cache", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "member_sync_runs_pkey", + "schema": "public", + "table": "member_sync_runs", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "site_settings_pkey", + "schema": "public", + "table": "site_settings", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "staff_roles_pkey", + "schema": "public", + "table": "staff_roles", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "tags_pkey", + "schema": "public", + "table": "tags", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "videos_pkey", + "schema": "public", + "table": "videos", + "entityType": "pks" + }, + { + "value": "\"position\" >= 1 and \"position\" <= 6", + "name": "about_page_videos_position_range_check", + "entityType": "checks", + "schema": "public", + "table": "about_page_videos" + }, + { + "value": "\"end_date\" is null or \"end_date\" >= \"start_date\"", + "name": "events_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "events" + }, + { + "value": "\"ends_at\" > \"starts_at\"", + "name": "live_streams_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "live_streams" + }, + { + "value": "\"video_id\" <> \"related_video_id\"", + "name": "related_videos_no_self_reference_check", + "entityType": "checks", + "schema": "public", + "table": "related_videos" + }, + { + "value": "\"status\" <> 'published' or \"published_at\" is not null", + "name": "videos_published_requires_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + }, + { + "value": "\"status\" <> 'trash' or \"trashed_at\" is not null", + "name": "videos_trash_needs_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + } + ], + "renames": [] +} diff --git a/drizzle/20260823191647_melted_mojo/migration.sql b/drizzle/20260823191647_melted_mojo/migration.sql new file mode 100644 index 0000000..d4e656d --- /dev/null +++ b/drizzle/20260823191647_melted_mojo/migration.sql @@ -0,0 +1,3 @@ +ALTER TABLE "live_streams" DROP CONSTRAINT IF EXISTS "live_streams_no_overlap_excl";--> statement-breakpoint +CREATE EXTENSION IF NOT EXISTS "btree_gist";--> statement-breakpoint +ALTER TABLE "live_streams" ADD CONSTRAINT "live_streams_no_overlap_excl" EXCLUDE USING gist (tstzrange("starts_at", "ends_at") WITH &&) WHERE ("status" <> 'ended'); diff --git a/drizzle/20260823191647_melted_mojo/snapshot.json b/drizzle/20260823191647_melted_mojo/snapshot.json new file mode 100644 index 0000000..8e7c1c3 --- /dev/null +++ b/drizzle/20260823191647_melted_mojo/snapshot.json @@ -0,0 +1,2600 @@ +{ + "id": "d2179d05-9513-4b5c-81de-fe2e2cdf2c7f", + "prevIds": ["024533d1-c675-46af-aed6-b27d15f110ed"], + "version": "8", + "dialect": "postgres", + "ddl": [ + { + "values": ["draft", "published", "archived", "trash"], + "name": "content_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["draft", "published", "archived"], + "name": "event_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["scheduled", "active", "ended"], + "name": "live_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["ok", "error"], + "name": "member_sync_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["startup", "hourly", "manual", "test"], + "name": "member_sync_trigger", + "entityType": "enums", + "schema": "public" + }, + { + "values": [ + "studio_member", + "studio_candidate", + "studio_applicant", + "senior_active", + "senior_archived", + "contributor" + ], + "name": "membership_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["spring", "autumn"], + "name": "semester", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["video", "event"], + "name": "slug_entity_type", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["public", "schonherz", "bss"], + "name": "visibility", + "entityType": "enums", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "about_page_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "audit_log", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "auth_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "live_streams", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_cache", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_sync_runs", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "related_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "site_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "slug_history", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "staff_roles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_staff", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "view_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actor", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "action", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "before_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "after_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "occurred_at", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "groups", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "access_token", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "start_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "end_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "event_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "youtube_video_id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "starts_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ends_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "live_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'scheduled'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activation_error", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ended_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sub", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "full_name", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "nickname", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatar_url", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "membership_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "membership_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "is_leadership", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_year", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "semester", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester_raw", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "introduction", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'ok'", + "generated": null, + "identity": null, + "name": "sync_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_sync_error", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "last_seen_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "member_sync_trigger", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trigger", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "started_at", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "finished_at", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "total_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "changed_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "error_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "message", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "related_video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "highlighted_video_id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "slug_entity_type", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "display_order", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "role_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tag_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "guests", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "songs", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_url", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "visibility", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'public'", + "generated": null, + "identity": null, + "name": "visibility", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "content_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "event_id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "recorded_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "published_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "view_count", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "session_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "viewed_at", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "video_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "about_page_videos_video_key", + "entityType": "indexes", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "occurred_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_occurred_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actor", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_actor_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "action", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_action_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expires_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "auth_sessions_expires_idx", + "entityType": "indexes", + "schema": "public", + "table": "auth_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "start_date", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_status_start_idx", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "starts_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "live_streams_status_starts_idx", + "entityType": "indexes", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "username", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_username_key", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "membership_status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "started_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_sync_runs_started_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_sync_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "slug_history_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "display_order", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_display_order_idx", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "tags_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "member_sub", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_member_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "role_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_role_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "tag_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_tags_tag_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "visibility", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "published_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_visibility_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "event_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_event_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "recorded_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_recorded_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "trashed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_trash_purge_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "viewed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "view_sessions_viewed_idx", + "entityType": "indexes", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "about_page_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "live_streams_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["related_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_related_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["highlighted_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "site_settings_highlighted_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "site_settings" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_staff_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["role_id"], + "schemaTo": "public", + "tableTo": "staff_roles", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "RESTRICT", + "name": "video_staff_role_id_staff_roles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["member_sub"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "video_staff_member_sub_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["tag_id"], + "schemaTo": "public", + "tableTo": "tags", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_tag_id_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["event_id"], + "schemaTo": "public", + "tableTo": "events", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "videos_event_id_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["trashed_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_trashed_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "view_sessions_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["position", "video_id"], + "nameExplicit": false, + "name": "about_page_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "about_page_videos" + }, + { + "columns": ["video_id", "related_video_id"], + "nameExplicit": false, + "name": "related_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "related_videos" + }, + { + "columns": ["entity_type", "slug"], + "nameExplicit": false, + "name": "slug_history_pkey", + "entityType": "pks", + "schema": "public", + "table": "slug_history" + }, + { + "columns": ["video_id", "role_id", "member_sub"], + "nameExplicit": false, + "name": "video_staff_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_staff" + }, + { + "columns": ["video_id", "tag_id"], + "nameExplicit": false, + "name": "video_tags_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_tags" + }, + { + "columns": ["video_id", "session_id"], + "nameExplicit": false, + "name": "view_sessions_pkey", + "entityType": "pks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "audit_log_pkey", + "schema": "public", + "table": "audit_log", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "auth_sessions_pkey", + "schema": "public", + "table": "auth_sessions", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "events_pkey", + "schema": "public", + "table": "events", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "live_streams_pkey", + "schema": "public", + "table": "live_streams", + "entityType": "pks" + }, + { + "columns": ["sub"], + "nameExplicit": false, + "name": "member_cache_pkey", + "schema": "public", + "table": "member_cache", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "member_sync_runs_pkey", + "schema": "public", + "table": "member_sync_runs", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "site_settings_pkey", + "schema": "public", + "table": "site_settings", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "staff_roles_pkey", + "schema": "public", + "table": "staff_roles", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "tags_pkey", + "schema": "public", + "table": "tags", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "videos_pkey", + "schema": "public", + "table": "videos", + "entityType": "pks" + }, + { + "value": "\"position\" >= 1 and \"position\" <= 6", + "name": "about_page_videos_position_range_check", + "entityType": "checks", + "schema": "public", + "table": "about_page_videos" + }, + { + "value": "\"end_date\" is null or \"end_date\" >= \"start_date\"", + "name": "events_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "events" + }, + { + "value": "\"ends_at\" > \"starts_at\"", + "name": "live_streams_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "live_streams" + }, + { + "value": "\"video_id\" <> \"related_video_id\"", + "name": "related_videos_no_self_reference_check", + "entityType": "checks", + "schema": "public", + "table": "related_videos" + }, + { + "value": "\"status\" <> 'published' or \"published_at\" is not null", + "name": "videos_published_requires_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + }, + { + "value": "\"status\" <> 'trash' or \"trashed_at\" is not null", + "name": "videos_trash_needs_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + } + ], + "renames": [] +} diff --git a/drizzle/20260823193237_organic_ego/migration.sql b/drizzle/20260823193237_organic_ego/migration.sql new file mode 100644 index 0000000..7e58a1d --- /dev/null +++ b/drizzle/20260823193237_organic_ego/migration.sql @@ -0,0 +1,8 @@ +CREATE EXTENSION IF NOT EXISTS pg_trgm;--> statement-breakpoint +-- Ékezet- és kisbetűfüggetlen keresési forma (spec 11.2): a keresés minden +-- szöveges mezőn ezen a normalizált alapon fut. +CREATE OR REPLACE FUNCTION bss_norm(t text) RETURNS text +LANGUAGE sql IMMUTABLE PARALLEL SAFE +AS $$ + SELECT translate(lower(coalesce(t, '')), 'áéíóöőúüű', 'aeioouuu') +$$; diff --git a/drizzle/20260823193237_organic_ego/snapshot.json b/drizzle/20260823193237_organic_ego/snapshot.json new file mode 100644 index 0000000..32eb4e0 --- /dev/null +++ b/drizzle/20260823193237_organic_ego/snapshot.json @@ -0,0 +1,2600 @@ +{ + "id": "8b3b0891-90aa-480f-b0dd-bb197c427e18", + "prevIds": ["d2179d05-9513-4b5c-81de-fe2e2cdf2c7f"], + "version": "8", + "dialect": "postgres", + "ddl": [ + { + "values": ["draft", "published", "archived", "trash"], + "name": "content_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["draft", "published", "archived"], + "name": "event_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["scheduled", "active", "ended"], + "name": "live_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["ok", "error"], + "name": "member_sync_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["startup", "hourly", "manual", "test"], + "name": "member_sync_trigger", + "entityType": "enums", + "schema": "public" + }, + { + "values": [ + "studio_member", + "studio_candidate", + "studio_applicant", + "senior_active", + "senior_archived", + "contributor" + ], + "name": "membership_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["spring", "autumn"], + "name": "semester", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["video", "event"], + "name": "slug_entity_type", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["public", "schonherz", "bss"], + "name": "visibility", + "entityType": "enums", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "about_page_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "audit_log", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "auth_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "live_streams", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_cache", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_sync_runs", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "related_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "site_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "slug_history", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "staff_roles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_staff", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "view_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actor", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "action", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "before_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "after_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "occurred_at", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "groups", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "access_token", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "start_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "end_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "event_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "youtube_video_id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "starts_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ends_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "live_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'scheduled'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activation_error", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ended_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sub", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "full_name", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "nickname", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatar_url", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "membership_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "membership_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "is_leadership", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_year", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "semester", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester_raw", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "introduction", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'ok'", + "generated": null, + "identity": null, + "name": "sync_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_sync_error", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "last_seen_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "member_sync_trigger", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trigger", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "started_at", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "finished_at", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "total_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "changed_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "error_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "message", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "related_video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "highlighted_video_id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "slug_entity_type", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "display_order", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "role_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tag_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "guests", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "songs", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_url", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "visibility", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'public'", + "generated": null, + "identity": null, + "name": "visibility", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "content_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "event_id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "recorded_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "published_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "view_count", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "session_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "viewed_at", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "video_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "about_page_videos_video_key", + "entityType": "indexes", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "occurred_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_occurred_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actor", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_actor_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "action", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_action_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expires_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "auth_sessions_expires_idx", + "entityType": "indexes", + "schema": "public", + "table": "auth_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "start_date", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_status_start_idx", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "starts_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "live_streams_status_starts_idx", + "entityType": "indexes", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "username", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_username_key", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "membership_status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "started_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_sync_runs_started_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_sync_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "slug_history_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "display_order", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_display_order_idx", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "tags_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "member_sub", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_member_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "role_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_role_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "tag_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_tags_tag_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "visibility", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "published_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_visibility_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "event_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_event_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "recorded_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_recorded_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "trashed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_trash_purge_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "viewed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "view_sessions_viewed_idx", + "entityType": "indexes", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "about_page_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "live_streams_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["related_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_related_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["highlighted_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "site_settings_highlighted_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "site_settings" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_staff_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["role_id"], + "schemaTo": "public", + "tableTo": "staff_roles", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "RESTRICT", + "name": "video_staff_role_id_staff_roles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["member_sub"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "video_staff_member_sub_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["tag_id"], + "schemaTo": "public", + "tableTo": "tags", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_tag_id_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["event_id"], + "schemaTo": "public", + "tableTo": "events", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "videos_event_id_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["trashed_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_trashed_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "view_sessions_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["position", "video_id"], + "nameExplicit": false, + "name": "about_page_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "about_page_videos" + }, + { + "columns": ["video_id", "related_video_id"], + "nameExplicit": false, + "name": "related_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "related_videos" + }, + { + "columns": ["entity_type", "slug"], + "nameExplicit": false, + "name": "slug_history_pkey", + "entityType": "pks", + "schema": "public", + "table": "slug_history" + }, + { + "columns": ["video_id", "role_id", "member_sub"], + "nameExplicit": false, + "name": "video_staff_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_staff" + }, + { + "columns": ["video_id", "tag_id"], + "nameExplicit": false, + "name": "video_tags_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_tags" + }, + { + "columns": ["video_id", "session_id"], + "nameExplicit": false, + "name": "view_sessions_pkey", + "entityType": "pks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "audit_log_pkey", + "schema": "public", + "table": "audit_log", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "auth_sessions_pkey", + "schema": "public", + "table": "auth_sessions", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "events_pkey", + "schema": "public", + "table": "events", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "live_streams_pkey", + "schema": "public", + "table": "live_streams", + "entityType": "pks" + }, + { + "columns": ["sub"], + "nameExplicit": false, + "name": "member_cache_pkey", + "schema": "public", + "table": "member_cache", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "member_sync_runs_pkey", + "schema": "public", + "table": "member_sync_runs", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "site_settings_pkey", + "schema": "public", + "table": "site_settings", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "staff_roles_pkey", + "schema": "public", + "table": "staff_roles", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "tags_pkey", + "schema": "public", + "table": "tags", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "videos_pkey", + "schema": "public", + "table": "videos", + "entityType": "pks" + }, + { + "value": "\"position\" >= 1 and \"position\" <= 6", + "name": "about_page_videos_position_range_check", + "entityType": "checks", + "schema": "public", + "table": "about_page_videos" + }, + { + "value": "\"end_date\" is null or \"end_date\" >= \"start_date\"", + "name": "events_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "events" + }, + { + "value": "\"ends_at\" > \"starts_at\"", + "name": "live_streams_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "live_streams" + }, + { + "value": "\"video_id\" <> \"related_video_id\"", + "name": "related_videos_no_self_reference_check", + "entityType": "checks", + "schema": "public", + "table": "related_videos" + }, + { + "value": "\"status\" <> 'published' or \"published_at\" is not null", + "name": "videos_published_requires_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + }, + { + "value": "\"status\" <> 'trash' or \"trashed_at\" is not null", + "name": "videos_trash_needs_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + } + ], + "renames": [] +} diff --git a/drizzle/20260828152718_late_dust/migration.sql b/drizzle/20260828152718_late_dust/migration.sql new file mode 100644 index 0000000..7478beb --- /dev/null +++ b/drizzle/20260828152718_late_dust/migration.sql @@ -0,0 +1,36 @@ +CREATE TYPE "video_encoding_group" AS ENUM('4a3_SD', '16a9_SD', '16a9_HD');--> statement-breakpoint +CREATE TYPE "video_quality" AS ENUM('lq', 'hq');--> statement-breakpoint +ALTER TABLE "videos" ADD COLUMN "encoding_group" "video_encoding_group";--> statement-breakpoint +ALTER TABLE "videos" ADD COLUMN "quality" "video_quality";--> statement-breakpoint +ALTER TABLE "videos" ADD COLUMN "base_filename" varchar(255);--> statement-breakpoint +UPDATE "videos" +SET + "encoding_group" = CASE + WHEN concat("video_url", "thumbnail_url") LIKE '%/bss_vagott_web_4a3_SD/%' THEN '4a3_SD'::"video_encoding_group" + WHEN concat("video_url", "thumbnail_url") LIKE '%/bss_vagott_web_16a9_SD/%' THEN '16a9_SD'::"video_encoding_group" + WHEN concat("video_url", "thumbnail_url") LIKE '%/bss_vagott_web_16a9_HD/%' THEN '16a9_HD'::"video_encoding_group" + ELSE NULL + END, + "quality" = CASE + WHEN "video_url" LIKE '%/low_quality/%_lq.mp4%' THEN 'lq'::"video_quality" + WHEN "video_url" LIKE '%/high_quality/%_hq_SD.mp4%' + OR "video_url" LIKE '%/high_quality/%_hq_HD.mp4%' THEN 'hq'::"video_quality" + ELSE NULL + END, + "base_filename" = coalesce( + substring("thumbnail_url" from '.*/thumbnail/([^/]+)_tn\.png(?:\?.*)?$'), + substring("video_url" from '.*/(?:low_quality|high_quality)/([^/]+)_(?:lq|hq_SD|hq_HD)\.mp4(?:\?.*)?$') + );--> statement-breakpoint +DO $$ +BEGIN + IF EXISTS ( + SELECT 1 + FROM "videos" + WHERE "status" = 'published' + AND ("encoding_group" IS NULL OR "quality" IS NULL OR "base_filename" IS NULL) + ) THEN + RAISE EXCEPTION 'Published video URLs do not match the supported BSS media profile layout'; + END IF; +END $$;--> statement-breakpoint +ALTER TABLE "videos" DROP COLUMN "video_url";--> statement-breakpoint +ALTER TABLE "videos" DROP COLUMN "thumbnail_url"; diff --git a/drizzle/20260828152718_late_dust/snapshot.json b/drizzle/20260828152718_late_dust/snapshot.json new file mode 100644 index 0000000..f4497bf --- /dev/null +++ b/drizzle/20260828152718_late_dust/snapshot.json @@ -0,0 +1,2625 @@ +{ + "version": "8", + "dialect": "postgres", + "id": "d49afa35-5747-4d17-8a65-8556016e34af", + "prevIds": ["8b3b0891-90aa-480f-b0dd-bb197c427e18"], + "ddl": [ + { + "values": ["draft", "published", "archived", "trash"], + "name": "content_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["draft", "published", "archived"], + "name": "event_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["scheduled", "active", "ended"], + "name": "live_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["ok", "error"], + "name": "member_sync_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["startup", "hourly", "manual", "test"], + "name": "member_sync_trigger", + "entityType": "enums", + "schema": "public" + }, + { + "values": [ + "studio_member", + "studio_candidate", + "studio_applicant", + "senior_active", + "senior_archived", + "contributor" + ], + "name": "membership_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["spring", "autumn"], + "name": "semester", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["video", "event"], + "name": "slug_entity_type", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["4a3_SD", "16a9_SD", "16a9_HD"], + "name": "video_encoding_group", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["lq", "hq"], + "name": "video_quality", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["public", "schonherz", "bss"], + "name": "visibility", + "entityType": "enums", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "about_page_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "audit_log", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "auth_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "live_streams", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_cache", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_sync_runs", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "related_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "site_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "slug_history", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "staff_roles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_staff", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "view_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actor", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "action", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "before_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "after_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "occurred_at", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "groups", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "access_token", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "start_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "end_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "event_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "youtube_video_id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "starts_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ends_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "live_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'scheduled'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activation_error", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ended_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sub", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "full_name", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "nickname", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatar_url", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "membership_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "membership_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "is_leadership", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_year", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "semester", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester_raw", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "introduction", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'ok'", + "generated": null, + "identity": null, + "name": "sync_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_sync_error", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "last_seen_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "member_sync_trigger", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trigger", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "started_at", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "finished_at", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "total_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "changed_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "error_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "message", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "related_video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "highlighted_video_id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "slug_entity_type", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "display_order", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "role_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tag_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "guests", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "songs", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "video_encoding_group", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "encoding_group", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "video_quality", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "quality", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "base_filename", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "visibility", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'public'", + "generated": null, + "identity": null, + "name": "visibility", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "content_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "event_id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "recorded_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "published_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "view_count", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "session_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "viewed_at", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "video_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "about_page_videos_video_key", + "entityType": "indexes", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "occurred_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_occurred_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actor", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_actor_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "action", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_action_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expires_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "auth_sessions_expires_idx", + "entityType": "indexes", + "schema": "public", + "table": "auth_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "start_date", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_status_start_idx", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "starts_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "live_streams_status_starts_idx", + "entityType": "indexes", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "username", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_username_key", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "membership_status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "started_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_sync_runs_started_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_sync_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "slug_history_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "display_order", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_display_order_idx", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "tags_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "member_sub", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_member_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "role_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_role_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "tag_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_tags_tag_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "visibility", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "published_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_visibility_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "event_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_event_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "recorded_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_recorded_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "trashed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_trash_purge_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "viewed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "view_sessions_viewed_idx", + "entityType": "indexes", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "about_page_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "live_streams_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["related_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_related_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["highlighted_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "site_settings_highlighted_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "site_settings" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_staff_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["role_id"], + "schemaTo": "public", + "tableTo": "staff_roles", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "RESTRICT", + "name": "video_staff_role_id_staff_roles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["member_sub"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "video_staff_member_sub_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["tag_id"], + "schemaTo": "public", + "tableTo": "tags", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_tag_id_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["event_id"], + "schemaTo": "public", + "tableTo": "events", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "videos_event_id_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["trashed_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_trashed_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "view_sessions_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["position", "video_id"], + "nameExplicit": false, + "name": "about_page_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "about_page_videos" + }, + { + "columns": ["video_id", "related_video_id"], + "nameExplicit": false, + "name": "related_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "related_videos" + }, + { + "columns": ["entity_type", "slug"], + "nameExplicit": false, + "name": "slug_history_pkey", + "entityType": "pks", + "schema": "public", + "table": "slug_history" + }, + { + "columns": ["video_id", "role_id", "member_sub"], + "nameExplicit": false, + "name": "video_staff_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_staff" + }, + { + "columns": ["video_id", "tag_id"], + "nameExplicit": false, + "name": "video_tags_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_tags" + }, + { + "columns": ["video_id", "session_id"], + "nameExplicit": false, + "name": "view_sessions_pkey", + "entityType": "pks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "audit_log_pkey", + "schema": "public", + "table": "audit_log", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "auth_sessions_pkey", + "schema": "public", + "table": "auth_sessions", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "events_pkey", + "schema": "public", + "table": "events", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "live_streams_pkey", + "schema": "public", + "table": "live_streams", + "entityType": "pks" + }, + { + "columns": ["sub"], + "nameExplicit": false, + "name": "member_cache_pkey", + "schema": "public", + "table": "member_cache", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "member_sync_runs_pkey", + "schema": "public", + "table": "member_sync_runs", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "site_settings_pkey", + "schema": "public", + "table": "site_settings", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "staff_roles_pkey", + "schema": "public", + "table": "staff_roles", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "tags_pkey", + "schema": "public", + "table": "tags", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "videos_pkey", + "schema": "public", + "table": "videos", + "entityType": "pks" + }, + { + "value": "\"position\" >= 1 and \"position\" <= 6", + "name": "about_page_videos_position_range_check", + "entityType": "checks", + "schema": "public", + "table": "about_page_videos" + }, + { + "value": "\"end_date\" is null or \"end_date\" >= \"start_date\"", + "name": "events_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "events" + }, + { + "value": "\"ends_at\" > \"starts_at\"", + "name": "live_streams_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "live_streams" + }, + { + "value": "\"video_id\" <> \"related_video_id\"", + "name": "related_videos_no_self_reference_check", + "entityType": "checks", + "schema": "public", + "table": "related_videos" + }, + { + "value": "\"status\" <> 'published' or \"published_at\" is not null", + "name": "videos_published_requires_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + }, + { + "value": "\"status\" <> 'trash' or \"trashed_at\" is not null", + "name": "videos_trash_needs_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + } + ], + "renames": [] +} diff --git a/drizzle/20260828154802_elite_stardust/migration.sql b/drizzle/20260828154802_elite_stardust/migration.sql new file mode 100644 index 0000000..281e3ab --- /dev/null +++ b/drizzle/20260828154802_elite_stardust/migration.sql @@ -0,0 +1,8 @@ +ALTER TABLE "videos" ADD COLUMN "has_hq" boolean DEFAULT false NOT NULL;--> statement-breakpoint +ALTER TABLE "videos" ADD COLUMN "has_lq" boolean DEFAULT false NOT NULL;--> statement-breakpoint +UPDATE "videos" +SET + "has_hq" = "quality" = 'hq', + "has_lq" = "quality" IN ('lq', 'hq');--> statement-breakpoint +ALTER TABLE "videos" DROP COLUMN "quality";--> statement-breakpoint +DROP TYPE "video_quality"; diff --git a/drizzle/20260828154802_elite_stardust/snapshot.json b/drizzle/20260828154802_elite_stardust/snapshot.json new file mode 100644 index 0000000..26500fc --- /dev/null +++ b/drizzle/20260828154802_elite_stardust/snapshot.json @@ -0,0 +1,2632 @@ +{ + "version": "8", + "dialect": "postgres", + "id": "7911fb5f-3326-496e-8b65-65a8e192e468", + "prevIds": ["d49afa35-5747-4d17-8a65-8556016e34af"], + "ddl": [ + { + "values": ["draft", "published", "archived", "trash"], + "name": "content_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["draft", "published", "archived"], + "name": "event_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["scheduled", "active", "ended"], + "name": "live_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["ok", "error"], + "name": "member_sync_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["startup", "hourly", "manual", "test"], + "name": "member_sync_trigger", + "entityType": "enums", + "schema": "public" + }, + { + "values": [ + "studio_member", + "studio_candidate", + "studio_applicant", + "senior_active", + "senior_archived", + "contributor" + ], + "name": "membership_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["spring", "autumn"], + "name": "semester", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["video", "event"], + "name": "slug_entity_type", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["4a3_SD", "16a9_SD", "16a9_HD"], + "name": "video_encoding_group", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["public", "schonherz", "bss"], + "name": "visibility", + "entityType": "enums", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "about_page_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "audit_log", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "auth_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "live_streams", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_cache", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_sync_runs", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "related_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "site_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "slug_history", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "staff_roles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_staff", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "view_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actor", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "action", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "before_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "after_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "occurred_at", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "groups", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "access_token", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "start_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "end_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "event_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "youtube_video_id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "starts_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ends_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "live_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'scheduled'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activation_error", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ended_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sub", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "full_name", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "nickname", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatar_url", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "membership_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "membership_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "is_leadership", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_year", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "semester", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester_raw", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "introduction", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'ok'", + "generated": null, + "identity": null, + "name": "sync_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_sync_error", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "last_seen_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "member_sync_trigger", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trigger", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "member_sync_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "started_at", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "finished_at", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "total_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "changed_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "error_count", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "message", + "entityType": "columns", + "schema": "public", + "table": "member_sync_runs" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "related_video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "highlighted_video_id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "slug_entity_type", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "display_order", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "role_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tag_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "guests", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "songs", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "video_encoding_group", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "encoding_group", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "has_hq", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "has_lq", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "base_filename", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "visibility", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'public'", + "generated": null, + "identity": null, + "name": "visibility", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "content_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "event_id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "recorded_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "published_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "view_count", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "session_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "viewed_at", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "video_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "about_page_videos_video_key", + "entityType": "indexes", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "occurred_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_occurred_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actor", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_actor_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "action", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_action_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expires_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "auth_sessions_expires_idx", + "entityType": "indexes", + "schema": "public", + "table": "auth_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "start_date", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_status_start_idx", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "starts_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "live_streams_status_starts_idx", + "entityType": "indexes", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "username", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_username_key", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "membership_status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "started_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_sync_runs_started_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_sync_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "slug_history_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "display_order", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_display_order_idx", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "tags_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "member_sub", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_member_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "role_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_role_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "tag_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_tags_tag_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "visibility", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "published_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_visibility_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "event_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_event_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "recorded_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_recorded_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "trashed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_trash_purge_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "viewed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "view_sessions_viewed_idx", + "entityType": "indexes", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "about_page_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "live_streams_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["related_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_related_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["highlighted_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "site_settings_highlighted_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "site_settings" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_staff_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["role_id"], + "schemaTo": "public", + "tableTo": "staff_roles", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "RESTRICT", + "name": "video_staff_role_id_staff_roles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["member_sub"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "video_staff_member_sub_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["tag_id"], + "schemaTo": "public", + "tableTo": "tags", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_tag_id_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["event_id"], + "schemaTo": "public", + "tableTo": "events", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "videos_event_id_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["trashed_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_trashed_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "view_sessions_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["position", "video_id"], + "nameExplicit": false, + "name": "about_page_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "about_page_videos" + }, + { + "columns": ["video_id", "related_video_id"], + "nameExplicit": false, + "name": "related_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "related_videos" + }, + { + "columns": ["entity_type", "slug"], + "nameExplicit": false, + "name": "slug_history_pkey", + "entityType": "pks", + "schema": "public", + "table": "slug_history" + }, + { + "columns": ["video_id", "role_id", "member_sub"], + "nameExplicit": false, + "name": "video_staff_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_staff" + }, + { + "columns": ["video_id", "tag_id"], + "nameExplicit": false, + "name": "video_tags_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_tags" + }, + { + "columns": ["video_id", "session_id"], + "nameExplicit": false, + "name": "view_sessions_pkey", + "entityType": "pks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "audit_log_pkey", + "schema": "public", + "table": "audit_log", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "auth_sessions_pkey", + "schema": "public", + "table": "auth_sessions", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "events_pkey", + "schema": "public", + "table": "events", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "live_streams_pkey", + "schema": "public", + "table": "live_streams", + "entityType": "pks" + }, + { + "columns": ["sub"], + "nameExplicit": false, + "name": "member_cache_pkey", + "schema": "public", + "table": "member_cache", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "member_sync_runs_pkey", + "schema": "public", + "table": "member_sync_runs", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "site_settings_pkey", + "schema": "public", + "table": "site_settings", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "staff_roles_pkey", + "schema": "public", + "table": "staff_roles", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "tags_pkey", + "schema": "public", + "table": "tags", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "videos_pkey", + "schema": "public", + "table": "videos", + "entityType": "pks" + }, + { + "value": "\"position\" >= 1 and \"position\" <= 6", + "name": "about_page_videos_position_range_check", + "entityType": "checks", + "schema": "public", + "table": "about_page_videos" + }, + { + "value": "\"end_date\" is null or \"end_date\" >= \"start_date\"", + "name": "events_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "events" + }, + { + "value": "\"ends_at\" > \"starts_at\"", + "name": "live_streams_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "live_streams" + }, + { + "value": "\"video_id\" <> \"related_video_id\"", + "name": "related_videos_no_self_reference_check", + "entityType": "checks", + "schema": "public", + "table": "related_videos" + }, + { + "value": "\"status\" <> 'published' or \"published_at\" is not null", + "name": "videos_published_requires_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + }, + { + "value": "\"status\" <> 'trash' or \"trashed_at\" is not null", + "name": "videos_trash_needs_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + } + ], + "renames": [] +} diff --git a/drizzle/20260828170020_member_webhooks/migration.sql b/drizzle/20260828170020_member_webhooks/migration.sql new file mode 100644 index 0000000..07958ba --- /dev/null +++ b/drizzle/20260828170020_member_webhooks/migration.sql @@ -0,0 +1,40 @@ +CREATE TYPE "webhook_delivery_mode" AS ENUM('operations', 'replace');--> statement-breakpoint +CREATE TYPE "webhook_delivery_status" AS ENUM('ok', 'rejected', 'duplicate');--> statement-breakpoint +CREATE TABLE "webhook_clients" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(), + "name" varchar(200) NOT NULL, + "secret_hash" text NOT NULL, + "created_by" varchar(255), + "created_at" timestamp with time zone DEFAULT now() NOT NULL, + "last_used_at" timestamp with time zone, + "revoked_at" timestamp with time zone +); +--> statement-breakpoint +CREATE TABLE "webhook_deliveries" ( + "id" bigserial PRIMARY KEY, + "client_id" uuid NOT NULL, + "delivery_id" varchar(200), + "mode" "webhook_delivery_mode" DEFAULT 'operations'::"webhook_delivery_mode" NOT NULL, + "status" "webhook_delivery_status" NOT NULL, + "operation_count" integer DEFAULT 0 NOT NULL, + "created_count" integer DEFAULT 0 NOT NULL, + "updated_count" integer DEFAULT 0 NOT NULL, + "deleted_count" integer DEFAULT 0 NOT NULL, + "restored_count" integer DEFAULT 0 NOT NULL, + "message" text, + "received_at" timestamp with time zone DEFAULT now() NOT NULL +); +--> statement-breakpoint +DROP TABLE "member_sync_runs";--> statement-breakpoint +ALTER TABLE "member_cache" ADD COLUMN "created_at" timestamp with time zone DEFAULT now() NOT NULL;--> statement-breakpoint +ALTER TABLE "member_cache" ADD COLUMN "deleted_at" timestamp with time zone;--> statement-breakpoint +ALTER TABLE "member_cache" DROP COLUMN "sync_status";--> statement-breakpoint +ALTER TABLE "member_cache" DROP COLUMN "last_sync_error";--> statement-breakpoint +ALTER TABLE "member_cache" DROP COLUMN "last_seen_at";--> statement-breakpoint +CREATE INDEX "member_cache_deleted_idx" ON "member_cache" ("deleted_at");--> statement-breakpoint +CREATE UNIQUE INDEX "webhook_clients_name_key" ON "webhook_clients" ("name");--> statement-breakpoint +CREATE INDEX "webhook_deliveries_received_idx" ON "webhook_deliveries" ("received_at");--> statement-breakpoint +CREATE UNIQUE INDEX "webhook_deliveries_delivery_key" ON "webhook_deliveries" ("client_id","delivery_id");--> statement-breakpoint +ALTER TABLE "webhook_deliveries" ADD CONSTRAINT "webhook_deliveries_client_id_webhook_clients_id_fkey" FOREIGN KEY ("client_id") REFERENCES "webhook_clients"("id") ON DELETE CASCADE;--> statement-breakpoint +DROP TYPE "member_sync_status";--> statement-breakpoint +DROP TYPE "member_sync_trigger"; \ No newline at end of file diff --git a/drizzle/20260828170020_member_webhooks/snapshot.json b/drizzle/20260828170020_member_webhooks/snapshot.json new file mode 100644 index 0000000..d3aebf7 --- /dev/null +++ b/drizzle/20260828170020_member_webhooks/snapshot.json @@ -0,0 +1,2846 @@ +{ + "version": "8", + "dialect": "postgres", + "id": "417e5c89-24df-413c-8bbf-ad04a47d046b", + "prevIds": ["7911fb5f-3326-496e-8b65-65a8e192e468"], + "ddl": [ + { + "values": ["draft", "published", "archived", "trash"], + "name": "content_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["draft", "published", "archived"], + "name": "event_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["scheduled", "active", "ended"], + "name": "live_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": [ + "studio_member", + "studio_candidate", + "studio_applicant", + "senior_active", + "senior_archived", + "contributor" + ], + "name": "membership_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["spring", "autumn"], + "name": "semester", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["video", "event"], + "name": "slug_entity_type", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["4a3_SD", "16a9_SD", "16a9_HD"], + "name": "video_encoding_group", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["public", "schonherz", "bss"], + "name": "visibility", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["operations", "replace"], + "name": "webhook_delivery_mode", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["ok", "rejected", "duplicate"], + "name": "webhook_delivery_status", + "entityType": "enums", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "about_page_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "audit_log", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "auth_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "live_streams", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_cache", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "related_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "site_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "slug_history", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "staff_roles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_staff", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "view_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "webhook_clients", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "webhook_deliveries", + "entityType": "tables", + "schema": "public" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actor", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "action", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "before_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "after_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "occurred_at", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "groups", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "access_token", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "start_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "end_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "event_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "youtube_video_id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "starts_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ends_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "live_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'scheduled'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activation_error", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ended_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sub", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "full_name", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "nickname", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatar_url", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "membership_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "membership_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "is_leadership", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_year", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "semester", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester_raw", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "introduction", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "deleted_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "related_video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "highlighted_video_id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "slug_entity_type", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "display_order", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "role_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tag_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "guests", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "songs", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "video_encoding_group", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "encoding_group", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "has_hq", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "has_lq", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "base_filename", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "visibility", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'public'", + "generated": null, + "identity": null, + "name": "visibility", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "content_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "event_id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "recorded_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "published_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "view_count", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "session_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "viewed_at", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "webhook_clients" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "webhook_clients" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "secret_hash", + "entityType": "columns", + "schema": "public", + "table": "webhook_clients" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "webhook_clients" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "webhook_clients" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_used_at", + "entityType": "columns", + "schema": "public", + "table": "webhook_clients" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "revoked_at", + "entityType": "columns", + "schema": "public", + "table": "webhook_clients" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "client_id", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "delivery_id", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "webhook_delivery_mode", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'operations'", + "generated": null, + "identity": null, + "name": "mode", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "webhook_delivery_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "operation_count", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "created_count", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "updated_count", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "deleted_count", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "restored_count", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "message", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "received_at", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "video_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "about_page_videos_video_key", + "entityType": "indexes", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "occurred_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_occurred_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actor", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_actor_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "action", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_action_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expires_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "auth_sessions_expires_idx", + "entityType": "indexes", + "schema": "public", + "table": "auth_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "start_date", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_status_start_idx", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "starts_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "live_streams_status_starts_idx", + "entityType": "indexes", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "username", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_username_key", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "membership_status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "deleted_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_deleted_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "slug_history_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "display_order", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_display_order_idx", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "tags_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "member_sub", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_member_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "role_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_role_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "tag_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_tags_tag_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "visibility", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "published_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_visibility_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "event_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_event_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "recorded_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_recorded_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "trashed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_trash_purge_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "viewed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "view_sessions_viewed_idx", + "entityType": "indexes", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "webhook_clients_name_key", + "entityType": "indexes", + "schema": "public", + "table": "webhook_clients" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "received_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "webhook_deliveries_received_idx", + "entityType": "indexes", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "client_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "delivery_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "webhook_deliveries_delivery_key", + "entityType": "indexes", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "about_page_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "live_streams_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["related_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_related_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["highlighted_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "site_settings_highlighted_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "site_settings" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_staff_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["role_id"], + "schemaTo": "public", + "tableTo": "staff_roles", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "RESTRICT", + "name": "video_staff_role_id_staff_roles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["member_sub"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "video_staff_member_sub_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["tag_id"], + "schemaTo": "public", + "tableTo": "tags", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_tag_id_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["event_id"], + "schemaTo": "public", + "tableTo": "events", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "videos_event_id_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["trashed_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_trashed_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "view_sessions_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": false, + "columns": ["client_id"], + "schemaTo": "public", + "tableTo": "webhook_clients", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "webhook_deliveries_client_id_webhook_clients_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "columns": ["position", "video_id"], + "nameExplicit": false, + "name": "about_page_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "about_page_videos" + }, + { + "columns": ["video_id", "related_video_id"], + "nameExplicit": false, + "name": "related_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "related_videos" + }, + { + "columns": ["entity_type", "slug"], + "nameExplicit": false, + "name": "slug_history_pkey", + "entityType": "pks", + "schema": "public", + "table": "slug_history" + }, + { + "columns": ["video_id", "role_id", "member_sub"], + "nameExplicit": false, + "name": "video_staff_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_staff" + }, + { + "columns": ["video_id", "tag_id"], + "nameExplicit": false, + "name": "video_tags_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_tags" + }, + { + "columns": ["video_id", "session_id"], + "nameExplicit": false, + "name": "view_sessions_pkey", + "entityType": "pks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "audit_log_pkey", + "schema": "public", + "table": "audit_log", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "auth_sessions_pkey", + "schema": "public", + "table": "auth_sessions", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "events_pkey", + "schema": "public", + "table": "events", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "live_streams_pkey", + "schema": "public", + "table": "live_streams", + "entityType": "pks" + }, + { + "columns": ["sub"], + "nameExplicit": false, + "name": "member_cache_pkey", + "schema": "public", + "table": "member_cache", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "site_settings_pkey", + "schema": "public", + "table": "site_settings", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "staff_roles_pkey", + "schema": "public", + "table": "staff_roles", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "tags_pkey", + "schema": "public", + "table": "tags", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "videos_pkey", + "schema": "public", + "table": "videos", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "webhook_clients_pkey", + "schema": "public", + "table": "webhook_clients", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "webhook_deliveries_pkey", + "schema": "public", + "table": "webhook_deliveries", + "entityType": "pks" + }, + { + "value": "\"position\" >= 1 and \"position\" <= 6", + "name": "about_page_videos_position_range_check", + "entityType": "checks", + "schema": "public", + "table": "about_page_videos" + }, + { + "value": "\"end_date\" is null or \"end_date\" >= \"start_date\"", + "name": "events_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "events" + }, + { + "value": "\"ends_at\" > \"starts_at\"", + "name": "live_streams_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "live_streams" + }, + { + "value": "\"video_id\" <> \"related_video_id\"", + "name": "related_videos_no_self_reference_check", + "entityType": "checks", + "schema": "public", + "table": "related_videos" + }, + { + "value": "\"status\" <> 'published' or \"published_at\" is not null", + "name": "videos_published_requires_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + }, + { + "value": "\"status\" <> 'trash' or \"trashed_at\" is not null", + "name": "videos_trash_needs_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + } + ], + "renames": [] +} diff --git a/drizzle/20260828171858_academic_semester/migration.sql b/drizzle/20260828171858_academic_semester/migration.sql new file mode 100644 index 0000000..3a14074 --- /dev/null +++ b/drizzle/20260828171858_academic_semester/migration.sql @@ -0,0 +1 @@ +ALTER TABLE "member_cache" DROP COLUMN "joined_semester_raw"; \ No newline at end of file diff --git a/drizzle/20260828171858_academic_semester/snapshot.json b/drizzle/20260828171858_academic_semester/snapshot.json new file mode 100644 index 0000000..b25dd73 --- /dev/null +++ b/drizzle/20260828171858_academic_semester/snapshot.json @@ -0,0 +1,2833 @@ +{ + "version": "8", + "dialect": "postgres", + "id": "6bf6ee70-6c6a-4fd6-8205-d183a8c3a47e", + "prevIds": ["417e5c89-24df-413c-8bbf-ad04a47d046b"], + "ddl": [ + { + "values": ["draft", "published", "archived", "trash"], + "name": "content_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["draft", "published", "archived"], + "name": "event_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["scheduled", "active", "ended"], + "name": "live_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": [ + "studio_member", + "studio_candidate", + "studio_applicant", + "senior_active", + "senior_archived", + "contributor" + ], + "name": "membership_status", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["spring", "autumn"], + "name": "semester", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["video", "event"], + "name": "slug_entity_type", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["4a3_SD", "16a9_SD", "16a9_HD"], + "name": "video_encoding_group", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["public", "schonherz", "bss"], + "name": "visibility", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["operations", "replace"], + "name": "webhook_delivery_mode", + "entityType": "enums", + "schema": "public" + }, + { + "values": ["ok", "rejected", "duplicate"], + "name": "webhook_delivery_status", + "entityType": "enums", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "about_page_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "audit_log", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "auth_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "live_streams", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "member_cache", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "related_videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "site_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "slug_history", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "staff_roles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_staff", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "video_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "videos", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "view_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "webhook_clients", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": false, + "name": "webhook_deliveries", + "entityType": "tables", + "schema": "public" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "about_page_videos" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actor", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "action", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "before_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "after_value", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "occurred_at", + "entityType": "columns", + "schema": "public", + "table": "audit_log" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "groups", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "access_token", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expires_at", + "entityType": "columns", + "schema": "public", + "table": "auth_sessions" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "thumbnail_url", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "start_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "end_date", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "event_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "events" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "youtube_video_id", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "starts_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ends_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "live_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'scheduled'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activation_error", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "activated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ended_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "live_streams" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sub", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "username", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "full_name", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "nickname", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatar_url", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "membership_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "membership_status", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "is_leadership", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_year", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "semester", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "joined_semester", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "introduction", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "deleted_at", + "entityType": "columns", + "schema": "public", + "table": "member_cache" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "related_video_id", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "related_videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "highlighted_video_id", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "site_settings" + }, + { + "type": "slug_entity_type", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_type", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "entity_id", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "slug_history" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "display_order", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "staff_roles" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "normalized_name", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "role_id", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "member_sub", + "entityType": "columns", + "schema": "public", + "table": "video_staff" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tag_id", + "entityType": "columns", + "schema": "public", + "table": "video_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(10000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "guests", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(5000)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "songs", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "video_encoding_group", + "typeSchema": "public", + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "encoding_group", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "has_hq", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "has_lq", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "base_filename", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "visibility", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'public'", + "generated": null, + "identity": null, + "name": "visibility", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "content_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "event_id", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "date", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "recorded_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "published_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "view_count", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updated_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updated_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_at", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "trashed_by", + "entityType": "columns", + "schema": "public", + "table": "videos" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "video_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "session_id", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "viewed_at", + "entityType": "columns", + "schema": "public", + "table": "view_sessions" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "webhook_clients" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "webhook_clients" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "secret_hash", + "entityType": "columns", + "schema": "public", + "table": "webhook_clients" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "created_by", + "entityType": "columns", + "schema": "public", + "table": "webhook_clients" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "created_at", + "entityType": "columns", + "schema": "public", + "table": "webhook_clients" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "last_used_at", + "entityType": "columns", + "schema": "public", + "table": "webhook_clients" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "revoked_at", + "entityType": "columns", + "schema": "public", + "table": "webhook_clients" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "client_id", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "delivery_id", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "webhook_delivery_mode", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": "'operations'", + "generated": null, + "identity": null, + "name": "mode", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "webhook_delivery_status", + "typeSchema": "public", + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "operation_count", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "created_count", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "updated_count", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "deleted_count", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "restored_count", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "message", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "type": "timestamp with time zone", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "received_at", + "entityType": "columns", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "video_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "about_page_videos_video_key", + "entityType": "indexes", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "occurred_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_occurred_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actor", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_actor_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "action", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "audit_log_action_idx", + "entityType": "indexes", + "schema": "public", + "table": "audit_log" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expires_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "auth_sessions_expires_idx", + "entityType": "indexes", + "schema": "public", + "table": "auth_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "start_date", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "events_status_start_idx", + "entityType": "indexes", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "starts_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "live_streams_status_starts_idx", + "entityType": "indexes", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "username", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_username_key", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "membership_status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "deleted_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "member_cache_deleted_idx", + "entityType": "indexes", + "schema": "public", + "table": "member_cache" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "entity_type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "entity_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "slug_history_entity_idx", + "entityType": "indexes", + "schema": "public", + "table": "slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "display_order", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "staff_roles_display_order_idx", + "entityType": "indexes", + "schema": "public", + "table": "staff_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "normalized_name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "tags_normalized_name_key", + "entityType": "indexes", + "schema": "public", + "table": "tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "member_sub", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_member_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "role_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_staff_role_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "tag_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "video_tags_tag_idx", + "entityType": "indexes", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "visibility", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "published_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_visibility_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "event_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_event_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "recorded_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_recorded_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "trashed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "videos_trash_purge_idx", + "entityType": "indexes", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "viewed_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "view_sessions_viewed_idx", + "entityType": "indexes", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "webhook_clients_name_key", + "entityType": "indexes", + "schema": "public", + "table": "webhook_clients" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "received_at", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "webhook_deliveries_received_idx", + "entityType": "indexes", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "client_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "delivery_id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "webhook_deliveries_delivery_key", + "entityType": "indexes", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "about_page_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "about_page_videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "events_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "events" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "live_streams_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "live_streams" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["related_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "related_videos_related_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "related_videos" + }, + { + "nameExplicit": false, + "columns": ["highlighted_video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "site_settings_highlighted_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "site_settings" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_staff_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["role_id"], + "schemaTo": "public", + "tableTo": "staff_roles", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "RESTRICT", + "name": "video_staff_role_id_staff_roles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["member_sub"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "video_staff_member_sub_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_staff" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["tag_id"], + "schemaTo": "public", + "tableTo": "tags", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "video_tags_tag_id_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "video_tags" + }, + { + "nameExplicit": false, + "columns": ["event_id"], + "schemaTo": "public", + "tableTo": "events", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "videos_event_id_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["created_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_created_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["updated_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_updated_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["trashed_by"], + "schemaTo": "public", + "tableTo": "member_cache", + "columnsTo": ["sub"], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "videos_trashed_by_member_cache_sub_fkey", + "entityType": "fks", + "schema": "public", + "table": "videos" + }, + { + "nameExplicit": false, + "columns": ["video_id"], + "schemaTo": "public", + "tableTo": "videos", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "view_sessions_video_id_videos_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "view_sessions" + }, + { + "nameExplicit": false, + "columns": ["client_id"], + "schemaTo": "public", + "tableTo": "webhook_clients", + "columnsTo": ["id"], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "webhook_deliveries_client_id_webhook_clients_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "webhook_deliveries" + }, + { + "columns": ["position", "video_id"], + "nameExplicit": false, + "name": "about_page_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "about_page_videos" + }, + { + "columns": ["video_id", "related_video_id"], + "nameExplicit": false, + "name": "related_videos_pkey", + "entityType": "pks", + "schema": "public", + "table": "related_videos" + }, + { + "columns": ["entity_type", "slug"], + "nameExplicit": false, + "name": "slug_history_pkey", + "entityType": "pks", + "schema": "public", + "table": "slug_history" + }, + { + "columns": ["video_id", "role_id", "member_sub"], + "nameExplicit": false, + "name": "video_staff_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_staff" + }, + { + "columns": ["video_id", "tag_id"], + "nameExplicit": false, + "name": "video_tags_pkey", + "entityType": "pks", + "schema": "public", + "table": "video_tags" + }, + { + "columns": ["video_id", "session_id"], + "nameExplicit": false, + "name": "view_sessions_pkey", + "entityType": "pks", + "schema": "public", + "table": "view_sessions" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "audit_log_pkey", + "schema": "public", + "table": "audit_log", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "auth_sessions_pkey", + "schema": "public", + "table": "auth_sessions", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "events_pkey", + "schema": "public", + "table": "events", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "live_streams_pkey", + "schema": "public", + "table": "live_streams", + "entityType": "pks" + }, + { + "columns": ["sub"], + "nameExplicit": false, + "name": "member_cache_pkey", + "schema": "public", + "table": "member_cache", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "site_settings_pkey", + "schema": "public", + "table": "site_settings", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "staff_roles_pkey", + "schema": "public", + "table": "staff_roles", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "tags_pkey", + "schema": "public", + "table": "tags", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "videos_pkey", + "schema": "public", + "table": "videos", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "webhook_clients_pkey", + "schema": "public", + "table": "webhook_clients", + "entityType": "pks" + }, + { + "columns": ["id"], + "nameExplicit": false, + "name": "webhook_deliveries_pkey", + "schema": "public", + "table": "webhook_deliveries", + "entityType": "pks" + }, + { + "value": "\"position\" >= 1 and \"position\" <= 6", + "name": "about_page_videos_position_range_check", + "entityType": "checks", + "schema": "public", + "table": "about_page_videos" + }, + { + "value": "\"end_date\" is null or \"end_date\" >= \"start_date\"", + "name": "events_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "events" + }, + { + "value": "\"ends_at\" > \"starts_at\"", + "name": "live_streams_end_after_start_check", + "entityType": "checks", + "schema": "public", + "table": "live_streams" + }, + { + "value": "\"video_id\" <> \"related_video_id\"", + "name": "related_videos_no_self_reference_check", + "entityType": "checks", + "schema": "public", + "table": "related_videos" + }, + { + "value": "\"status\" <> 'published' or \"published_at\" is not null", + "name": "videos_published_requires_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + }, + { + "value": "\"status\" <> 'trash' or \"trashed_at\" is not null", + "name": "videos_trash_needs_timestamp_check", + "entityType": "checks", + "schema": "public", + "table": "videos" + } + ], + "renames": [] +} diff --git a/eslint.config.js b/eslint.config.js index 3f272c0..a53d1a8 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -15,6 +15,15 @@ export default [ }, }, { - ignores: ['eslint.config.js', 'prettier.config.js'], + ignores: [ + 'eslint.config.js', + 'prettier.config.js', + 'dist/**', + '.output/**', + '.nitro/**', + '.tanstack/**', + 'node_modules/**', + '**/._*', + ], }, ] diff --git a/mise.toml b/mise.toml new file mode 100644 index 0000000..a3a76a2 --- /dev/null +++ b/mise.toml @@ -0,0 +1,2 @@ +[tools] +pnpm = "latest" diff --git a/package.json b/package.json index d4a6e6a..d6631ea 100644 --- a/package.json +++ b/package.json @@ -10,65 +10,64 @@ "generate-routes": "tsr generate", "build": "vite build", "preview": "vite preview", + "typecheck": "tsr generate && tsc --noEmit", "test": "vitest run", "lint": "eslint", "format": "prettier --write . && eslint --fix", "check": "prettier --check .", - "push": "npx drizzle-kit push", - "generate": "npx drizzle-kit generate", - "migrate": "npx drizzle-kit migrate" + "db:generate": "drizzle-kit generate", + "db:migrate": "drizzle-kit migrate", + "db:seed": "tsx scripts/import-seed.ts", + "webhook:client": "tsx scripts/webhook-client.ts", + "openapi:generate": "tsx scripts/generate-openapi.ts", + "check:oob": "tsx scripts/check-oob.ts", + "infra:bootstrap": "tsx scripts/bootstrap-local.ts" }, "dependencies": { "@base-ui/react": "^1.6.0", "@fontsource-variable/geist": "^5.2.9", - "@tailwindcss/vite": "^4.1.18", - "@tanstack/react-devtools": "latest", - "@tanstack/react-query": "latest", - "@tanstack/react-query-devtools": "latest", - "@tanstack/react-router": "latest", - "@tanstack/react-router-devtools": "latest", - "@tanstack/react-router-ssr-query": "latest", - "@tanstack/react-start": "latest", - "@tanstack/router-plugin": "^1.132.0", + "@tailwindcss/vite": "^4.3.2", + "@tanstack/react-devtools": "^0.10.12", + "@tanstack/react-query": "^5.102.1", + "@tanstack/react-query-devtools": "^5.102.1", + "@tanstack/react-router": "^1.170.32", + "@tanstack/react-router-devtools": "^1.167.1", + "@tanstack/react-router-ssr-query": "^1.167.1", + "@tanstack/react-start": "^1.168.49", + "@tanstack/router-plugin": "^1.168.35", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "dotenv": "^17.4.2", "drizzle-orm": "1.0.0-rc.4", "lucide-react": "^0.545.0", - "nitro": "npm:nitro-nightly@latest", + "nitro": "3.0.260610-beta", "pg": "^8.22.0", - "react": "^19.2.0", - "react-dom": "^19.2.0", + "react": "^19.2.7", + "react-dom": "^19.2.7", "shadcn": "^4.13.0", "tailwind-merge": "^3.6.0", - "tailwindcss": "^4.1.18", + "tailwindcss": "^4.3.2", "tw-animate-css": "^1.4.0" }, "devDependencies": { - "@tailwindcss/typography": "^0.5.16", - "@tanstack/devtools-vite": "latest", - "@tanstack/eslint-config": "latest", - "@tanstack/router-cli": "^1.132.0", + "@tailwindcss/typography": "^0.5.20", + "@tanstack/devtools-vite": "^0.8.5", + "@tanstack/eslint-config": "^0.4.0", + "@tanstack/router-cli": "^1.167.33", "@testing-library/dom": "^10.4.1", - "@testing-library/react": "^16.3.0", - "@types/node": "^22.10.2", + "@testing-library/react": "^16.3.2", + "@types/node": "^22.20.1", "@types/pg": "^8.20.0", - "@types/react": "^19.2.0", - "@types/react-dom": "^19.2.0", - "@vitejs/plugin-react": "^6.0.1", + "@types/react": "^19.2.17", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.3", "drizzle-kit": "1.0.0-rc.4", - "eslint": "^9.20.0", + "eslint": "^9.39.5", "jsdom": "^28.1.0", - "prettier": "^3.8.1", + "prettier": "^3.9.5", "tsx": "^4.23.1", - "typescript": "^6.0.2", - "vite": "^8.0.0", - "vitest": "^4.1.5" - }, - "pnpm": { - "onlyBuiltDependencies": [ - "esbuild", - "lightningcss" - ] + "typescript": "^6.0.3", + "vite": "^8.1.4", + "vitest": "^4.1.10" } -} \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 27e6eca..739e1ea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,32 +15,32 @@ importers: specifier: ^5.2.9 version: 5.2.9 '@tailwindcss/vite': - specifier: ^4.1.18 + specifier: ^4.3.2 version: 4.3.2(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) '@tanstack/react-devtools': - specifier: latest - version: 0.10.8(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(csstype@3.2.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(solid-js@1.9.14) + specifier: ^0.10.12 + version: 0.10.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(csstype@3.2.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(solid-js@1.9.14) '@tanstack/react-query': - specifier: latest - version: 5.101.2(react@19.2.7) + specifier: ^5.102.1 + version: 5.102.1(react@19.2.7) '@tanstack/react-query-devtools': - specifier: latest - version: 5.101.2(@tanstack/react-query@5.101.2(react@19.2.7))(react@19.2.7) + specifier: ^5.102.1 + version: 5.102.1(@tanstack/react-query@5.102.1(react@19.2.7))(react@19.2.7) '@tanstack/react-router': - specifier: latest - version: 1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + specifier: ^1.170.32 + version: 1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tanstack/react-router-devtools': - specifier: latest - version: 1.167.0(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@tanstack/router-core@1.171.15)(csstype@3.2.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + specifier: ^1.167.1 + version: 1.167.1(@tanstack/react-router@1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@tanstack/router-core@1.171.27)(csstype@3.2.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tanstack/react-router-ssr-query': - specifier: latest - version: 1.167.1(@tanstack/query-core@5.101.2)(@tanstack/react-query@5.101.2(react@19.2.7))(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@tanstack/router-core@1.171.15)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + specifier: ^1.167.1 + version: 1.167.1(@tanstack/query-core@5.102.1)(@tanstack/react-query@5.102.1(react@19.2.7))(@tanstack/react-router@1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@tanstack/router-core@1.171.27)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tanstack/react-start': - specifier: latest - version: 1.168.28(crossws@0.4.10(srvx@0.8.16))(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rolldown@1.1.5)(rollup@4.62.2)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) + specifier: ^1.168.49 + version: 1.168.49(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rolldown@1.1.5)(rollup@4.62.2)(supports-color@7.2.0)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) '@tanstack/router-plugin': - specifier: ^1.132.0 - version: 1.168.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.62.2)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) + specifier: ^1.168.35 + version: 1.168.35(@tanstack/react-router@1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.62.2)(supports-color@7.2.0)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -57,87 +57,87 @@ importers: specifier: ^0.545.0 version: 0.545.0(react@19.2.7) nitro: - specifier: npm:nitro-nightly@latest - version: nitro-nightly@4.0.0-20251010-091516-7cafddba(drizzle-orm@1.0.0-rc.4(@types/pg@8.20.0)(pg@8.22.0)(zod@3.25.76))(lru-cache@11.5.2)(rolldown@1.1.5)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) + specifier: 3.0.260610-beta + version: 3.0.260610-beta(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@1.0.0-rc.4(@types/pg@8.20.0)(pg@8.22.0)(zod@3.25.76))(jiti@2.7.0)(lru-cache@11.5.2)(rollup@4.62.2)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) pg: specifier: ^8.22.0 version: 8.22.0 react: - specifier: ^19.2.0 + specifier: ^19.2.7 version: 19.2.7 react-dom: - specifier: ^19.2.0 + specifier: ^19.2.7 version: 19.2.7(react@19.2.7) shadcn: specifier: ^4.13.0 - version: 4.13.0(typescript@6.0.3) + version: 4.13.0(supports-color@7.2.0)(typescript@6.0.3) tailwind-merge: specifier: ^3.6.0 version: 3.6.0 tailwindcss: - specifier: ^4.1.18 + specifier: ^4.3.2 version: 4.3.2 tw-animate-css: specifier: ^1.4.0 version: 1.4.0 devDependencies: '@tailwindcss/typography': - specifier: ^0.5.16 + specifier: ^0.5.20 version: 0.5.20(tailwindcss@4.3.2) '@tanstack/devtools-vite': - specifier: latest - version: 0.8.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) + specifier: ^0.8.5 + version: 0.8.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) '@tanstack/eslint-config': - specifier: latest - version: 0.4.0(@typescript-eslint/utils@8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + specifier: ^0.4.0 + version: 0.4.0(@typescript-eslint/utils@8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) '@tanstack/router-cli': - specifier: ^1.132.0 - version: 1.167.19 + specifier: ^1.167.33 + version: 1.167.33(supports-color@7.2.0) '@testing-library/dom': specifier: ^10.4.1 version: 10.4.1 '@testing-library/react': - specifier: ^16.3.0 + specifier: ^16.3.2 version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@types/node': - specifier: ^22.10.2 + specifier: ^22.20.1 version: 22.20.1 '@types/pg': specifier: ^8.20.0 version: 8.20.0 '@types/react': - specifier: ^19.2.0 + specifier: ^19.2.17 version: 19.2.17 '@types/react-dom': - specifier: ^19.2.0 + specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.17) '@vitejs/plugin-react': - specifier: ^6.0.1 + specifier: ^6.0.3 version: 6.0.3(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) drizzle-kit: specifier: 1.0.0-rc.4 version: 1.0.0-rc.4 eslint: - specifier: ^9.20.0 - version: 9.39.5(jiti@2.7.0) + specifier: ^9.39.5 + version: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) jsdom: specifier: ^28.1.0 - version: 28.1.0 + version: 28.1.0(supports-color@7.2.0) prettier: - specifier: ^3.8.1 + specifier: ^3.9.5 version: 3.9.5 tsx: specifier: ^4.23.1 version: 4.23.1 typescript: - specifier: ^6.0.2 + specifier: ^6.0.3 version: 6.0.3 vite: - specifier: ^8.0.0 + specifier: ^8.1.4 version: 8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1) vitest: - specifier: ^4.1.5 - version: 4.1.10(@types/node@22.20.1)(jsdom@28.1.0)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) + specifier: ^4.1.10 + version: 4.1.10(@types/node@22.20.1)(jsdom@28.1.0(supports-color@7.2.0))(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) packages: @@ -776,8 +776,8 @@ packages: '@fontsource-variable/geist@5.2.9': resolution: {integrity: sha512-TP+QSBG3wxKGPE33CbMy/L0Nu3qvJ6Fy81Yc4LnQ95xH+i+cfEp8fyU8/kfV14YwszxIFPhnoMTbjL71waVpyQ==} - '@hono/node-server@1.19.14': - resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==} + '@hono/node-server@1.19.17': + resolution: {integrity: sha512-dSneS5qhiauZWGDCeK4o695Xd9nUNjviSZCMQrj10eetr8Uln1ucn6bbphOM6UynAMMtNIzZNSpL9vnASJwrPQ==} engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 @@ -838,6 +838,15 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@neodrag/core@3.0.0-next.11': + resolution: {integrity: sha512-3WQWxyrbxiaK9zS5JU2wJsW2gpoQlZBXVghduBh61JpqaeE0T0cte8R0qYK2RuJo3J2TYQYqxO19CpG/C1i5eg==} + + '@neodrag/solid@3.0.0-next.11': + resolution: {integrity: sha512-vCBIn/pimjWMQ6vhTS2/O1XNAwzVtc4eUhdbQ91WykbZWWqQ5NocDXt/1OdYrEkeRzJcpCv8wEz5PnMkgKP81Q==} + peerDependencies: + '@neodrag/core': 3.0.0-next.11 + solid-js: ^1.0.0 + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1380,12 +1389,16 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 + '@tanstack/devtools-bundler-core@0.1.3': + resolution: {integrity: sha512-F0tlxIyfFqXkZ1mJP1EjtkiSeJA+ztXY2AYOHf7r4goCIEAOp86N9PFJ/yv8vu1TnmxGS6vKsZCS3Kyls9xQQA==} + engines: {node: '>=18'} + '@tanstack/devtools-client@0.0.8': resolution: {integrity: sha512-cG3iZkGWCwN330bLBKa8+9r4Of2AXNoz2zUqcsy/4XsD3105ghVBx78cGyvJj9fSclNomPxoqAnDGXXhg1WLvA==} engines: {node: '>=18'} - '@tanstack/devtools-event-bus@0.4.2': - resolution: {integrity: sha512-2LHzhwBFlKHCcklsQrGe8TeyjHd4XAF8nuCO6wHmva5fePUkJUULbu6CsCNAlGlCi0KkEsMXZSvRdR4HgMq4yA==} + '@tanstack/devtools-event-bus@0.4.3': + resolution: {integrity: sha512-NeegBt5/n2E5q4DbrXHqECBq42+kDi6JBOp8/+RNqkIE+P4hJpbM36kGyjnGQFMWOoku31qhMyX9/48VuTTdmg==} engines: {node: '>=18'} '@tanstack/devtools-event-client@0.5.0': @@ -1393,21 +1406,21 @@ packages: engines: {node: '>=18'} hasBin: true - '@tanstack/devtools-ui@0.6.0': - resolution: {integrity: sha512-CVaM6rT6Nl5ijo83vJYFa2SjofvpuOl/uOvbYGhBrRgUhhelNHhx8zZX+hnZCHmIr0/lzM65hsocnZ72592Rvg==} + '@tanstack/devtools-ui@0.7.1': + resolution: {integrity: sha512-3xQ/ezZ2qVNszhjpCN2N3jn7uHc2J1PMgcyjHzH4XZBt9xAQyMMcPNoR2cd7rzReyxWoJpZUWiDBmOJiCtLj9A==} engines: {node: '>=18'} peerDependencies: solid-js: '>=1.9.7' - '@tanstack/devtools-vite@0.8.1': - resolution: {integrity: sha512-oQxOo0fI0bwhHtw/psFlIR0OS/bsKrirBxwnw2vuhCM4bjt3k4EZZsW/lvZ1+Vpouhts7LSyvngnxvGXbQ1sUQ==} + '@tanstack/devtools-vite@0.8.5': + resolution: {integrity: sha512-xaifCEmiwwzizlbp973oISXNsnmuU/BugLa66gryAZaPJJ/qo1kJd2DxY5X960eHwmyIS3SN0KYrL3/aRhucmA==} engines: {node: '>=18'} hasBin: true peerDependencies: vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@tanstack/devtools@0.12.5': - resolution: {integrity: sha512-JdxTSeVdjJheycgz4c7qbldNKDCEDWlWr1l9dZBhd9sOmRBT5Z70ka9Eb8mb+FUnalcOIB62IDSR/iSxAIUD8Q==} + '@tanstack/devtools@0.14.2': + resolution: {integrity: sha512-8FVVmDU+x3iEwrl5rtbIhud8gwp9eSXPlhs36SCV59yAtXmheFFvLqLAUXpfIU79sZVBg3LLTy2VlTIXaWbaBw==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -1419,18 +1432,18 @@ packages: peerDependencies: eslint: ^9.0.0 || ^10.0.0 - '@tanstack/history@1.162.0': - resolution: {integrity: sha512-79pf/RkhteYZTRgcR4F9kbk84P2N8rugQJswxfIqovlbRiT3yI7eBE+5QorIrZaOKktsgzRlXh1l/du/xpl4iA==} + '@tanstack/history@1.162.1': + resolution: {integrity: sha512-DR9t6lfLVdrjgCwpglrR9DR7Ok8/HlXjcOE+goWXF3zyuLUO/ug7vMbSFxTqrQTtbRghJfyhmIZ0S6LhPIy44w==} engines: {node: '>=20.19'} - '@tanstack/query-core@5.101.2': - resolution: {integrity: sha512-hH5MLoJhF7KaIGd7q3xTXGXvslI+GYlM1Z/35aSHHWaCJWB7XvTSHYuV3eM7tw+aE0mT/xMro4M4Q9rCGHT0lw==} + '@tanstack/query-core@5.102.1': + resolution: {integrity: sha512-bJTsrO2ODWSgg+x1leTsK036GBtmNNjnrF1Vk06J5fg/phYZLQIdXrBe0uf5xTItXYvIW1MtbLhyPw7cPMqUUQ==} - '@tanstack/query-devtools@5.101.2': - resolution: {integrity: sha512-o+wHcqgN7Pp0s8v1i0UGq/ZrrEKrxdIiMQmKRdYb2w7NPtylYSJ4+wg/tIn71m9DLstwUwdEGAvROdly6HXP6w==} + '@tanstack/query-devtools@5.102.1': + resolution: {integrity: sha512-zX3fv4ZpkK+5Wzw0V2Axk1z6d1jMfMGgRdLVkF6BCJwZt8Iqveboy1G8rXV1o4cQ4ptKpMS45iOWPHape4QXoQ==} - '@tanstack/react-devtools@0.10.8': - resolution: {integrity: sha512-YJV6YttQf9lhhPbPBLULgy1eScEvJUMsCS26mjg9hfBKgAJQA5sF9zvzorDzW9Ob6o/asoXikO81JnRUVuFX0Q==} + '@tanstack/react-devtools@0.10.12': + resolution: {integrity: sha512-dgoz7TFm97Izo/D34z91PD0h+ufk+eBmoN9OgRHJlj/c7Ol5xpIP7bqLBNByjgt5paRE2eSu5AQHV92Ul+G6iw==} engines: {node: '>=18'} peerDependencies: '@types/react': '>=16.8' @@ -1438,23 +1451,23 @@ packages: react: '>=16.8' react-dom: '>=16.8' - '@tanstack/react-query-devtools@5.101.2': - resolution: {integrity: sha512-eU7HctdA9gDjqoERoEdzLbw9DiqnBDfh5+Hu0u26gjqoHJezOpQAuiesDL2VvkU+2cPV76zgv0tMZsOrI4LjnQ==} + '@tanstack/react-query-devtools@5.102.1': + resolution: {integrity: sha512-4ZrumxXJyt3va+L85M5g/ppBU5LfBrl01IbxmVU9M4Ti/b+2O9E76emulZRsOjRS6AGtdDFQnMJnmYA/fGga0A==} peerDependencies: - '@tanstack/react-query': ^5.101.2 + '@tanstack/react-query': ^5.102.1 react: ^18 || ^19 - '@tanstack/react-query@5.101.2': - resolution: {integrity: sha512-seDkr6kzGzX1okaaTtZPtgA688CDPlXUz1C6xSg0ESqn04Vuc8tlrYms1s3de+znBqhPVxFRfpAfUf+6XvfPWg==} + '@tanstack/react-query@5.102.1': + resolution: {integrity: sha512-DKJeRvxjsGUWhUVnVVXSseTS0SKBMLSkrz8dm7i08r93IQQ2gAfUkX1e801gVZ18KSwHiG5yng4tQm5+qSGS0w==} peerDependencies: react: ^18 || ^19 - '@tanstack/react-router-devtools@1.167.0': - resolution: {integrity: sha512-nGw095EG7IHx0h5NtlEmzf6vcCTaFNPWdTSuDKazajhN0ct/v/TkekJ9J6KYUCeV1a8/2ZmToc58M+0rrOyn7w==} + '@tanstack/react-router-devtools@1.167.1': + resolution: {integrity: sha512-pjfGrmjj4d7naEPM7oshqFfwBoxDPNo/UxltlHH5ePbHsJ+plBhd+JaAewm1ueYOjZ0js9hckjWWDYXpCrSfKw==} engines: {node: '>=20.19'} peerDependencies: - '@tanstack/react-router': ^1.170.0 - '@tanstack/router-core': ^1.170.0 + '@tanstack/react-router': ^1.170.19 + '@tanstack/router-core': ^1.171.16 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' peerDependenciesMeta: @@ -1471,26 +1484,26 @@ packages: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.170.18': - resolution: {integrity: sha512-wpbGYZEp/fmz1q4bn7BD8VZ+/VZ7GBqSJv5V969pU+chP8y7dquWDmKTFMohvUegb9lg12m1uPVvD6kB2wORvQ==} + '@tanstack/react-router@1.170.32': + resolution: {integrity: sha512-SIpxvaTKco100a5ZR3ePmArbhtm3XOx+w1dpGYY9gxHDta4iXSKDdQuhLonwJbIMkVJsU1rwXf0UDHMrF/1snw==} engines: {node: '>=20.19'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-start-client@1.168.16': - resolution: {integrity: sha512-1OfHgy0wpHwe2tlB3FxMeA+IMX6Il/QAMf+8UdXuimReIc2Lz3BkMLBL38k4GIxBguX9sI8EMLO5jlTZ4e1olw==} + '@tanstack/react-start-client@1.168.30': + resolution: {integrity: sha512-qsZuykUl1EF0/rc1bin1RtjFzz07YMOTBzhOstSDzbOVm/WKf1QKFTN+qAZi74xlbXSWNuT2MiFRyg4RKwj8iw==} engines: {node: '>=22.12.0'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-start-rsc@0.1.27': - resolution: {integrity: sha512-4Gt8+XHRhcYJjfw1rTlkW5ZxRWcp6AmvPoBf1p7ysOSVlnfVitQBqgAAFNGy+d745vWfoz1/JWqyFBP8IVVYYg==} + '@tanstack/react-start-rsc@0.1.48': + resolution: {integrity: sha512-UglRdTMuF3c4dvzL/gh4dMVbMWHsPy8ZgTQdT2qpTlyt1b/3m+R40tBFdsfTgw76VTXivW+qV/ih0PN9000XTw==} engines: {node: '>=22.12.0'} peerDependencies: '@rspack/core': '>=2.0.0-0' - '@vitejs/plugin-rsc': '>=0.5.20' + '@vitejs/plugin-rsc': '>=0.5.30' react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' react-server-dom-rspack: '>=0.0.2' @@ -1502,15 +1515,15 @@ packages: react-server-dom-rspack: optional: true - '@tanstack/react-start-server@1.167.22': - resolution: {integrity: sha512-eH2PeHuLfL3R5YzE9+y2FfcE4Ld1LNV2ZfrCNVPJMMJFt+9nXDaRHg9BsEmc+JkTAGzz3FKLyQEoWwpbG6Ehqg==} + '@tanstack/react-start-server@1.167.37': + resolution: {integrity: sha512-cODHpFU8vIm7AdHii9W3NEuwyruNmT5wLDZjRsJLT9Jp+7FACnfJrRbvxnp1ldSv/9mxcHKi/OgwbdHQeMZcAQ==} engines: {node: '>=22.12.0'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-start@1.168.28': - resolution: {integrity: sha512-UyJ/OYBw7x8MQclyXKlbg72qzSTK6Do4AugHcx0LoagHNg6tQgvF0l2HZqll2CrxKAlv2Ar8+0gEkHnFYxxI5Q==} + '@tanstack/react-start@1.168.49': + resolution: {integrity: sha512-iQb1ZoEHqvZMGLR4G7v3tTtgL06yv/bwxvGP3waVHxVn7bRpyopM44YbOluaGkcJzc13ZTvdLKWYNAN3bxMX/Q==} engines: {node: '>=22.12.0'} peerDependencies: '@rsbuild/core': ^2.0.0 @@ -1532,35 +1545,35 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-cli@1.167.19': - resolution: {integrity: sha512-QdgcIJ/BBaMD94RRnkUFrwOnDe5cO3fXbt3p3DklEqUCI1PpTkt7DssRsL0Hf01y0gJU7Jm1KHE4/Am72BcOZQ==} + '@tanstack/router-cli@1.167.33': + resolution: {integrity: sha512-OZcP4zmzj85rLq2Cr6I3tZDT9Yb8gsquDgka+baKOKXJULBqP5uZ56X8Ggrgq5IBypk47/b1K2tA1qChd1qUig==} engines: {node: '>=20.19'} hasBin: true - '@tanstack/router-core@1.171.15': - resolution: {integrity: sha512-IILCDcLaItMZQ2jEmCABHY1Nhjjn5XUvwpQp3e4Nmu+vfg0BgYFuu/QASz2SwE2ZNbVMrvt8X/wxa+Gg5aErxA==} + '@tanstack/router-core@1.171.27': + resolution: {integrity: sha512-wDwSLvoLwIaNcnx9UNcN9Mb7Y8QwCYq1U1RQZwyN186gnkIoIYI2SOxy8VqH1vFigbkHkk4FmwMAQlghPgDK2g==} engines: {node: '>=20.19'} - '@tanstack/router-devtools-core@1.168.0': - resolution: {integrity: sha512-wQoQhlBK7nlZgqzaqdYXKWNTpdHdsaREdaPhFZVH0/Ador+F+eM3/NF2i3f2LPeS0GgKraZUQXe1Q/1+KHyEYg==} + '@tanstack/router-devtools-core@1.168.1': + resolution: {integrity: sha512-qr4voa4cpSMwQvS3867xkU3AB3MtJbTuovKIy+btjJ/Faju6er9w0nDylmD+005Mk/3YKw9/iueZJl2JAB7JOA==} engines: {node: '>=20.19'} peerDependencies: - '@tanstack/router-core': ^1.170.0 + '@tanstack/router-core': ^1.171.16 csstype: ^3.0.10 peerDependenciesMeta: csstype: optional: true - '@tanstack/router-generator@1.167.19': - resolution: {integrity: sha512-db3AQGLinf8ZQ8AKMyxLVWwHIFZxtx+zLktvPXv/nFH/B793/Z7lKLl4dUWM3JpAluynDSVVKaTWQVTAgTYmVA==} + '@tanstack/router-generator@1.167.33': + resolution: {integrity: sha512-Z3lCWIPuRUMPmuI8Mm48x/s49TxmHOaFVZ52j1W1QKYrsFHyT6U/h9bqfHJDxfQ8kz7y9q+W1YPKZ15Ee7yuCA==} engines: {node: '>=20.19'} - '@tanstack/router-plugin@1.168.20': - resolution: {integrity: sha512-G5S63xDr2AxADtWP+0tQtJsduijT/Mk85hDh3Od4ct8UV0PHr2f/H1CGl72lYWLgcWRMn6bKJoQhz27QFIgLRQ==} + '@tanstack/router-plugin@1.168.35': + resolution: {integrity: sha512-foDAZKFqHXae+oFbIgcsSvy2QCVRn7XdS3nhwcRvD+ed6JrKPUP/1lQMsZLJqWycgR1vkZF7gs955KGa0NZQ0w==} engines: {node: '>=20.19'} peerDependencies: '@rsbuild/core': '>=1.0.2 || ^2.0.0' - '@tanstack/react-router': ^1.170.18 + '@tanstack/react-router': ^1.170.32 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0' vite-plugin-solid: ^2.11.10 || ^3.0.0-0 webpack: '>=5.92.0' @@ -1587,16 +1600,16 @@ packages: resolution: {integrity: sha512-hTWqJtqIFFdvuCl8WXNyrodp2L9zo2G37xKRrcVmVRWpAB2h+U1LuRAfS4tsFTiWOIoE/B+WDVFB8JpoEdw6jQ==} engines: {node: '>=20.19'} - '@tanstack/start-client-core@1.170.14': - resolution: {integrity: sha512-yasBgEIFSWysL4EiFIGwp638nCoXXKiTqkc48EP2oty4OyNsZPTC1yfJ82zjq2KGkTAYtIaeMl7otqqRl1n85Q==} + '@tanstack/start-client-core@1.170.27': + resolution: {integrity: sha512-Ro6ZSM0NgYKDMxM0e8qyU4mBfnld2Zb74BA/9f4i35C0Y3IAA8Zxs/DIPfOo9VRYWp5c5n5Q8dRBn2qn0vtPhQ==} engines: {node: '>=22.12.0'} '@tanstack/start-fn-stubs@1.162.0': resolution: {integrity: sha512-QWfUZ3Yo923tdQn38LyKMU8rcTw69zc+T4dAvgTWV4O56SqFRsGfS0lSWIMhJRwXIx/bvdi7nTUBDdZtTHtpTQ==} engines: {node: '>=22.12.0'} - '@tanstack/start-plugin-core@1.171.20': - resolution: {integrity: sha512-s2n82ykGXGkDSoJwGZP85vC9Dv5vAN6fya5TCSm/cvUn+r/g30iDR1x+Ptizas3fIvcracSOOvRnma4RJ8Orww==} + '@tanstack/start-plugin-core@1.171.39': + resolution: {integrity: sha512-Zyj6G4MDFLXcHYhPavhewCBo8dsxi3qvPk31zl/QtTzYzOY9rJHDDBGarKsJq20ziChmkGn/sttYqb4vGCxJDA==} engines: {node: '>=22.12.0'} peerDependencies: '@rsbuild/core': ^2.0.0 @@ -1607,12 +1620,12 @@ packages: vite: optional: true - '@tanstack/start-server-core@1.169.17': - resolution: {integrity: sha512-u0N+PHJhMHnzfnlXYI9F+A/qweDe3E2X0mfkORPGIEkNQgvS548RA9fjwvixR2en5b848CfpEqUzwFhm/tQ40Q==} + '@tanstack/start-server-core@1.169.31': + resolution: {integrity: sha512-56w8l+Fao01YCrmv0hzNxL3b3FRmqLRGdE11izZNQsW+1CcSYuehAM5khWKABuI1DI/UIBLGV7BwL4Dlg0eHCw==} engines: {node: '>=22.12.0'} - '@tanstack/start-storage-context@1.167.17': - resolution: {integrity: sha512-ntkDyGx0PE0opIlWNAMpkMb8qkjR4uyCUOfC0CiT0STM25+EcwPuwYNfDXXeVObMrTAPgsQ4yOj3xdY0Xr4ptw==} + '@tanstack/start-storage-context@1.167.29': + resolution: {integrity: sha512-8qfprC5774XMRDQlMogkfiGpFLiBf0xDG4bMFUbfkSzpCAQwpLbgGY4Zwft22O9rKYq2vUXusKAdVjvJTUEquQ==} engines: {node: '>=22.12.0'} '@tanstack/store@0.9.3': @@ -2007,12 +2020,12 @@ packages: resolution: {integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==} engines: {node: '>=18'} - brace-expansion@1.1.16: - resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==} + brace-expansion@1.1.18: + resolution: {integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==} - brace-expansion@5.0.7: - resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} - engines: {node: 18 || 20 || >=22} + brace-expansion@5.0.9: + resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} + engines: {node: 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -2129,9 +2142,6 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-es@2.0.1: - resolution: {integrity: sha512-aVf4A4hI2w70LnF7GG+7xDQUkliwiXWXFvTjkip4+b64ygDQ2sJPRSKFDHbxn8o0xu9QzPkMuuiWIXyFSE2slA==} - cookie-es@3.1.1: resolution: {integrity: sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==} @@ -2261,9 +2271,6 @@ packages: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} - defu@6.1.7: - resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} - depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -2272,9 +2279,6 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - destr@2.0.5: - resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -2484,6 +2488,24 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + env-runner@0.1.16: + resolution: {integrity: sha512-2LRJM4P2KLX6J83QZZrMqvgCDt/D5ea7wPcI3yYiy5cG/9rX5QwdwZFx0D7ktWnjdRyZxYjttGGorb5nFqb1CA==} + hasBin: true + peerDependencies: + '@netlify/runtime': ^4.1.23 + '@vercel/queue': '>=0.2.0' + miniflare: ^4.20260515.0 + wrangler: ^4.0.0 + peerDependenciesMeta: + '@netlify/runtime': + optional: true + '@vercel/queue': + optional: true + miniflare: + optional: true + wrangler: + optional: true + error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} @@ -2586,6 +2608,7 @@ packages: eslint@9.39.5: resolution: {integrity: sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true peerDependencies: jiti: '*' @@ -2675,8 +2698,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.1.3: - resolution: {integrity: sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==} + fast-uri@3.1.6: + resolution: {integrity: sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==} fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -2817,17 +2840,18 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - h3@2.0.1-rc.2: - resolution: {integrity: sha512-2vS7OETzPDzGQxmmcs6ttu7p0NW25zAdkPXYOr43dn4GZf81uUljJvupa158mcpUGpsQUqIy4O4THWUQT1yVeA==} + h3@2.0.1-rc.20: + resolution: {integrity: sha512-28ljodXuUp0fZovdiSRq4G9OgrxCztrJe5VdYzXAB7ueRvI7pIUqLU14Xi3XqdYJ/khXjfpUOOD2EQa6CmBgsg==} engines: {node: '>=20.11.1'} + hasBin: true peerDependencies: crossws: ^0.4.1 peerDependenciesMeta: crossws: optional: true - h3@2.0.1-rc.20: - resolution: {integrity: sha512-28ljodXuUp0fZovdiSRq4G9OgrxCztrJe5VdYzXAB7ueRvI7pIUqLU14Xi3XqdYJ/khXjfpUOOD2EQa6CmBgsg==} + h3@2.0.1-rc.22: + resolution: {integrity: sha512-Esv0DMIuPkCTSWCA0vO73vcTqwzH1wjSrAO1TXNu/K3up1sZHa9EKMapbmxCDYBeymC3fVTk4qxp7ogQWQ+KgA==} engines: {node: '>=20.11.1'} hasBin: true peerDependencies: @@ -2848,10 +2872,13 @@ packages: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} - hono@4.12.30: - resolution: {integrity: sha512-emn+JoJjrN9YTpRDS5it/UI2SO9BAE37T6I3d963RxcZ81G9A4pr2SZTEiiaiKbzx+NKRg5BZ89fCL7gCJCUog==} + hono@4.13.5: + resolution: {integrity: sha512-O6+/eCYRkzzzy0rPWwKLiGBR1nFuUPZynnwjxN1MBA62NNqbT0wQEzQyK2gSO5yDIDB336sXQleAhOHrzlYyKw==} engines: {node: '>=16.9.0'} + hookable@6.1.1: + resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==} + html-encoding-sniffer@6.0.0: resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -2868,6 +2895,9 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} + httpxy@0.5.5: + resolution: {integrity: sha512-uDjmnPyp1q4Sgzf3w+J/Fc6UqcCEj0x4Wjp7OqK5dGhNeDgpyrAmnS6ey8QWrX3SWDon2DMKf9sBa5X9+CVyMA==} + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -2899,8 +2929,8 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ip-address@10.2.0: - resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==} + ip-address@10.5.0: + resolution: {integrity: sha512-R5SnVLJmgYYvf2F2ZgwSBnelz5G4q5AxIC277GDfUaNbrZKNANcBC7RHqYYePlszf4kBolVkJauG0ZjHHFh55g==} engines: {node: '>= 12'} ipaddr.js@1.9.1: @@ -3016,8 +3046,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.3.0: - resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} + js-yaml@4.3.2: + resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==} hasBin: true jsbi@4.3.2: @@ -3254,8 +3284,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.16: - resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} + nanoid@3.3.18: + resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -3271,27 +3301,39 @@ packages: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} - nf3@0.1.12: - resolution: {integrity: sha512-qbMXT7RTGh74MYWPeqTIED8nDW70NXOULVHpdWcdZ7IVHVnAsMV9fNugSNnvooipDc1FMOzpis7T9nXJEbJhvQ==} + nf3@0.3.24: + resolution: {integrity: sha512-HxLK4bo+5jNsEETZp4w3tJblHOA9MCBY14IN9nZJJV8JDxt9yNIYxuBuLMjTAR5GFa3HL61+8VQDUrXv3/C8fw==} - nitro-nightly@4.0.0-20251010-091516-7cafddba: - resolution: {integrity: sha512-biADkmoR/Nb9OmUURTfDI2BpGo2IMEt2RbsiMhjqdwz2w3tEm+tx0Hd28LXjBCwid+l8jpqyfmpwc8jzwdng3w==} + nitro@3.0.260610-beta: + resolution: {integrity: sha512-KPb4L5yaF/Rx/xoGMpgHRJvZhbhGiqbRKOwwPLCH9jKTKTsEUHLjnJas85AeCzaswqa8Wi52eQBtRsODC4PS0Q==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - rolldown: '*' - vite: ^7 + '@vercel/queue': ^0.3.0 + dotenv: '*' + giget: '*' + jiti: ^2.7.0 + rollup: ^4.61.1 + vite: ^7 || ^8 xml2js: ^0.6.2 + zephyr-agent: ^0.2.0 peerDependenciesMeta: - rolldown: + '@vercel/queue': + optional: true + dotenv: + optional: true + giget: + optional: true + jiti: + optional: true + rollup: optional: true vite: optional: true xml2js: optional: true - - node-fetch-native@1.6.7: - resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + zephyr-agent: + optional: true node-releases@2.0.51: resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} @@ -3321,8 +3363,11 @@ packages: resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} engines: {node: '>=12.20.0'} - ofetch@1.5.1: - resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + ocache@0.1.5: + resolution: {integrity: sha512-kNNnkkVQup/QDvmTz8Q84wc2ntiyoVHDxa6eHWKt5qdGAmFRBIxy83rxgCYEjW0x06UJ9E3P6VgM2yY4rOBH4w==} + + ofetch@2.0.0-alpha.3: + resolution: {integrity: sha512-zpYTCs2byOuft65vI3z43Dd6iSdFbOZZLb9/d21aCpx2rGastVU9dOCv0lu4ykc1Ur1anAYjDi3SUvR0vq50JA==} ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} @@ -3487,8 +3532,8 @@ packages: resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==} engines: {node: '>=4'} - postcss@8.5.19: - resolution: {integrity: sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==} + postcss@8.5.26: + resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} engines: {node: ^10 || ^12 || >=14} postgres-array@2.0.0: @@ -3575,10 +3620,6 @@ packages: resolution: {integrity: sha512-dEWRjcINDu/F4l2dYx57ugBtD7HV9KXESyxhzw/MqWLeglJrsjJKqACPyUPg+6AF8mIgm+Zi0dZ3ACoIg+QtpA==} engines: {node: '>= 4'} - rendu@0.0.6: - resolution: {integrity: sha512-nZ512Dw0MxKiIYfCVv8DPe6ig4m0Qt3FOYBJEXrammjIYBBPuHaudc0AGfYx+iyOw2q0itAtPywiVZXtTFCsig==} - hasBin: true - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -3615,9 +3656,6 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rou3@0.7.12: - resolution: {integrity: sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==} - rou3@0.8.1: resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==} @@ -3661,10 +3699,20 @@ packages: peerDependencies: seroval: ^1.0 + seroval-plugins@1.6.2: + resolution: {integrity: sha512-TfxuUjlbBESzUOWdTkTKqvSmav0ABym+itetDXLK6mDz8SmrpdI30aF8RTXE8Bvq+tH/1yIDkvy3W0lfQb1ipQ==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + seroval@1.5.5: resolution: {integrity: sha512-bSjOuPcwPKLSJNhr9+bZxA20nQxVle5J5MNsYRVE6cIg7KpRLXGupymePavu0jrxlPiPsr4xGZSB8yUY2sH2sw==} engines: {node: '>=10'} + seroval@1.6.2: + resolution: {integrity: sha512-mPT+SD2TrlB6wvte1KkYOYUkubaTbd6pZ/6Kk3C9nxzrHmCZyhxOO7XGAeL7f+yLKZglzGtM9odUVvg/EhO+vQ==} + engines: {node: '>=10'} + serve-static@2.2.1: resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} @@ -3742,11 +3790,6 @@ packages: engines: {node: '>=20.16.0'} hasBin: true - srvx@0.8.16: - resolution: {integrity: sha512-hmcGW4CgroeSmzgF1Ihwgl+Ths0JqAJ7HwjP2X7e3JzY7u4IydLMcdnlqGQiQGUswz+PO9oh/KtCpOISIvs9QQ==} - engines: {node: '>=20.16.0'} - hasBin: true - stable-hash-x@0.2.0: resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} engines: {node: '>=12.0.0'} @@ -3920,12 +3963,12 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici@7.28.0: - resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==} + undici@7.29.0: + resolution: {integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==} engines: {node: '>=20.18.1'} - unenv@2.0.0-rc.21: - resolution: {integrity: sha512-Wj7/AMtE9MRnAXa6Su3Lk0LNCfqDYgfwVjwRFVum9U7wsto1imuHqk4kTm7Jni+5A0Hn7dttL6O/zjvUvoo+8A==} + unenv@2.0.0-rc.24: + resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} @@ -3975,32 +4018,32 @@ packages: unrs-resolver@1.12.2: resolution: {integrity: sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==} - unstorage@2.0.0-alpha.3: - resolution: {integrity: sha512-BeoqISVh8jxqnPseHH7/92twe2VkQztrudXg8RFZVbXb4ckkFdpLk1LnNvsUndDltyodBMVxgI6V7JcbJYt2VQ==} + unstorage@2.0.0-alpha.7: + resolution: {integrity: sha512-ELPztchk2zgFJnakyodVY3vJWGW9jy//keJ32IOJVGUMyaPydwcA1FtVvWqT0TNRch9H+cMNEGllfVFfScImog==} peerDependencies: - '@azure/app-configuration': ^1.8.0 - '@azure/cosmos': ^4.2.0 - '@azure/data-tables': ^13.3.0 - '@azure/identity': ^4.6.0 - '@azure/keyvault-secrets': ^4.9.0 - '@azure/storage-blob': ^12.26.0 - '@capacitor/preferences': ^6.0.3 || ^7.0.0 - '@deno/kv': '>=0.9.0' + '@azure/app-configuration': ^1.11.0 + '@azure/cosmos': ^4.9.1 + '@azure/data-tables': ^13.3.2 + '@azure/identity': ^4.13.0 + '@azure/keyvault-secrets': ^4.10.0 + '@azure/storage-blob': ^12.31.0 + '@capacitor/preferences': ^6 || ^7 || ^8 + '@deno/kv': '>=0.13.0' '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 '@planetscale/database': ^1.19.0 - '@upstash/redis': ^1.34.3 - '@vercel/blob': '>=0.27.1' + '@upstash/redis': ^1.36.2 + '@vercel/blob': '>=0.27.3' '@vercel/functions': ^2.2.12 || ^3.0.0 '@vercel/kv': ^1.0.1 aws4fetch: ^1.0.20 - chokidar: ^4.0.3 - db0: '>=0.2.1' - idb-keyval: ^6.2.1 - ioredis: ^5.4.2 - lru-cache: ^11.2.2 - mongodb: ^6.20.0 - ofetch: ^1.4.1 - uploadthing: ^7.4.4 + chokidar: ^4 || ^5 + db0: '>=0.3.4' + idb-keyval: ^6.2.2 + ioredis: ^5.9.3 + lru-cache: ^11.2.6 + mongodb: ^6 || ^7 + ofetch: '*' + uploadthing: ^7.7.4 peerDependenciesMeta: '@azure/app-configuration': optional: true @@ -4324,20 +4367,20 @@ snapshots: '@babel/compat-data@7.29.7': {} - '@babel/core@7.29.7': + '@babel/core@7.29.7(supports-color@7.2.0)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) '@babel/helpers': 7.29.7 '@babel/parser': 7.29.7 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@7.2.0) '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -4364,41 +4407,41 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)': + '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@7.2.0) '@babel/helper-optimise-call-expression': 7.29.7 - '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.7(supports-color@7.2.0) semver: 6.3.1 transitivePeerDependencies: - supports-color '@babel/helper-globals@7.29.7': {} - '@babel/helper-member-expression-to-functions@7.29.7': + '@babel/helper-member-expression-to-functions@7.29.7(supports-color@7.2.0)': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@7.2.0) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.29.7': + '@babel/helper-module-imports@7.29.7(supports-color@7.2.0)': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@7.2.0) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -4408,18 +4451,18 @@ snapshots: '@babel/helper-plugin-utils@7.29.7': {} - '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7)': + '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@7.2.0) '@babel/helper-optimise-call-expression': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.29.7': + '@babel/helper-skip-transparent-expression-wrappers@7.29.7(supports-color@7.2.0)': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@7.2.0) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -4439,43 +4482,43 @@ snapshots: dependencies: '@babel/types': 7.29.7 - '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.29.7(@babel/core@7.29.7)': + '@babel/preset-typescript@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) '@babel/helper-plugin-utils': 7.29.7 '@babel/helper-validator-option': 7.29.7 - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -4487,7 +4530,7 @@ snapshots: '@babel/parser': 7.29.7 '@babel/types': 7.29.7 - '@babel/traverse@7.29.7': + '@babel/traverse@7.29.7(supports-color@7.2.0)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 @@ -4495,7 +4538,7 @@ snapshots: '@babel/parser': 7.29.7 '@babel/template': 7.29.7 '@babel/types': 7.29.7 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -4570,7 +4613,7 @@ snapshots: open: 8.4.2 picomatch: 4.0.5 systeminformation: 5.31.17 - undici: 7.28.0 + undici: 7.29.0 which: 4.0.0 yocto-spinner: 1.2.1 @@ -4766,17 +4809,17 @@ snapshots: '@esbuild/win32-x64@0.28.1': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.5(jiti@2.7.0))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))': dependencies: - eslint: 9.39.5(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.21.2': + '@eslint/config-array@0.21.2(supports-color@7.2.0)': dependencies: '@eslint/object-schema': 2.1.7 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) minimatch: 3.1.5 transitivePeerDependencies: - supports-color @@ -4789,23 +4832,23 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.6': + '@eslint/eslintrc@3.3.6(supports-color@7.2.0)': dependencies: ajv: 6.15.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.3.0 + js-yaml: 4.3.2 minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@10.0.1(eslint@9.39.5(jiti@2.7.0))': + '@eslint/js@10.0.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))': optionalDependencies: - eslint: 9.39.5(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) '@eslint/js@9.39.5': {} @@ -4837,9 +4880,9 @@ snapshots: '@fontsource-variable/geist@5.2.9': {} - '@hono/node-server@1.19.14(hono@4.12.30)': + '@hono/node-server@1.19.17(hono@4.13.5)': dependencies: - hono: 4.12.30 + hono: 4.13.5 '@humanfs/core@0.19.2': dependencies: @@ -4880,9 +4923,9 @@ snapshots: dependencies: jsbi: 4.3.2 - '@modelcontextprotocol/sdk@1.29.0(zod@3.25.76)': + '@modelcontextprotocol/sdk@1.29.0(supports-color@7.2.0)(zod@3.25.76)': dependencies: - '@hono/node-server': 1.19.14(hono@4.12.30) + '@hono/node-server': 1.19.17(hono@4.13.5) ajv: 8.20.0 ajv-formats: 3.0.1(ajv@8.20.0) content-type: 1.0.5 @@ -4890,9 +4933,9 @@ snapshots: cross-spawn: 7.0.6 eventsource: 3.0.7 eventsource-parser: 3.1.0 - express: 5.2.1 - express-rate-limit: 8.5.2(express@5.2.1) - hono: 4.12.30 + express: 5.2.1(supports-color@7.2.0) + express-rate-limit: 8.5.2(express@5.2.1(supports-color@7.2.0)) + hono: 4.13.5 jose: 6.2.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -4916,6 +4959,13 @@ snapshots: '@tybys/wasm-util': 0.10.3 optional: true + '@neodrag/core@3.0.0-next.11': {} + + '@neodrag/solid@3.0.0-next.11(@neodrag/core@3.0.0-next.11)(solid-js@1.9.14)': + dependencies: + '@neodrag/core': 3.0.0-next.11 + solid-js: 1.9.14 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -5180,11 +5230,11 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@stylistic/eslint-plugin@5.10.0(eslint@9.39.5(jiti@2.7.0))': + '@stylistic/eslint-plugin@5.10.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) '@typescript-eslint/types': 8.64.0 - eslint: 9.39.5(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -5263,11 +5313,26 @@ snapshots: tailwindcss: 4.3.2 vite: 8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1) + '@tanstack/devtools-bundler-core@0.1.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@tanstack/devtools-client': 0.0.8 + '@tanstack/devtools-event-bus': 0.4.3 + chalk: 5.6.2 + launch-editor: 2.14.1 + magic-string: 0.30.21 + oxc-parser: 0.120.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + picomatch: 4.0.5 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + - bufferutil + - utf-8-validate + '@tanstack/devtools-client@0.0.8': dependencies: '@tanstack/devtools-event-client': 0.5.0 - '@tanstack/devtools-event-bus@0.4.2': + '@tanstack/devtools-event-bus@0.4.3': dependencies: ws: 8.21.0 transitivePeerDependencies: @@ -5276,7 +5341,7 @@ snapshots: '@tanstack/devtools-event-client@0.5.0': {} - '@tanstack/devtools-ui@0.6.0(csstype@3.2.3)(solid-js@1.9.14)': + '@tanstack/devtools-ui@0.7.1(csstype@3.2.3)(solid-js@1.9.14)': dependencies: clsx: 2.1.1 dayjs: 1.11.21 @@ -5285,15 +5350,12 @@ snapshots: transitivePeerDependencies: - csstype - '@tanstack/devtools-vite@0.8.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1))': + '@tanstack/devtools-vite@0.8.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1))': dependencies: + '@tanstack/devtools-bundler-core': 0.1.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) '@tanstack/devtools-client': 0.0.8 - '@tanstack/devtools-event-bus': 0.4.2 + '@tanstack/devtools-event-bus': 0.4.3 chalk: 5.6.2 - launch-editor: 2.14.1 - magic-string: 0.30.21 - oxc-parser: 0.120.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) - picomatch: 4.0.5 vite: 8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1) transitivePeerDependencies: - '@emnapi/core' @@ -5301,14 +5363,16 @@ snapshots: - bufferutil - utf-8-validate - '@tanstack/devtools@0.12.5(csstype@3.2.3)(solid-js@1.9.14)': + '@tanstack/devtools@0.14.2(csstype@3.2.3)(solid-js@1.9.14)': dependencies: + '@neodrag/core': 3.0.0-next.11 + '@neodrag/solid': 3.0.0-next.11(@neodrag/core@3.0.0-next.11)(solid-js@1.9.14) '@solid-primitives/event-listener': 2.4.6(solid-js@1.9.14) '@solid-primitives/keyboard': 1.3.7(solid-js@1.9.14) '@solid-primitives/resize-observer': 2.2.0(solid-js@1.9.14) '@tanstack/devtools-client': 0.0.8 - '@tanstack/devtools-event-bus': 0.4.2 - '@tanstack/devtools-ui': 0.6.0(csstype@3.2.3)(solid-js@1.9.14) + '@tanstack/devtools-event-bus': 0.4.3 + '@tanstack/devtools-ui': 0.7.1(csstype@3.2.3)(solid-js@1.9.14) clsx: 2.1.1 goober: 2.1.19(csstype@3.2.3) solid-js: 1.9.14 @@ -5317,31 +5381,31 @@ snapshots: - csstype - utf-8-validate - '@tanstack/eslint-config@0.4.0(@typescript-eslint/utils@8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3)': + '@tanstack/eslint-config@0.4.0(@typescript-eslint/utils@8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: - '@eslint/js': 10.0.1(eslint@9.39.5(jiti@2.7.0)) - '@stylistic/eslint-plugin': 5.10.0(eslint@9.39.5(jiti@2.7.0)) - eslint: 9.39.5(jiti@2.7.0) - eslint-plugin-import-x: 4.17.1(@typescript-eslint/utils@8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0)) - eslint-plugin-n: 17.24.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + '@eslint/js': 10.0.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + '@stylistic/eslint-plugin': 5.10.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + eslint-plugin-import-x: 4.17.1(@typescript-eslint/utils@8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) + eslint-plugin-n: 17.24.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(typescript@6.0.3) globals: 17.7.0 - typescript-eslint: 8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) - vue-eslint-parser: 10.4.1(eslint@9.39.5(jiti@2.7.0)) + typescript-eslint: 8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + vue-eslint-parser: 10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0) transitivePeerDependencies: - '@typescript-eslint/utils' - eslint-import-resolver-node - supports-color - typescript - '@tanstack/history@1.162.0': {} + '@tanstack/history@1.162.1': {} - '@tanstack/query-core@5.101.2': {} + '@tanstack/query-core@5.102.1': {} - '@tanstack/query-devtools@5.101.2': {} + '@tanstack/query-devtools@5.102.1': {} - '@tanstack/react-devtools@0.10.8(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(csstype@3.2.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(solid-js@1.9.14)': + '@tanstack/react-devtools@0.10.12(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(csstype@3.2.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(solid-js@1.9.14)': dependencies: - '@tanstack/devtools': 0.12.5(csstype@3.2.3)(solid-js@1.9.14) + '@tanstack/devtools': 0.14.2(csstype@3.2.3)(solid-js@1.9.14) '@types/react': 19.2.17 '@types/react-dom': 19.2.3(@types/react@19.2.17) react: 19.2.7 @@ -5352,66 +5416,65 @@ snapshots: - solid-js - utf-8-validate - '@tanstack/react-query-devtools@5.101.2(@tanstack/react-query@5.101.2(react@19.2.7))(react@19.2.7)': + '@tanstack/react-query-devtools@5.102.1(@tanstack/react-query@5.102.1(react@19.2.7))(react@19.2.7)': dependencies: - '@tanstack/query-devtools': 5.101.2 - '@tanstack/react-query': 5.101.2(react@19.2.7) + '@tanstack/query-devtools': 5.102.1 + '@tanstack/react-query': 5.102.1(react@19.2.7) react: 19.2.7 - '@tanstack/react-query@5.101.2(react@19.2.7)': + '@tanstack/react-query@5.102.1(react@19.2.7)': dependencies: - '@tanstack/query-core': 5.101.2 + '@tanstack/query-core': 5.102.1 react: 19.2.7 - '@tanstack/react-router-devtools@1.167.0(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@tanstack/router-core@1.171.15)(csstype@3.2.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@tanstack/react-router-devtools@1.167.1(@tanstack/react-router@1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@tanstack/router-core@1.171.27)(csstype@3.2.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@tanstack/react-router': 1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@tanstack/router-devtools-core': 1.168.0(@tanstack/router-core@1.171.15)(csstype@3.2.3) + '@tanstack/react-router': 1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@tanstack/router-devtools-core': 1.168.1(@tanstack/router-core@1.171.27)(csstype@3.2.3) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) optionalDependencies: - '@tanstack/router-core': 1.171.15 + '@tanstack/router-core': 1.171.27 transitivePeerDependencies: - csstype - '@tanstack/react-router-ssr-query@1.167.1(@tanstack/query-core@5.101.2)(@tanstack/react-query@5.101.2(react@19.2.7))(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@tanstack/router-core@1.171.15)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@tanstack/react-router-ssr-query@1.167.1(@tanstack/query-core@5.102.1)(@tanstack/react-query@5.102.1(react@19.2.7))(@tanstack/react-router@1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@tanstack/router-core@1.171.27)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@tanstack/query-core': 5.101.2 - '@tanstack/react-query': 5.101.2(react@19.2.7) - '@tanstack/react-router': 1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@tanstack/router-ssr-query-core': 1.169.1(@tanstack/query-core@5.101.2)(@tanstack/router-core@1.171.15) + '@tanstack/query-core': 5.102.1 + '@tanstack/react-query': 5.102.1(react@19.2.7) + '@tanstack/react-router': 1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@tanstack/router-ssr-query-core': 1.169.1(@tanstack/query-core@5.102.1)(@tanstack/router-core@1.171.27) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) transitivePeerDependencies: - '@tanstack/router-core' - '@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@tanstack/react-router@1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@tanstack/history': 1.162.0 + '@tanstack/history': 1.162.1 '@tanstack/react-store': 0.9.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@tanstack/router-core': 1.171.15 + '@tanstack/router-core': 1.171.27 isbot: 5.2.1 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - '@tanstack/react-start-client@1.168.16(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@tanstack/react-start-client@1.168.30(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@tanstack/react-router': 1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@tanstack/router-core': 1.171.15 - '@tanstack/start-client-core': 1.170.14 + '@tanstack/react-router': 1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@tanstack/router-core': 1.171.27 + '@tanstack/start-client-core': 1.170.27 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - '@tanstack/react-start-rsc@0.1.27(crossws@0.4.10(srvx@0.8.16))(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rolldown@1.1.5)(rollup@4.62.2)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1))': + '@tanstack/react-start-rsc@0.1.48(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rolldown@1.1.5)(rollup@4.62.2)(supports-color@7.2.0)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1))': dependencies: - '@tanstack/react-router': 1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@tanstack/router-core': 1.171.15 - '@tanstack/router-utils': 1.162.2 - '@tanstack/start-client-core': 1.170.14 + '@tanstack/react-router': 1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@tanstack/router-core': 1.171.27 + '@tanstack/router-utils': 1.162.2(supports-color@7.2.0) + '@tanstack/start-client-core': 1.170.27 '@tanstack/start-fn-stubs': 1.162.0 - '@tanstack/start-plugin-core': 1.171.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(crossws@0.4.10(srvx@0.8.16))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.62.2)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) - '@tanstack/start-server-core': 1.169.17(crossws@0.4.10(srvx@0.8.16)) - '@tanstack/start-storage-context': 1.167.17 + '@tanstack/start-plugin-core': 1.171.39(@tanstack/react-router@1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.62.2)(supports-color@7.2.0)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) + '@tanstack/start-storage-context': 1.167.29 pathe: 2.0.3 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) @@ -5429,26 +5492,26 @@ snapshots: - vite-plugin-solid - webpack - '@tanstack/react-start-server@1.167.22(crossws@0.4.10(srvx@0.8.16))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@tanstack/react-start-server@1.167.37(crossws@0.4.10(srvx@0.11.22))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@tanstack/react-router': 1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@tanstack/router-core': 1.171.15 - '@tanstack/start-server-core': 1.169.17(crossws@0.4.10(srvx@0.8.16)) + '@tanstack/react-router': 1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@tanstack/router-core': 1.171.27 + '@tanstack/start-server-core': 1.169.31(crossws@0.4.10(srvx@0.11.22)) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) transitivePeerDependencies: - crossws - '@tanstack/react-start@1.168.28(crossws@0.4.10(srvx@0.8.16))(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rolldown@1.1.5)(rollup@4.62.2)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1))': + '@tanstack/react-start@1.168.49(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rolldown@1.1.5)(rollup@4.62.2)(supports-color@7.2.0)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1))': dependencies: - '@tanstack/react-router': 1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@tanstack/react-start-client': 1.168.16(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@tanstack/react-start-rsc': 0.1.27(crossws@0.4.10(srvx@0.8.16))(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rolldown@1.1.5)(rollup@4.62.2)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) - '@tanstack/react-start-server': 1.167.22(crossws@0.4.10(srvx@0.8.16))(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@tanstack/router-utils': 1.162.2 - '@tanstack/start-client-core': 1.170.14 - '@tanstack/start-plugin-core': 1.171.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(crossws@0.4.10(srvx@0.8.16))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.62.2)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) - '@tanstack/start-server-core': 1.169.17(crossws@0.4.10(srvx@0.8.16)) + '@tanstack/react-router': 1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@tanstack/react-start-client': 1.168.30(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@tanstack/react-start-rsc': 0.1.48(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rolldown@1.1.5)(rollup@4.62.2)(supports-color@7.2.0)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) + '@tanstack/react-start-server': 1.167.37(crossws@0.4.10(srvx@0.11.22))(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@tanstack/router-utils': 1.162.2(supports-color@7.2.0) + '@tanstack/start-client-core': 1.170.27 + '@tanstack/start-plugin-core': 1.171.39(@tanstack/react-router@1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.62.2)(supports-color@7.2.0)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) + '@tanstack/start-server-core': 1.169.31(crossws@0.4.10(srvx@0.11.22)) pathe: 2.0.3 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) @@ -5475,34 +5538,34 @@ snapshots: react-dom: 19.2.7(react@19.2.7) use-sync-external-store: 1.6.0(react@19.2.7) - '@tanstack/router-cli@1.167.19': + '@tanstack/router-cli@1.167.33(supports-color@7.2.0)': dependencies: - '@tanstack/router-generator': 1.167.19 + '@tanstack/router-generator': 1.167.33(supports-color@7.2.0) chokidar: 5.0.0 yargs: 17.7.3 transitivePeerDependencies: - supports-color - '@tanstack/router-core@1.171.15': + '@tanstack/router-core@1.171.27': dependencies: - '@tanstack/history': 1.162.0 + '@tanstack/history': 1.162.1 cookie-es: 3.1.1 - seroval: 1.5.5 - seroval-plugins: 1.5.5(seroval@1.5.5) + seroval: 1.6.2 + seroval-plugins: 1.6.2(seroval@1.6.2) - '@tanstack/router-devtools-core@1.168.0(@tanstack/router-core@1.171.15)(csstype@3.2.3)': + '@tanstack/router-devtools-core@1.168.1(@tanstack/router-core@1.171.27)(csstype@3.2.3)': dependencies: - '@tanstack/router-core': 1.171.15 + '@tanstack/router-core': 1.171.27 clsx: 2.1.1 goober: 2.1.19(csstype@3.2.3) optionalDependencies: csstype: 3.2.3 - '@tanstack/router-generator@1.167.19': + '@tanstack/router-generator@1.167.33(supports-color@7.2.0)': dependencies: '@babel/types': 7.29.7 - '@tanstack/router-core': 1.171.15 - '@tanstack/router-utils': 1.162.2 + '@tanstack/router-core': 1.171.27 + '@tanstack/router-utils': 1.162.2(supports-color@7.2.0) '@tanstack/virtual-file-routes': 1.162.0 jiti: 2.7.0 magic-string: 0.30.21 @@ -5511,19 +5574,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.168.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.62.2)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1))': + '@tanstack/router-plugin@1.168.35(@tanstack/react-router@1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.62.2)(supports-color@7.2.0)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1))': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) '@babel/template': 7.29.7 '@babel/types': 7.29.7 - '@tanstack/router-core': 1.171.15 - '@tanstack/router-generator': 1.167.19 - '@tanstack/router-utils': 1.162.2 + '@tanstack/router-core': 1.171.27 + '@tanstack/router-generator': 1.167.33(supports-color@7.2.0) + '@tanstack/router-utils': 1.162.2(supports-color@7.2.0) chokidar: 5.0.0 unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.62.2)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) zod: 4.4.3 optionalDependencies: - '@tanstack/react-router': 1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@tanstack/react-router': 1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7) vite: 8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1) transitivePeerDependencies: - '@farmfe/core' @@ -5535,48 +5598,48 @@ snapshots: - supports-color - unloader - '@tanstack/router-ssr-query-core@1.169.1(@tanstack/query-core@5.101.2)(@tanstack/router-core@1.171.15)': + '@tanstack/router-ssr-query-core@1.169.1(@tanstack/query-core@5.102.1)(@tanstack/router-core@1.171.27)': dependencies: - '@tanstack/query-core': 5.101.2 - '@tanstack/router-core': 1.171.15 + '@tanstack/query-core': 5.102.1 + '@tanstack/router-core': 1.171.27 - '@tanstack/router-utils@1.162.2': + '@tanstack/router-utils@1.162.2(supports-color@7.2.0)': dependencies: '@babel/generator': 7.29.7 '@babel/parser': 7.29.7 '@babel/types': 7.29.7 ansis: 4.3.1 - babel-dead-code-elimination: 1.0.12 + babel-dead-code-elimination: 1.0.12(supports-color@7.2.0) diff: 8.0.4 pathe: 2.0.3 tinyglobby: 0.2.17 transitivePeerDependencies: - supports-color - '@tanstack/start-client-core@1.170.14': + '@tanstack/start-client-core@1.170.27': dependencies: - '@tanstack/router-core': 1.171.15 + '@tanstack/router-core': 1.171.27 '@tanstack/start-fn-stubs': 1.162.0 - '@tanstack/start-storage-context': 1.167.17 - seroval: 1.5.5 + '@tanstack/start-storage-context': 1.167.29 + seroval: 1.6.2 '@tanstack/start-fn-stubs@1.162.0': {} - '@tanstack/start-plugin-core@1.171.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(crossws@0.4.10(srvx@0.8.16))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.62.2)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1))': + '@tanstack/start-plugin-core@1.171.39(@tanstack/react-router@1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(crossws@0.4.10(srvx@0.11.22))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.62.2)(supports-color@7.2.0)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1))': dependencies: '@babel/code-frame': 7.27.1 - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) '@babel/types': 7.29.7 - '@tanstack/router-core': 1.171.15 - '@tanstack/router-generator': 1.167.19 - '@tanstack/router-plugin': 1.168.20(@tanstack/react-router@1.170.18(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.62.2)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) - '@tanstack/router-utils': 1.162.2 - '@tanstack/start-server-core': 1.169.17(crossws@0.4.10(srvx@0.8.16)) + '@tanstack/router-core': 1.171.27 + '@tanstack/router-generator': 1.167.33(supports-color@7.2.0) + '@tanstack/router-plugin': 1.168.35(@tanstack/react-router@1.170.32(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.62.2)(supports-color@7.2.0)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) + '@tanstack/router-utils': 1.162.2(supports-color@7.2.0) + '@tanstack/start-server-core': 1.169.31(crossws@0.4.10(srvx@0.11.22)) exsolve: 1.1.0 lightningcss: 1.32.0 pathe: 2.0.3 picomatch: 4.0.5 - seroval: 1.5.5 + seroval: 1.6.2 source-map: 0.7.6 srvx: 0.11.22 tinyglobby: 0.2.17 @@ -5600,21 +5663,21 @@ snapshots: - vite-plugin-solid - webpack - '@tanstack/start-server-core@1.169.17(crossws@0.4.10(srvx@0.8.16))': + '@tanstack/start-server-core@1.169.31(crossws@0.4.10(srvx@0.11.22))': dependencies: - '@tanstack/history': 1.162.0 - '@tanstack/router-core': 1.171.15 - '@tanstack/start-client-core': 1.170.14 - '@tanstack/start-storage-context': 1.167.17 + '@tanstack/history': 1.162.1 + '@tanstack/router-core': 1.171.27 + '@tanstack/start-client-core': 1.170.27 + '@tanstack/start-storage-context': 1.167.29 fetchdts: 0.1.7 - h3-v2: h3@2.0.1-rc.20(crossws@0.4.10(srvx@0.8.16)) - seroval: 1.5.5 + h3-v2: h3@2.0.1-rc.20(crossws@0.4.10(srvx@0.11.22)) + seroval: 1.6.2 transitivePeerDependencies: - crossws - '@tanstack/start-storage-context@1.167.17': + '@tanstack/start-storage-context@1.167.29': dependencies: - '@tanstack/router-core': 1.171.15 + '@tanstack/router-core': 1.171.27 '@tanstack/store@0.9.3': {} @@ -5687,15 +5750,15 @@ snapshots: '@types/validate-npm-package-name@4.0.2': {} - '@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.64.0 - '@typescript-eslint/type-utils': 8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/utils': 8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/type-utils': 8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/utils': 8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.64.0 - eslint: 9.39.5(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) ignore: 7.0.6 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -5703,23 +5766,23 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/parser@8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.64.0 '@typescript-eslint/types': 8.64.0 - '@typescript-eslint/typescript-estree': 8.64.0(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@7.2.0)(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.64.0 - debug: 4.4.3 - eslint: 9.39.5(jiti@2.7.0) + debug: 4.4.3(supports-color@7.2.0) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.64.0(typescript@6.0.3)': + '@typescript-eslint/project-service@8.64.0(supports-color@7.2.0)(typescript@6.0.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@6.0.3) '@typescript-eslint/types': 8.64.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -5733,13 +5796,13 @@ snapshots: dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.64.0 - '@typescript-eslint/typescript-estree': 8.64.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) - debug: 4.4.3 - eslint: 9.39.5(jiti@2.7.0) + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/utils': 8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + debug: 4.4.3(supports-color@7.2.0) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: @@ -5747,13 +5810,13 @@ snapshots: '@typescript-eslint/types@8.64.0': {} - '@typescript-eslint/typescript-estree@8.64.0(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.64.0(supports-color@7.2.0)(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.64.0(typescript@6.0.3) + '@typescript-eslint/project-service': 8.64.0(supports-color@7.2.0)(typescript@6.0.3) '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@6.0.3) '@typescript-eslint/types': 8.64.0 '@typescript-eslint/visitor-keys': 8.64.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) minimatch: 10.2.5 semver: 7.8.5 tinyglobby: 0.2.17 @@ -5762,13 +5825,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/utils@8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) '@typescript-eslint/scope-manager': 8.64.0 '@typescript-eslint/types': 8.64.0 - '@typescript-eslint/typescript-estree': 8.64.0(typescript@6.0.3) - eslint: 9.39.5(jiti@2.7.0) + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@7.2.0)(typescript@6.0.3) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -5925,7 +5988,7 @@ snapshots: ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.3 + fast-uri: 3.1.6 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -5957,11 +6020,11 @@ snapshots: atomically@1.7.0: {} - babel-dead-code-elimination@1.0.12: + babel-dead-code-elimination@1.0.12(supports-color@7.2.0): dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) '@babel/parser': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@7.2.0) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -5976,11 +6039,11 @@ snapshots: dependencies: require-from-string: 2.0.2 - body-parser@2.3.0: + body-parser@2.3.0(supports-color@7.2.0): dependencies: bytes: 3.1.2 content-type: 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) http-errors: 2.0.1 iconv-lite: 0.7.3 on-finished: 2.4.1 @@ -5990,12 +6053,12 @@ snapshots: transitivePeerDependencies: - supports-color - brace-expansion@1.1.16: + brace-expansion@1.1.18: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@5.0.7: + brace-expansion@5.0.9: dependencies: balanced-match: 4.0.4 @@ -6101,8 +6164,6 @@ snapshots: convert-source-map@2.0.0: {} - cookie-es@2.0.1: {} - cookie-es@3.1.1: {} cookie-signature@1.2.2: {} @@ -6118,7 +6179,7 @@ snapshots: dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 - js-yaml: 4.3.0 + js-yaml: 4.3.2 parse-json: 5.2.0 optionalDependencies: typescript: 6.0.3 @@ -6129,9 +6190,9 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - crossws@0.4.10(srvx@0.8.16): + crossws@0.4.10(srvx@0.11.22): optionalDependencies: - srvx: 0.8.16 + srvx: 0.11.22 css-tree@3.2.1: dependencies: @@ -6166,9 +6227,11 @@ snapshots: dependencies: mimic-fn: 3.1.0 - debug@4.4.3: + debug@4.4.3(supports-color@7.2.0): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 7.2.0 decimal.js@10.6.0: {} @@ -6189,14 +6252,10 @@ snapshots: define-lazy-prop@3.0.0: {} - defu@6.1.7: {} - depd@2.0.0: {} dequal@2.0.3: {} - destr@2.0.5: {} - detect-libc@2.1.2: {} diff@8.0.4: {} @@ -6258,6 +6317,13 @@ snapshots: env-paths@2.2.1: {} + env-runner@0.1.16: + dependencies: + crossws: 0.4.10(srvx@0.11.22) + exsolve: 1.1.0 + httpxy: 0.5.5 + srvx: 0.11.22 + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -6336,9 +6402,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.39.5(jiti@2.7.0)): + eslint-compat-utils@0.5.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)): dependencies: - eslint: 9.39.5(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) semver: 7.8.5 eslint-import-context@0.1.9(unrs-resolver@1.12.2): @@ -6348,19 +6414,19 @@ snapshots: optionalDependencies: unrs-resolver: 1.12.2 - eslint-plugin-es-x@7.8.0(eslint@9.39.5(jiti@2.7.0)): + eslint-plugin-es-x@7.8.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) '@eslint-community/regexpp': 4.12.2 - eslint: 9.39.5(jiti@2.7.0) - eslint-compat-utils: 0.5.1(eslint@9.39.5(jiti@2.7.0)) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + eslint-compat-utils: 0.5.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) - eslint-plugin-import-x@4.17.1(@typescript-eslint/utils@8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0)): + eslint-plugin-import-x@4.17.1(@typescript-eslint/utils@8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0): dependencies: '@typescript-eslint/types': 8.64.0 comment-parser: 1.4.7 - debug: 4.4.3 - eslint: 9.39.5(jiti@2.7.0) + debug: 4.4.3(supports-color@7.2.0) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) eslint-import-context: 0.1.9(unrs-resolver@1.12.2) is-glob: 4.0.3 minimatch: 10.2.5 @@ -6368,16 +6434,16 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.12.2 optionalDependencies: - '@typescript-eslint/utils': 8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) transitivePeerDependencies: - supports-color - eslint-plugin-n@17.24.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3): + eslint-plugin-n@17.24.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(typescript@6.0.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) enhanced-resolve: 5.24.2 - eslint: 9.39.5(jiti@2.7.0) - eslint-plugin-es-x: 7.8.0(eslint@9.39.5(jiti@2.7.0)) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) + eslint-plugin-es-x: 7.8.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) get-tsconfig: 4.14.0 globals: 15.15.0 globrex: 0.1.2 @@ -6405,14 +6471,14 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@9.39.5(jiti@2.7.0): + eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.2 + '@eslint/config-array': 0.21.2(supports-color@7.2.0) '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.6 + '@eslint/eslintrc': 3.3.6(supports-color@7.2.0) '@eslint/js': 9.39.5 '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.8 @@ -6422,7 +6488,7 @@ snapshots: ajv: 6.15.0 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -6513,25 +6579,25 @@ snapshots: expect-type@1.4.0: {} - express-rate-limit@8.5.2(express@5.2.1): + express-rate-limit@8.5.2(express@5.2.1(supports-color@7.2.0)): dependencies: - express: 5.2.1 - ip-address: 10.2.0 + express: 5.2.1(supports-color@7.2.0) + ip-address: 10.5.0 - express@5.2.1: + express@5.2.1(supports-color@7.2.0): dependencies: accepts: 2.0.0 - body-parser: 2.3.0 + body-parser: 2.3.0(supports-color@7.2.0) content-disposition: 1.1.0 content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.2.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 2.1.1 + finalhandler: 2.1.1(supports-color@7.2.0) fresh: 2.0.0 http-errors: 2.0.1 merge-descriptors: 2.0.0 @@ -6542,9 +6608,9 @@ snapshots: proxy-addr: 2.0.7 qs: 6.15.3 range-parser: 1.3.0 - router: 2.2.0 - send: 1.2.1 - serve-static: 2.2.1 + router: 2.2.0(supports-color@7.2.0) + send: 1.2.1(supports-color@7.2.0) + serve-static: 2.2.1(supports-color@7.2.0) statuses: 2.0.2 type-is: 2.1.0 vary: 1.1.2 @@ -6567,7 +6633,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.1.3: {} + fast-uri@3.1.6: {} fastq@1.20.1: dependencies: @@ -6591,9 +6657,9 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@2.1.1: + finalhandler@2.1.1(supports-color@7.2.0): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -6696,21 +6762,19 @@ snapshots: graceful-fs@4.2.11: {} - h3@2.0.1-rc.2(crossws@0.4.10(srvx@0.8.16)): + h3@2.0.1-rc.20(crossws@0.4.10(srvx@0.11.22)): dependencies: - cookie-es: 2.0.1 - fetchdts: 0.1.7 - rou3: 0.7.12 - srvx: 0.8.16 + rou3: 0.8.1 + srvx: 0.11.22 optionalDependencies: - crossws: 0.4.10(srvx@0.8.16) + crossws: 0.4.10(srvx@0.11.22) - h3@2.0.1-rc.20(crossws@0.4.10(srvx@0.8.16)): + h3@2.0.1-rc.22(crossws@0.4.10(srvx@0.11.22)): dependencies: rou3: 0.8.1 srvx: 0.11.22 optionalDependencies: - crossws: 0.4.10(srvx@0.8.16) + crossws: 0.4.10(srvx@0.11.22) has-flag@4.0.0: {} @@ -6720,7 +6784,9 @@ snapshots: dependencies: function-bind: 1.1.2 - hono@4.12.30: {} + hono@4.13.5: {} + + hookable@6.1.1: {} html-encoding-sniffer@6.0.0: dependencies: @@ -6736,20 +6802,22 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 - http-proxy-agent@7.0.2: + http-proxy-agent@7.0.2(supports-color@7.2.0): dependencies: agent-base: 7.1.4 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.6: + https-proxy-agent@7.0.6(supports-color@7.2.0): dependencies: agent-base: 7.1.4 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color + httpxy@0.5.5: {} + human-signals@2.1.0: {} human-signals@8.0.1: {} @@ -6771,7 +6839,7 @@ snapshots: inherits@2.0.4: {} - ip-address@10.2.0: {} + ip-address@10.5.0: {} ipaddr.js@1.9.1: {} @@ -6839,13 +6907,13 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@4.3.0: + js-yaml@4.3.2: dependencies: argparse: 2.0.1 jsbi@4.3.2: {} - jsdom@28.1.0: + jsdom@28.1.0(supports-color@7.2.0): dependencies: '@acemir/cssom': 0.9.31 '@asamuzakjp/dom-selector': 6.8.1 @@ -6855,14 +6923,14 @@ snapshots: data-urls: 7.0.0 decimal.js: 10.6.0 html-encoding-sniffer: 6.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 + http-proxy-agent: 7.0.2(supports-color@7.2.0) + https-proxy-agent: 7.0.6(supports-color@7.2.0) is-potential-custom-element-name: 1.0.1 parse5: 8.0.1 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 6.0.2 - undici: 7.28.0 + undici: 7.29.0 w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 @@ -7028,17 +7096,17 @@ snapshots: minimatch@10.2.5: dependencies: - brace-expansion: 5.0.7 + brace-expansion: 5.0.9 minimatch@3.1.5: dependencies: - brace-expansion: 1.1.16 + brace-expansion: 1.1.18 minimist@1.2.8: {} ms@2.1.3: {} - nanoid@3.3.16: {} + nanoid@3.3.18: {} napi-postinstall@0.3.4: {} @@ -7046,29 +7114,28 @@ snapshots: negotiator@1.0.0: {} - nf3@0.1.12: {} + nf3@0.3.24: {} - nitro-nightly@4.0.0-20251010-091516-7cafddba(drizzle-orm@1.0.0-rc.4(@types/pg@8.20.0)(pg@8.22.0)(zod@3.25.76))(lru-cache@11.5.2)(rolldown@1.1.5)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)): + nitro@3.0.260610-beta(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@1.0.0-rc.4(@types/pg@8.20.0)(pg@8.22.0)(zod@3.25.76))(jiti@2.7.0)(lru-cache@11.5.2)(rollup@4.62.2)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)): dependencies: consola: 3.4.2 - cookie-es: 2.0.1 - crossws: 0.4.10(srvx@0.8.16) + crossws: 0.4.10(srvx@0.11.22) db0: 0.3.4(drizzle-orm@1.0.0-rc.4(@types/pg@8.20.0)(pg@8.22.0)(zod@3.25.76)) - esbuild: 0.25.12 - fetchdts: 0.1.7 - h3: 2.0.1-rc.2(crossws@0.4.10(srvx@0.8.16)) - jiti: 2.7.0 - nf3: 0.1.12 - ofetch: 1.5.1 + env-runner: 0.1.16 + h3: 2.0.1-rc.22(crossws@0.4.10(srvx@0.11.22)) + hookable: 6.1.1 + nf3: 0.3.24 + ocache: 0.1.5 + ofetch: 2.0.0-alpha.3 ohash: 2.0.11 - rendu: 0.0.6 - rollup: 4.62.2 - srvx: 0.8.16 - undici: 7.28.0 - unenv: 2.0.0-rc.21 - unstorage: 2.0.0-alpha.3(db0@0.3.4(drizzle-orm@1.0.0-rc.4(@types/pg@8.20.0)(pg@8.22.0)(zod@3.25.76)))(lru-cache@11.5.2)(ofetch@1.5.1) - optionalDependencies: rolldown: 1.1.5 + srvx: 0.11.22 + unenv: 2.0.0-rc.24 + unstorage: 2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(drizzle-orm@1.0.0-rc.4(@types/pg@8.20.0)(pg@8.22.0)(zod@3.25.76)))(lru-cache@11.5.2)(ofetch@2.0.0-alpha.3) + optionalDependencies: + dotenv: 17.4.2 + jiti: 2.7.0 + rollup: 4.62.2 vite: 8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1) transitivePeerDependencies: - '@azure/app-configuration' @@ -7082,6 +7149,7 @@ snapshots: - '@electric-sql/pglite' - '@libsql/client' - '@netlify/blobs' + - '@netlify/runtime' - '@planetscale/database' - '@upstash/redis' - '@vercel/blob' @@ -7094,12 +7162,12 @@ snapshots: - idb-keyval - ioredis - lru-cache + - miniflare - mongodb - mysql2 - sqlite3 - uploadthing - - node-fetch-native@1.6.7: {} + - wrangler node-releases@2.0.51: {} @@ -7120,11 +7188,11 @@ snapshots: obug@2.1.3: {} - ofetch@1.5.1: + ocache@0.1.5: dependencies: - destr: 2.0.5 - node-fetch-native: 1.6.7 - ufo: 1.6.4 + ohash: 2.0.11 + + ofetch@2.0.0-alpha.3: {} ohash@2.0.11: {} @@ -7316,9 +7384,9 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.19: + postcss@8.5.26: dependencies: - nanoid: 3.3.16 + nanoid: 3.3.18 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -7395,11 +7463,6 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 - rendu@0.0.6: - dependencies: - cookie-es: 2.0.1 - srvx: 0.8.16 - require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -7468,14 +7531,13 @@ snapshots: '@rollup/rollup-win32-x64-gnu': 4.62.2 '@rollup/rollup-win32-x64-msvc': 4.62.2 fsevents: 2.3.3 - - rou3@0.7.12: {} + optional: true rou3@0.8.1: {} - router@2.2.0: + router@2.2.0(supports-color@7.2.0): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 @@ -7501,9 +7563,9 @@ snapshots: semver@7.8.5: {} - send@1.2.1: + send@1.2.1(supports-color@7.2.0): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -7521,27 +7583,33 @@ snapshots: dependencies: seroval: 1.5.5 + seroval-plugins@1.6.2(seroval@1.6.2): + dependencies: + seroval: 1.6.2 + seroval@1.5.5: {} - serve-static@2.2.1: + seroval@1.6.2: {} + + serve-static@2.2.1(supports-color@7.2.0): dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 1.2.1 + send: 1.2.1(supports-color@7.2.0) transitivePeerDependencies: - supports-color setprototypeof@1.2.0: {} - shadcn@4.13.0(typescript@6.0.3): + shadcn@4.13.0(supports-color@7.2.0)(typescript@6.0.3): dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) '@babel/parser': 7.29.7 - '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) - '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) '@dotenvx/dotenvx': 1.75.1 - '@modelcontextprotocol/sdk': 1.29.0(zod@3.25.76) + '@modelcontextprotocol/sdk': 1.29.0(supports-color@7.2.0)(zod@3.25.76) '@types/validate-npm-package-name': 4.0.2 browserslist: 4.28.6 commander: 14.0.3 @@ -7556,7 +7624,7 @@ snapshots: kleur: 4.1.5 open: 11.0.0 ora: 8.2.0 - postcss: 8.5.19 + postcss: 8.5.26 postcss-selector-parser: 7.1.4 prompts: 2.4.2 recast: 0.23.12 @@ -7564,7 +7632,7 @@ snapshots: tailwind-merge: 3.6.0 ts-morph: 26.0.0 tsconfig-paths: 4.2.0 - undici: 7.28.0 + undici: 7.29.0 validate-npm-package-name: 7.0.2 zod: 3.25.76 zod-to-json-schema: 3.25.2(zod@3.25.76) @@ -7634,8 +7702,6 @@ snapshots: srvx@0.11.22: {} - srvx@0.8.16: {} - stable-hash-x@0.2.0: {} stackback@0.0.2: {} @@ -7767,13 +7833,13 @@ snapshots: media-typer: 1.1.0 mime-types: 3.0.2 - typescript-eslint@8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3): + typescript-eslint@8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.64.0(@typescript-eslint/parser@8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/parser': 8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.64.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.64.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) - eslint: 9.39.5(jiti@2.7.0) + '@typescript-eslint/eslint-plugin': 8.64.0(@typescript-eslint/parser@8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/parser': 8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/utils': 8.64.0(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -7784,15 +7850,11 @@ snapshots: undici-types@6.21.0: {} - undici@7.28.0: {} + undici@7.29.0: {} - unenv@2.0.0-rc.21: + unenv@2.0.0-rc.24: dependencies: - defu: 6.1.7 - exsolve: 1.1.0 - ohash: 2.0.11 pathe: 2.0.3 - ufo: 1.6.4 unicorn-magic@0.3.0: {} @@ -7838,11 +7900,12 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.12.2 '@unrs/resolver-binding-win32-x64-msvc': 1.12.2 - unstorage@2.0.0-alpha.3(db0@0.3.4(drizzle-orm@1.0.0-rc.4(@types/pg@8.20.0)(pg@8.22.0)(zod@3.25.76)))(lru-cache@11.5.2)(ofetch@1.5.1): + unstorage@2.0.0-alpha.7(chokidar@5.0.0)(db0@0.3.4(drizzle-orm@1.0.0-rc.4(@types/pg@8.20.0)(pg@8.22.0)(zod@3.25.76)))(lru-cache@11.5.2)(ofetch@2.0.0-alpha.3): optionalDependencies: + chokidar: 5.0.0 db0: 0.3.4(drizzle-orm@1.0.0-rc.4(@types/pg@8.20.0)(pg@8.22.0)(zod@3.25.76)) lru-cache: 11.5.2 - ofetch: 1.5.1 + ofetch: 2.0.0-alpha.3 update-browserslist-db@1.2.3(browserslist@4.28.6): dependencies: @@ -7868,7 +7931,7 @@ snapshots: dependencies: lightningcss: 1.32.0 picomatch: 4.0.5 - postcss: 8.5.19 + postcss: 8.5.26 rolldown: 1.1.5 tinyglobby: 0.2.17 optionalDependencies: @@ -7882,7 +7945,7 @@ snapshots: optionalDependencies: vite: 8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1) - vitest@4.1.10(@types/node@22.20.1)(jsdom@28.1.0)(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)): + vitest@4.1.10(@types/node@22.20.1)(jsdom@28.1.0(supports-color@7.2.0))(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)): dependencies: '@vitest/expect': 4.1.10 '@vitest/mocker': 4.1.10(vite@8.1.4(@types/node@22.20.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.1)) @@ -7906,14 +7969,14 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.20.1 - jsdom: 28.1.0 + jsdom: 28.1.0(supports-color@7.2.0) transitivePeerDependencies: - msw - vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@2.7.0)): + vue-eslint-parser@10.4.1(eslint@9.39.5(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0): dependencies: - debug: 4.4.3 - eslint: 9.39.5(jiti@2.7.0) + debug: 4.4.3(supports-color@7.2.0) + eslint: 9.39.5(jiti@2.7.0)(supports-color@7.2.0) eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 espree: 11.2.0 @@ -7977,7 +8040,7 @@ snapshots: '@oozcitak/dom': 2.0.2 '@oozcitak/infra': 2.0.2 '@oozcitak/util': 10.0.0 - js-yaml: 4.3.0 + js-yaml: 4.3.2 xmlchars@2.2.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3984565..6c458ab 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,3 @@ allowBuilds: - esbuild: false - unrs-resolver: false + esbuild: true + unrs-resolver: true diff --git a/prettier.config.js b/prettier.config.js index aea1c48..f7279f7 100644 --- a/prettier.config.js +++ b/prettier.config.js @@ -4,7 +4,7 @@ const config = { semi: false, singleQuote: true, - trailingComma: "all", -}; + trailingComma: 'all', +} -export default config; +export default config diff --git a/public/background.svg b/public/background.svg new file mode 100755 index 0000000..020952f --- /dev/null +++ b/public/background.svg @@ -0,0 +1,405 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/bss-navbar-logo-mobile.svg b/public/bss-navbar-logo-mobile.svg new file mode 100644 index 0000000..732364b --- /dev/null +++ b/public/bss-navbar-logo-mobile.svg @@ -0,0 +1,18 @@ + + + + + + + + Layer 1 + + + + + + + + + + diff --git a/public/bss-navbar-logo.svg b/public/bss-navbar-logo.svg new file mode 100644 index 0000000..84336b8 --- /dev/null +++ b/public/bss-navbar-logo.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/default-avatar.png b/public/default-avatar.png new file mode 100644 index 0000000..cec8d64 Binary files /dev/null and b/public/default-avatar.png differ diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index a11777c..0000000 Binary files a/public/favicon.ico and /dev/null differ diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..732364b --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,18 @@ + + + + + + + + Layer 1 + + + + + + + + + + diff --git a/public/icons/check.svg b/public/icons/check.svg new file mode 100644 index 0000000..05a9930 --- /dev/null +++ b/public/icons/check.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/fullscreen-enter.svg b/public/icons/fullscreen-enter.svg new file mode 100644 index 0000000..28fa587 --- /dev/null +++ b/public/icons/fullscreen-enter.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/fullscreen-exit.svg b/public/icons/fullscreen-exit.svg new file mode 100644 index 0000000..ce5af6e --- /dev/null +++ b/public/icons/fullscreen-exit.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/gear.svg b/public/icons/gear.svg new file mode 100644 index 0000000..fc8aa9b --- /dev/null +++ b/public/icons/gear.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/pause.svg b/public/icons/pause.svg new file mode 100644 index 0000000..a39b075 --- /dev/null +++ b/public/icons/pause.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/play.svg b/public/icons/play.svg new file mode 100644 index 0000000..3269512 --- /dev/null +++ b/public/icons/play.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/logo192.png b/public/logo192.png deleted file mode 100644 index fc44b0a..0000000 Binary files a/public/logo192.png and /dev/null differ diff --git a/public/logo512.png b/public/logo512.png deleted file mode 100644 index a4e47a6..0000000 Binary files a/public/logo512.png and /dev/null differ diff --git a/public/manifest.json b/public/manifest.json index 078ef50..4181be4 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,21 +1,11 @@ { - "short_name": "TanStack App", - "name": "Create TanStack App Sample", + "short_name": "BSStudio", + "name": "Budavári Schönherz Studio", "icons": [ { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" + "src": "favicon.svg", + "sizes": "any", + "type": "image/svg+xml" } ], "start_url": ".", diff --git a/public/partners/ac.svg b/public/partners/ac.svg new file mode 100755 index 0000000..c5e6e1e --- /dev/null +++ b/public/partners/ac.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/public/partners/schdesign.svg b/public/partners/schdesign.svg new file mode 100755 index 0000000..743bbd7 --- /dev/null +++ b/public/partners/schdesign.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/public/partners/schonherz.svg b/public/partners/schonherz.svg new file mode 100755 index 0000000..9f1df31 --- /dev/null +++ b/public/partners/schonherz.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/partners/simonyi.svg b/public/partners/simonyi.svg new file mode 100755 index 0000000..931d440 --- /dev/null +++ b/public/partners/simonyi.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/partners/vik.svg b/public/partners/vik.svg new file mode 100755 index 0000000..e36ea49 --- /dev/null +++ b/public/partners/vik.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/social/facebook.svg b/public/social/facebook.svg new file mode 100755 index 0000000..ac0e326 --- /dev/null +++ b/public/social/facebook.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/social/instagram.svg b/public/social/instagram.svg new file mode 100755 index 0000000..988ee29 --- /dev/null +++ b/public/social/instagram.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/social/youtube.svg b/public/social/youtube.svg new file mode 100755 index 0000000..e680649 --- /dev/null +++ b/public/social/youtube.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/test_member.png b/public/test_member.png deleted file mode 100644 index 86bc40b..0000000 Binary files a/public/test_member.png and /dev/null differ diff --git a/scripts/bootstrap-local.ts b/scripts/bootstrap-local.ts new file mode 100644 index 0000000..046e823 --- /dev/null +++ b/scripts/bootstrap-local.ts @@ -0,0 +1,31 @@ +import { writeLocalFiles } from './lib/local-bootstrap.ts' + +const result = writeLocalFiles(process.cwd()) + +console.log( + 'Lokális infrastruktúra fájlok elkészültek (oob/ könyvtár, gitignore-olt).', +) +if (result.created) { + console.log('Új helyi titkok generálva.') +} else { + console.log('Meglévő helyi titkok megőrizve (idempotens futás).') +} + +console.log('') +console.log('Tesztfelhasználók (jelszavak: oob/local-secrets.json):') +for (const [username, password] of Object.entries(result.secrets.passwords)) { + console.log(` ${username} / ${password}`) +} +console.log('') +console.log('Következő lépések:') +console.log(' 1. docker compose -f docker-compose.dev.yml up -d') +console.log( + ' 2. DATABASE_URL=postgres://bss:bss@127.0.0.1:5582/bss pnpm db:migrate', +) +console.log(' 3. pnpm check:oob') +console.log( + ' Ha az Authentik már fut, a blueprint automatikusan érvényesül; ellenőrzés:', +) +console.log( + ' curl http://127.0.0.1:9000/application/o/bss-stack/.well-known/openid-configuration', +) diff --git a/scripts/check-oob.ts b/scripts/check-oob.ts new file mode 100644 index 0000000..04c9d23 --- /dev/null +++ b/scripts/check-oob.ts @@ -0,0 +1,20 @@ +import { loadOobConfig } from '#/server/config/load.ts' + +const path: string | undefined = + process.argv.length > 2 ? process.argv[2] : undefined + +try { + const config = loadOobConfig(path) + console.log('A BSS OOB config érvényes.') + console.log( + ` Betöltött fájl: ${path ?? process.env['BSS_OOB_CONFIG'] ?? 'oob/config.json'}`, + ) + console.log(` Authentik issuer: ${config.authentik.issuerUrl}`) + console.log( + ` Csoportok: schonherz=${config.authentik.groups.schonherz}, tag=${config.authentik.groups.tag}, vezetoseg=${config.authentik.groups.vezetoseg}`, + ) + console.log(` Seed fájl helye: ${config.seed.path}`) +} catch (error) { + console.error((error as Error).message) + process.exit(1) +} diff --git a/scripts/generate-openapi.ts b/scripts/generate-openapi.ts new file mode 100644 index 0000000..25370ac --- /dev/null +++ b/scripts/generate-openapi.ts @@ -0,0 +1,22 @@ +import { mkdirSync, writeFileSync } from 'node:fs' +import { dirname } from 'node:path' +import { + buildMemberWebhookOpenApi, + MEMBER_WEBHOOK_OPENAPI_PATH, + renderMemberWebhookOpenApi, +} from '#/server/api/openapi.ts' + +function main(): void { + const yaml = renderMemberWebhookOpenApi() + mkdirSync(dirname(MEMBER_WEBHOOK_OPENAPI_PATH), { recursive: true }) + writeFileSync(MEMBER_WEBHOOK_OPENAPI_PATH, yaml, 'utf-8') + + const document = buildMemberWebhookOpenApi() as { + info: { version: string } + } + console.log( + `OpenAPI kiírva: ${MEMBER_WEBHOOK_OPENAPI_PATH} (v${document.info.version}, ${yaml.split('\n').length} sor)`, + ) +} + +main() diff --git a/scripts/import-seed.ts b/scripts/import-seed.ts new file mode 100644 index 0000000..874e3a7 --- /dev/null +++ b/scripts/import-seed.ts @@ -0,0 +1,73 @@ +import { readFileSync } from 'node:fs' +import 'dotenv/config' +import { drizzle } from 'drizzle-orm/node-postgres' +import { Pool } from 'pg' +import { loadOobConfig } from '#/server/config/load.ts' +import { importSeed } from '#/server/seed/importer.ts' +import { SeedValidationError, validateSeedJson } from '#/server/seed/schema.ts' +import { DEFAULT_MEDIA_CONFIG } from '#/server/media/validator.ts' + +async function main(): Promise { + const databaseUrl = process.env.DATABASE_URL + if (!databaseUrl) { + console.error( + 'A DATABASE_URL környezeti változó nincs beállítva. ' + + 'Állítsd be a .env fájlban (lásd .env.example), majd futtasd újra: pnpm db:seed', + ) + process.exit(1) + } + + const config = loadOobConfig() + const seedPath = config.seed.path + + let rawSeed: unknown + try { + rawSeed = JSON.parse(readFileSync(seedPath, 'utf-8')) + } catch (error) { + console.error( + `Nem olvasható a seed JSON: ${seedPath}. ` + + 'Helyét az OOB config seed.path mezője rögzíti; a tartalmát a scraper állítja elő (docs/oob-inputs.md). ' + + `Eredeti hiba: ${error instanceof Error ? error.message : String(error)}`, + ) + process.exit(1) + } + + let seed + try { + seed = validateSeedJson(rawSeed, DEFAULT_MEDIA_CONFIG) + } catch (error) { + if (error instanceof SeedValidationError) { + console.error(error.message) + process.exit(1) + } + throw error + } + + const pool = new Pool({ connectionString: databaseUrl }) + try { + const db = drizzle({ client: pool }) + const result = await importSeed(db, { seed }) + console.log('A seed betöltése sikeres.') + console.log( + ` Események: ${result.createdEvents} új, ${result.updatedEvents} frissített`, + ) + console.log(` Címkék: ${result.createdTags} új`) + console.log(` Stábszerepek: ${result.createdStaffRoles} új`) + console.log( + ` Videók: ${result.createdVideos} új, ${result.updatedVideos} frissített`, + ) + console.log( + ` Kapcsolatok: ${result.tagLinks} címke-, ${result.staffLinks} stábkapcsolat`, + ) + console.log( + 'Újrafuttatás biztonságos: a változatlan adatokra nem ír semmit.', + ) + } catch (error) { + console.error((error as Error).message) + process.exit(1) + } finally { + await pool.end() + } +} + +void main() diff --git a/scripts/lib/local-bootstrap.ts b/scripts/lib/local-bootstrap.ts new file mode 100644 index 0000000..5980526 --- /dev/null +++ b/scripts/lib/local-bootstrap.ts @@ -0,0 +1,416 @@ +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs' +import { randomBytes } from 'node:crypto' +import { join } from 'node:path' +import { validateOobConfig } from '#/server/config/oob-schema.ts' +import type { OobConfig } from '#/server/config/oob-schema.ts' + +export const OOB_DIR = 'oob' +export const SECRETS_FILE = 'local-secrets.json' +export const BLUEPRINT_FILE = join('authentik', 'blueprints', 'bss-local.yaml') +export const AUTHENTIK_ENV_FILE = 'authentik.env' +export const CONFIG_FILE = 'config.json' + +export interface LocalSecrets { + authentikSecretKey: string + oidcClientSecret: string + passwords: Record +} + +/** + * Publikus alap URL-ek. Lan-eléréshez állítsd pl.: + * BSS_AUTHENTIK_BASE_URL=http://10.128.0.3:9000 + * BSS_APP_BASE_URL=http://10.128.0.3:3000 + */ +const AUTHENTIK_BASE_URL = + process.env.BSS_AUTHENTIK_BASE_URL ?? 'http://127.0.0.1:9000' +const APP_BASE_URL = process.env.BSS_APP_BASE_URL ?? 'http://localhost:3000' +const OIDC_CLIENT_ID = 'bss-stack-local' + +interface LocalUserSpec { + username: string + fullName: string + nickname: string + groups: string[] + status: string | null + joinedSemester: string | null + introduction: string | null +} + +export const LOCAL_USERS: LocalUserSpec[] = [ + { + username: 'schonherz-dev', + fullName: 'Schönherzes Teszt Felhasználó', + nickname: 'Schi', + groups: ['bss-schonherz'], + status: null, + joinedSemester: null, + introduction: null, + }, + { + username: 'tag-dev', + fullName: 'Teszt BSS Tag', + nickname: 'Tagocska', + groups: ['bss-tag'], + status: 'stúdiós', + joinedSemester: '2023/2024/1', + introduction: 'Lokális teszt profil egy stúdiós szerepére.', + }, + { + username: 'vezetoseg-dev', + fullName: 'Teszt Vezetőségi Tag', + nickname: 'Vezér', + groups: ['bss-tag', 'bss-vezetoseg'], + status: 'stúdiós', + joinedSemester: '2020/2021/2', + introduction: 'Lokális teszt profil vezetőségi joggal.', + }, + { + username: 'jelolt-dev', + fullName: 'Teszt Stúdiósjelölt', + nickname: 'Jelöltke', + groups: [], + status: 'stúdiósjelölt', + joinedSemester: '2025/2026/1', + introduction: null, + }, + { + username: 'jeloltjelolt-dev', + fullName: 'Teszt Stúdiósjelölt-jelölt', + nickname: 'Jelcsa', + groups: [], + status: 'stúdiósjelölt-jelölt', + joinedSemester: '2026/2027/1', + introduction: null, + }, + { + username: 'oregtag-dev', + fullName: 'Teszt Aktív Öregtag', + nickname: 'Öreg', + groups: [], + status: 'aktív öregtag', + joinedSemester: '2019/2020/1', + introduction: null, + }, + { + username: 'archivalt-oregtag-dev', + fullName: 'Teszt Archivált Öregtag', + nickname: 'Archie', + groups: [], + status: 'archivált öregtag', + joinedSemester: '2018/2019/1', + introduction: null, + }, + { + username: 'kozremukodo-dev', + fullName: 'Teszt Korábbi Közreműködő', + nickname: 'Közreműködő', + groups: [], + status: 'dolgozott még velünk', + joinedSemester: '2019/2020/2', + introduction: null, + }, +] + +function generateToken(): string { + return randomBytes(24).toString('base64url') +} + +export function generateLocalSecrets(): LocalSecrets { + const passwords: Record = {} + for (const user of LOCAL_USERS) { + passwords[user.username] = generateToken() + } + return { + authentikSecretKey: generateToken(), + oidcClientSecret: generateToken(), + passwords, + } +} + +export function renderBlueprint(secrets: LocalSecrets): string { + const userEntries = LOCAL_USERS.map((user) => { + const lines: string[] = [] + + if (user.groups.length > 0) { + lines.push(' groups:') + for (const group of user.groups) { + lines.push(` - !KeyOf id-${group}`) + } + } + if ( + user.status !== null || + user.joinedSemester !== null || + user.introduction !== null + ) { + lines.push(' attributes:') + if (user.status !== null) { + lines.push(` bss_status: "${user.status}"`) + } + if (user.joinedSemester !== null) { + lines.push(` bss_csatlakozas: "${user.joinedSemester}"`) + } + if (user.introduction !== null) { + lines.push(' bss_bemutatkozas: >-') + lines.push(` ${user.introduction}`) + } + } + + return [ + ' - model: authentik_core.user', + ' identifiers:', + ` username: ${user.username}`, + ' attrs:', + ` name: ${user.fullName}`, + ` username: ${user.username}`, + ' type: internal', + ` password: "${secrets.passwords[user.username]}"`, + ...lines, + ].join('\n') + }).join('\n') + + return [ + '# AUTOMATIKUSAN GENERÁLT FÁJL - NE SZERKESZD KÉZZEL!', + '# A scripts/bootstrap-local.ts hozza létre az oob/ könyvtárba.', + 'version: 1', + 'entries:', + ' - model: authentik_flows.flow', + ' id: id-authn-flow', + ' identifiers:', + ' slug: bss-local-authentication', + ' attrs:', + ' name: bss-local-authentication', + ' title: Bejelentkezés a BSS Stackbe', + ' designation: authentication', + ' authentication: none', + ' denied_action: message_continue', + ' - model: authentik_flows.flow', + ' id: id-authz-flow', + ' identifiers:', + ' slug: bss-local-authorization', + ' attrs:', + ' name: bss-local-authorization', + ' title: Hozzáférés engedélyezése', + ' designation: authorization', + ' authentication: require_authenticated', + ' denied_action: message_continue', + ' - model: authentik_stages_identification.identificationstage', + ' id: id-stage-identification', + ' identifiers:', + ' name: bss-local-identification', + ' attrs:', + ' name: bss-local-identification', + ' user_fields:', + ' - username', + ' case_insensitive_matching: true', + ' - model: authentik_stages_password.passwordstage', + ' id: id-stage-password', + ' identifiers:', + ' name: bss-local-password', + ' attrs:', + ' name: bss-local-password', + ' backends:', + ' - authentik.core.auth.InbuiltBackend', + ' - model: authentik_stages_user_login.userloginstage', + ' id: id-stage-login', + ' identifiers:', + ' name: bss-local-user-login', + ' attrs:', + ' name: bss-local-user-login', + ' session_duration: days=1', + ' - model: authentik_flows.flowstagebinding', + ' identifiers:', + ' order: 0', + ' target: !KeyOf id-authn-flow', + ' attrs:', + ' order: 0', + ' target: !KeyOf id-authn-flow', + ' stage: !KeyOf id-stage-identification', + ' - model: authentik_flows.flowstagebinding', + ' identifiers:', + ' order: 1', + ' target: !KeyOf id-authn-flow', + ' attrs:', + ' order: 1', + ' target: !KeyOf id-authn-flow', + ' stage: !KeyOf id-stage-password', + ' - model: authentik_flows.flowstagebinding', + ' identifiers:', + ' order: 2', + ' target: !KeyOf id-authn-flow', + ' attrs:', + ' order: 2', + ' target: !KeyOf id-authn-flow', + ' stage: !KeyOf id-stage-login', + ' - model: authentik_core.group', + ' id: id-bss-schonherz', + ' identifiers:', + ' name: bss-schonherz', + ' attrs:', + ' name: bss-schonherz', + ' is_superuser: false', + ' - model: authentik_core.group', + ' id: id-bss-tag', + ' identifiers:', + ' name: bss-tag', + ' attrs:', + ' name: bss-tag', + ' is_superuser: false', + ' - model: authentik_core.group', + ' id: id-bss-vezetoseg', + ' identifiers:', + ' name: bss-vezetoseg', + ' attrs:', + ' name: bss-vezetoseg', + ' is_superuser: false', + userEntries, + ' - model: authentik_providers_oauth2.scopemapping', + ' id: id-map-profile', + ' identifiers:', + ' name: bss-local-scope-profile', + ' attrs:', + ' name: bss-local-scope-profile', + ' scope_name: profile', + ' description: Profil adatok', + ' expression: |', + ' return {', + ' "preferred_username": request.user.username,', + ' "name": request.user.name,', + ' "nickname": request.user.attributes.get("nickname", request.user.username),', + ' "picture": request.user.avatar,', + ' "groups": [group.name for group in request.user.groups.all()],', + ' }', + ' - model: authentik_providers_oauth2.scopemapping', + ' id: id-map-email', + ' identifiers:', + ' name: bss-local-scope-email', + ' attrs:', + ' name: bss-local-scope-email', + ' scope_name: email', + ' description: Email cím', + ' expression: |', + ' return {"email": request.user.email, "email_verified": True}', + ' - model: authentik_providers_oauth2.scopemapping', + ' id: id-map-bss', + ' identifiers:', + ' name: bss-custom-claims', + ' attrs:', + ' name: bss-custom-claims', + ' scope_name: bss', + ' description: BSS tagsági attribútumok', + ' expression: |', + ' return {', + ' "bss_status": request.user.attributes.get("bss_status", ""),', + ' "bss_csatlakozas": request.user.attributes.get("bss_csatlakozas", ""),', + ' "bss_bemutatkozas": request.user.attributes.get("bss_bemutatkozas", "")', + ' }', + ' - model: authentik_providers_oauth2.oauth2provider', + ' id: bss-stack-provider', + ' identifiers:', + ' name: bss-stack-provider', + ' attrs:', + ' name: bss-stack-provider', + ` client_id: ${OIDC_CLIENT_ID}`, + ` client_secret: "${secrets.oidcClientSecret}"`, + ' redirect_uris:', + ' - matching_mode: strict', + ' url: http://localhost:3000/api/auth/callback', + ' - matching_mode: strict', + ' url: http://127.0.0.1:3000/api/auth/callback', + ...(APP_BASE_URL === 'http://localhost:3000' || + APP_BASE_URL === 'http://127.0.0.1:3000' + ? [] + : [ + ' - matching_mode: strict', + ` url: ${APP_BASE_URL}/api/auth/callback`, + ]), + ' grant_types:', + ' - authorization_code', + ' - refresh_token', + ' - client_credentials', + ' authorization_flow: !KeyOf id-authz-flow', + ' invalidation_flow: !Find [authentik_flows.Flow, [slug, default-provider-invalidation-flow]]', + ' property_mappings:', + ' - !KeyOf id-map-profile', + ' - !KeyOf id-map-email', + ' - !KeyOf id-map-bss', + ' - !KeyOf id-map-api-scope', + ' # user_id sub: a webhookon beküldött sub értéke az API pk-ja', + ' sub_mode: user_id', + ' access_token_validity: hours=1', + ' signing_key: !Find [authentik_crypto.certificatekeypair, [name, authentik Self-signed Certificate]]', + ' - model: authentik_core.application', + ' identifiers:', + ' slug: bss-stack', + ' attrs:', + ' name: BSS Stack', + ' slug: bss-stack', + ' provider: !KeyOf bss-stack-provider', + '', + ].join('\n') +} + +export function renderOobConfig(secrets: LocalSecrets): unknown { + return { + authentik: { + issuerUrl: `${AUTHENTIK_BASE_URL}/application/o/bss-stack/`, + clientId: OIDC_CLIENT_ID, + clientSecret: secrets.oidcClientSecret, + scopes: ['openid', 'profile', 'email', 'bss'], + claims: { + sub: 'sub', + username: 'preferred_username', + fullName: 'name', + nickname: 'nickname', + avatarUrl: 'picture', + }, + groups: { + schonherz: 'bss-schonherz', + tag: 'bss-tag', + vezetoseg: 'bss-vezetoseg', + }, + }, + youtube: { + oEmbedEndpoint: 'https://www.youtube.com/oEmbed', + }, + seed: { + path: 'oob/seed.json', + }, + } +} + +export function writeLocalFiles(baseDir: string): { + secrets: LocalSecrets + created: boolean +} { + const oobDir = join(baseDir, OOB_DIR) + mkdirSync(join(oobDir, 'authentik', 'blueprints'), { recursive: true }) + + const secretsPath = join(oobDir, SECRETS_FILE) + let secrets: LocalSecrets + let created = false + + if (existsSync(secretsPath)) { + secrets = JSON.parse(readFileSync(secretsPath, 'utf-8')) as LocalSecrets + // Újabb mezők utólagos kiegészítése régi titokfájlon (idempotens futás). + } else { + secrets = generateLocalSecrets() + writeFileSync(secretsPath, `${JSON.stringify(secrets, null, 2)}\n`) + created = true + } + + writeFileSync(join(oobDir, BLUEPRINT_FILE), renderBlueprint(secrets)) + writeFileSync( + join(oobDir, AUTHENTIK_ENV_FILE), + `AUTHENTIK_SECRET_KEY=${secrets.authentikSecretKey}\n`, + ) + + const rawConfig = renderOobConfig(secrets) + const validated: OobConfig = validateOobConfig(rawConfig) + writeFileSync( + join(oobDir, CONFIG_FILE), + `${JSON.stringify(rawConfig, null, 2)}\n`, + ) + void validated + + return { secrets, created } +} diff --git a/scripts/webhook-client.ts b/scripts/webhook-client.ts new file mode 100644 index 0000000..d9d7ec8 --- /dev/null +++ b/scripts/webhook-client.ts @@ -0,0 +1,115 @@ +import 'dotenv/config' +import { drizzle } from 'drizzle-orm/node-postgres' +import { Pool } from 'pg' +import { + createWebhookClient, + listWebhookClients, + revokeWebhookClient, + rotateWebhookClientSecret, + WebhookClientNameConflictError, + WebhookClientNotFoundError, +} from '#/server/webhooks/clients.ts' +import { TextValidationError } from '#/server/shared/text.ts' + +const USAGE = `Használat: + pnpm webhook:client list + pnpm webhook:client create + pnpm webhook:client rotate + pnpm webhook:client revoke + +A tagfrissítő webhook klienseit kezeli közvetlenül az adatbázisban. Ugyanez +elérhető az /admin/members oldalon is; ez a CLI az első kliens létrehozásához +kell, amikor még senki nem tud bejelentkezni.` + +async function main(): Promise { + const databaseUrl = process.env.DATABASE_URL + if (!databaseUrl) { + console.error( + 'A DATABASE_URL környezeti változó nincs beállítva. ' + + 'Állítsd be a .env fájlban (lásd .env.example), majd futtasd újra.', + ) + process.exit(1) + } + + const args = process.argv.slice(2) + const command = args.at(0) + const argument = args.at(1) + if (command === undefined || command === '--help' || command === '-h') { + console.log(USAGE) + process.exit(command === undefined ? 1 : 0) + } + + const pool = new Pool({ connectionString: databaseUrl }) + try { + const db = drizzle({ client: pool }) + + if (command === 'list') { + const clients = await listWebhookClients(db) + if (clients.length === 0) { + console.log('Nincs egyetlen webhook kliens sem.') + return + } + for (const client of clients) { + const state = client.revokedAt === null ? 'aktív' : 'visszavont' + const used = + client.lastUsedAt === null + ? 'még nem használt' + : `utoljára: ${client.lastUsedAt.toISOString()}` + console.log(`${client.id} ${state.padEnd(11)} ${used} ${client.name}`) + } + return + } + + if (command === 'create') { + const created = await createWebhookClient(db, { + name: argument, + createdBy: null, + }) + console.log(`Létrehozva: ${created.client.name} (${created.client.id})`) + console.log('') + console.log('Bearer token (csak most jelenik meg, őrizd meg):') + console.log(` ${created.token}`) + return + } + + if (command === 'rotate') { + if (argument === undefined) { + console.error('Hiányzó kliens-id.\n\n' + USAGE) + process.exit(1) + } + const rotated = await rotateWebhookClientSecret(db, argument) + console.log(`Új titok: ${rotated.client.name} (${rotated.client.id})`) + console.log('') + console.log('Bearer token (a régi azonnal érvénytelen):') + console.log(` ${rotated.token}`) + return + } + + if (command === 'revoke') { + if (argument === undefined) { + console.error('Hiányzó kliens-id.\n\n' + USAGE) + process.exit(1) + } + const revoked = await revokeWebhookClient(db, argument, new Date()) + console.log(`Visszavonva: ${revoked.name} (${revoked.id})`) + return + } + + console.error(`Ismeretlen parancs: ${command}\n\n${USAGE}`) + process.exit(1) + } catch (error) { + if ( + error instanceof TextValidationError || + error instanceof WebhookClientNameConflictError || + error instanceof WebhookClientNotFoundError + ) { + console.error(error.message) + process.exit(1) + } + throw error + } finally { + await pool.end() + } +} + +void main() diff --git a/src/components/EventCard.tsx b/src/components/EventCard.tsx index 9079e31..07c50d8 100644 --- a/src/components/EventCard.tsx +++ b/src/components/EventCard.tsx @@ -1,8 +1,4 @@ -export default function EventCard({ - eventId = 'unknown', -}: Readonly<{ - eventId?: string -}>) { +export default function EventCard() { return (
Kapcsolat
bss@sch.bme.hu -
- {'instagram - {'youtube - {'facebook +
+ {socialLinks.map((social) => ( + + + + ))}
-
- {'ac'} - {'schonherz'} - {'simonyi'} - {'schdesign'} - {'vik'} +
+ {partners.map((partner) => ( + + + + ))}
) diff --git a/src/components/MemberCard.tsx b/src/components/MemberCard.tsx index e31b91e..fc7bf3c 100644 --- a/src/components/MemberCard.tsx +++ b/src/components/MemberCard.tsx @@ -1,8 +1,4 @@ - - -export default function MemberCard({ - memberId = 'unknown', -}: Readonly<{ memberId?: string }>) { +export default function MemberCard() { return (
{'Member

diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index 633b2b8..060418f 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -1,106 +1,160 @@ -"use client" +'use client' import { useEffect, useState } from 'react' -import ThemeToggle from "#/components/ThemeToggle.tsx"; -import { Link } from '@tanstack/react-router' +import ThemeToggle from '#/components/ThemeToggle.tsx' +import SearchBox from '#/components/SearchBox.tsx' +import UserMenu from '#/components/UserMenu.tsx' +import { Link, useLocation } from '@tanstack/react-router' +import { useQuery } from '@tanstack/react-query' +import { fetchViewerState } from '#/server/pages/viewer-fn.ts' + +const NAV_LINKS = [ + { to: '/videos', label: 'Videók' }, + { to: '/events', label: 'Események' }, + { to: '/members', label: 'Tagok' }, + { to: '/courses', label: 'Tanfolyamok' }, + { to: '/about', label: 'Mivel foglalkozunk?' }, +] as const export default function Navbar() { - const [pathname, setPathname] = useState(() => - typeof window !== 'undefined' ? window.location.pathname : '/' - ) + const [menuOpen, setMenuOpen] = useState(false) + const location = useLocation() + const viewerQuery = useQuery({ + queryKey: ['viewer'], + queryFn: fetchViewerState, + staleTime: 60_000, + }) + const viewer = viewerQuery.data + // Close the mobile menu on route change. useEffect(() => { - const handleLocationChange = () => setPathname(window.location.pathname) - - // catch back/forward - window.addEventListener('popstate', handleLocationChange) - - // also patch pushState to detect client-side navigations that don't trigger popstate - const _pushState = history.pushState - ;(history as any).pushState = function (...args: any[]) { - _pushState.call(this, args[0], args[1], args[2]) - handleLocationChange() - } - - return () => { - window.removeEventListener('popstate', handleLocationChange) - // restore - ;(history as any).pushState = _pushState - } - }, []) + setMenuOpen(false) + }, [location.href]) return (

) -} \ No newline at end of file +} + +/** Logs in, returning to the current page; logout lives in the profile menu. */ +function LoginButton() { + const location = useLocation() + const returnTo = `${location.pathname}${location.searchStr}` + return ( + + Belépés + + ) +} diff --git a/src/components/PageStates.tsx b/src/components/PageStates.tsx new file mode 100644 index 0000000..6774e71 --- /dev/null +++ b/src/components/PageStates.tsx @@ -0,0 +1,140 @@ +import { Link } from '@tanstack/react-router' + +export function LoadingState({ label = 'Betöltés…' }: { label?: string }) { + return ( +
+

{label}

+
+ ) +} + +export function EmptyState({ + title, + description, +}: { + title: string + description?: string +}) { + return ( +
+

{title}

+ {description !== undefined && ( +

{description}

+ )} +
+ ) +} + +export function ErrorState({ + label = 'Hiba történt az adatok betöltése közben. Próbáld újra később.', +}: { + label?: string +}) { + return ( +
+

Hoppá!

+

+ {label} +

+
+ ) +} + +export function NotFoundContent() { + return ( +
+

404

+

+ Az oldal nem található +

+

+ A keresett tartalom nem létezik, még nem jelent meg, vagy már nem + elérhető. +

+ + Vissza a főoldalra + +
+ ) +} + +export function ForbiddenContent() { + return ( +
+

403

+

+ Hozzáférés megtagadva +

+

+ Ehhez az oldalhoz nincs jogosultságod. +

+ + Vissza a főoldalra + +
+ ) +} + +/* --- Loading placeholders ------------------------------------------------- */ + +/** Placeholder for a line of text; the caller supplies the height. */ +export function SkeletonLine({ className = '' }: { className?: string }) { + return +} + +/** + * Placeholder for a video or event card: 16:9 thumbnail plus a heading. Its + * sizes match the real card's, so the layout doesn't jump when content + * appears. + */ +export function ThumbnailCardSkeleton({ + lines = 1, + className = '', +}: { + lines?: number + className?: string +}) { + return ( +