diff --git a/README.md b/README.md
index 6510851..9d446f2 100644
--- a/README.md
+++ b/README.md
@@ -76,13 +76,14 @@ Megjegyzések:
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 |
+| Felhasználó | Szerep |
+| --------------------- | --------------------------------------------------------------- |
+| (nincs bejelentkezés) | névtelen látogató — csak publikus videók |
+| schonherz-dev | csoport nélküli felhasználó — csak publikus videók, admin nincs |
+| tag-dev | BSS-tag — minden láthatóság, adminjogok |
+| vezetoseg-dev | vezetőség — kibővített adminjogok |
+| admin-dev | admin — kibővített adminjogok |
+| további `-dev` userek | szintetikus tagprofilok minden tagsági státuszhoz |
## Demo forgatókönyvek szereplőnként
@@ -95,10 +96,9 @@ Jelszavak: `oob/local-secrets.json` (gitignore-olt).
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)
+### Csoport nélküli felhasználó (schonherz-dev)
-1. Jelentkezz be; a `/videos` listában már a schönherz láthatóságú videók is
- megjelennek.
+1. Jelentkezz be; továbbra is csak a publikus videók jelennek meg.
2. `/admin` közvetlenül: magyar tiltóoldal (403), sidebar sem látszik.
### BSS-tag (tag-dev)
diff --git a/docs/api/members-webhook.openapi.yaml b/docs/api/members-webhook.openapi.yaml
index 0033d37..15ed0c3 100644
--- a/docs/api/members-webhook.openapi.yaml
+++ b/docs/api/members-webhook.openapi.yaml
@@ -23,7 +23,7 @@ paths:
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
+ `archive` hides the member from the public
surfaces, but their row and the roles recorded in credit lists are kept,
and a later `upsert` restores them.
security:
@@ -52,7 +52,7 @@ paths:
- "$ref": "#/components/schemas/ReplacePayload"
examples:
operations:
- summary: "Operations (create and delete in one request)"
+ summary: "Operations (create and archive in one request)"
value:
operations:
- op: "upsert"
@@ -62,10 +62,10 @@ paths:
fullName: "Gipsz Jakab"
nickname: "Pitypang"
avatarUrl: null
- membershipStatus: "studio_member"
+ membershipStatus: "MEMBER"
isLeadership: false
joinedSemester: "2021/2022/1"
- - op: "delete"
+ - op: "archive"
sub: "57"
replace:
summary: "Full roster replacement"
@@ -77,7 +77,7 @@ paths:
fullName: "Gipsz Jakab"
nickname: "Pitypang"
avatarUrl: null
- membershipStatus: "studio_member"
+ membershipStatus: "MEMBER"
isLeadership: false
joinedSemester: "2021/2022/1"
responses:
@@ -178,15 +178,14 @@ components:
membershipStatus:
type: "string"
enum:
- - "studio_member"
- - "studio_candidate"
- - "studio_applicant"
- - "senior_active"
- - "senior_archived"
- - "contributor"
+ - "MEMBER_CANDIDATE_CANDIDATE"
+ - "MEMBER_CANDIDATE"
+ - "MEMBER"
+ - "ACTIVE_ALUMNI"
+ - "ALUMNI"
description: "Membership status. It decides which public list the member appears on; it grants NO permissions."
examples:
- - "studio_member"
+ - "MEMBER"
isLeadership:
type: "boolean"
default: false
@@ -207,7 +206,7 @@ components:
fullName: "Gipsz Jakab"
nickname: "Pitypang"
avatarUrl: null
- membershipStatus: "studio_member"
+ membershipStatus: "MEMBER"
isLeadership: false
joinedSemester: "2021/2022/1"
UpsertOperation:
@@ -221,7 +220,7 @@ components:
const: "upsert"
member:
"$ref": "#/components/schemas/Member"
- DeleteOperation:
+ ArchiveOperation:
type: "object"
required:
- "op"
@@ -229,11 +228,11 @@ components:
properties:
op:
type: "string"
- const: "delete"
+ const: "archive"
sub:
type: "string"
maxLength: 255
- description: "The `sub` of the member to delete. An unknown `sub` is not an error, it is simply ignored."
+ description: "The `sub` of the member to archive. An unknown `sub` is not an error, it is simply ignored."
OperationsPayload:
type: "object"
required:
@@ -250,14 +249,14 @@ components:
items:
oneOf:
- "$ref": "#/components/schemas/UpsertOperation"
- - "$ref": "#/components/schemas/DeleteOperation"
+ - "$ref": "#/components/schemas/ArchiveOperation"
ReplacePayload:
type: "object"
required:
- "mode"
- "members"
description: |-
- The full member roster. Anything left out of the list gets deleted —
+ The full member roster. Anything left out of the list gets archived —
a faulty client can empty the entire roster this way.
properties:
mode:
@@ -274,7 +273,7 @@ components:
- "operationCount"
- "created"
- "updated"
- - "deleted"
+ - "archived"
- "restored"
- "unchanged"
- "ignored"
@@ -290,18 +289,18 @@ components:
type: "integer"
updated:
type: "integer"
- deleted:
+ archived:
type: "integer"
- description: "Soft-deleted members."
+ description: "Archived members."
restored:
type: "integer"
- description: "Members previously deleted and now restored."
+ description: "Members previously archived 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`."
+ description: "Archives targeting an unknown `sub`."
PushResponse:
type: "object"
required:
diff --git a/docs/examples/oob-config.example.json b/docs/examples/oob-config.example.json
index 8c10199..979944d 100644
--- a/docs/examples/oob-config.example.json
+++ b/docs/examples/oob-config.example.json
@@ -5,16 +5,15 @@
"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"
+ "sub": "sub"
},
"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"
+ "admin": "Admin",
+ "studio": "Stúdiós",
+ "studioCandidate": "Stúdiós jelölt",
+ "studioCandidateCandidate": "Stúdiós jelölt-jelölt",
+ "leadership": "Vezetőség",
+ "alumni": "Öregtag"
}
},
"youtube": {
diff --git a/docs/oob-inputs.md b/docs/oob-inputs.md
index 54d8af3..9085657 100644
--- a/docs/oob-inputs.md
+++ b/docs/oob-inputs.md
@@ -9,8 +9,8 @@ Az alkalmazás három bemenete out-of-band, azaz nem a git repóban érkezik. Hi
- 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;
+ - claim-leképezés: az Authentik felhasználót a taggal összekötő `sub`;
+ - csoportleképezés: Admin, Stúdiós, Stúdiós jelölt, Stúdiós jelölt-jelölt, Vezetőség és Öregtag;
- médiahost (`media.host`, jelenleg `https://v.bsstudio.hu`);
- YouTube oEmbed végpont;
- seed JSON helye.
diff --git a/drizzle/20260831195115_cool_violations/migration.sql b/drizzle/20260831195115_cool_violations/migration.sql
new file mode 100644
index 0000000..5516a37
--- /dev/null
+++ b/drizzle/20260831195115_cool_violations/migration.sql
@@ -0,0 +1,14 @@
+ALTER TABLE "member_cache" ALTER COLUMN "membership_status" SET DATA TYPE text;--> statement-breakpoint
+UPDATE "member_cache"
+SET "membership_status" = CASE "membership_status"
+ WHEN 'studio_applicant' THEN 'MEMBER_CANDIDATE_CANDIDATE'
+ WHEN 'studio_candidate' THEN 'MEMBER_CANDIDATE'
+ WHEN 'studio_member' THEN 'MEMBER'
+ WHEN 'senior_active' THEN 'ACTIVE_ALUMNI'
+ WHEN 'senior_archived' THEN 'ALUMNI'
+ WHEN 'contributor' THEN 'ALUMNI'
+ ELSE "membership_status"
+END;--> statement-breakpoint
+DROP TYPE "membership_status";--> statement-breakpoint
+CREATE TYPE "membership_status" AS ENUM('MEMBER_CANDIDATE_CANDIDATE', 'MEMBER_CANDIDATE', 'MEMBER', 'ACTIVE_ALUMNI', 'ALUMNI');--> statement-breakpoint
+ALTER TABLE "member_cache" ALTER COLUMN "membership_status" SET DATA TYPE "membership_status" USING "membership_status"::"membership_status";
diff --git a/drizzle/20260831195115_cool_violations/snapshot.json b/drizzle/20260831195115_cool_violations/snapshot.json
new file mode 100644
index 0000000..089e179
--- /dev/null
+++ b/drizzle/20260831195115_cool_violations/snapshot.json
@@ -0,0 +1,2832 @@
+{
+ "version": "8",
+ "dialect": "postgres",
+ "id": "ba614b12-0c00-43b8-97ff-e62f8a34231f",
+ "prevIds": ["6bf6ee70-6c6a-4fd6-8205-d183a8c3a47e"],
+ "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": [
+ "MEMBER_CANDIDATE_CANDIDATE",
+ "MEMBER_CANDIDATE",
+ "MEMBER",
+ "ACTIVE_ALUMNI",
+ "ALUMNI"
+ ],
+ "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/drizzle/20260831203332_archive_members/migration.sql b/drizzle/20260831203332_archive_members/migration.sql
new file mode 100644
index 0000000..def397d
--- /dev/null
+++ b/drizzle/20260831203332_archive_members/migration.sql
@@ -0,0 +1,3 @@
+ALTER TABLE "member_cache" RENAME COLUMN "deleted_at" TO "archived_at";--> statement-breakpoint
+ALTER TABLE "webhook_deliveries" RENAME COLUMN "deleted_count" TO "archived_count";--> statement-breakpoint
+ALTER INDEX "member_cache_deleted_idx" RENAME TO "member_cache_archived_idx";
\ No newline at end of file
diff --git a/drizzle/20260831203332_archive_members/snapshot.json b/drizzle/20260831203332_archive_members/snapshot.json
new file mode 100644
index 0000000..5771f4a
--- /dev/null
+++ b/drizzle/20260831203332_archive_members/snapshot.json
@@ -0,0 +1,2836 @@
+{
+ "version": "8",
+ "dialect": "postgres",
+ "id": "b3e0e537-5cc9-4a64-b0ce-98b31f9b0e47",
+ "prevIds": ["ba614b12-0c00-43b8-97ff-e62f8a34231f"],
+ "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": [
+ "MEMBER_CANDIDATE_CANDIDATE",
+ "MEMBER_CANDIDATE",
+ "MEMBER",
+ "ACTIVE_ALUMNI",
+ "ALUMNI"
+ ],
+ "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": "archived_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": "archived_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": "archived_at",
+ "isExpression": false,
+ "asc": true,
+ "nullsFirst": false,
+ "opclass": null
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "with": "",
+ "method": "btree",
+ "concurrently": false,
+ "name": "member_cache_archived_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": [
+ "public.member_cache.deleted_at->public.member_cache.archived_at",
+ "public.webhook_deliveries.deleted_count->public.webhook_deliveries.archived_count",
+ "public.member_cache.member_cache_deleted_idx->public.member_cache.member_cache_archived_idx"
+ ]
+}
diff --git a/scripts/check-oob.ts b/scripts/check-oob.ts
index 04c9d23..768e012 100644
--- a/scripts/check-oob.ts
+++ b/scripts/check-oob.ts
@@ -11,7 +11,7 @@ try {
)
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}`,
+ ` Csoportok: admin=${config.authentik.groups.admin}, stúdiós=${config.authentik.groups.studio}, jelölt=${config.authentik.groups.studioCandidate}, jelölt-jelölt=${config.authentik.groups.studioCandidateCandidate}, vezetőség=${config.authentik.groups.leadership}, öregtag=${config.authentik.groups.alumni}`,
)
console.log(` Seed fájl helye: ${config.seed.path}`)
} catch (error) {
diff --git a/scripts/lib/local-bootstrap.ts b/scripts/lib/local-bootstrap.ts
index e7c9c04..e9eeed6 100644
--- a/scripts/lib/local-bootstrap.ts
+++ b/scripts/lib/local-bootstrap.ts
@@ -36,12 +36,24 @@ interface LocalUserSpec {
introduction: string | null
}
+const LOCAL_GROUPS = [
+ { id: 'admin', name: 'Admin' },
+ { id: 'studio', name: 'Stúdiós' },
+ { id: 'studio-candidate', name: 'Stúdiós jelölt' },
+ {
+ id: 'studio-candidate-candidate',
+ name: 'Stúdiós jelölt-jelölt',
+ },
+ { id: 'leadership', name: 'Vezetőség' },
+ { id: 'alumni', name: 'Öregtag' },
+] as const
+
export const LOCAL_USERS: LocalUserSpec[] = [
{
username: 'schonherz-dev',
fullName: 'Schönherzes Teszt Felhasználó',
nickname: 'Schi',
- groups: ['bss-schonherz'],
+ groups: [],
status: null,
joinedSemester: null,
introduction: null,
@@ -50,7 +62,7 @@ export const LOCAL_USERS: LocalUserSpec[] = [
username: 'tag-dev',
fullName: 'Teszt BSS Tag',
nickname: 'Tagocska',
- groups: ['bss-tag'],
+ groups: ['Stúdiós'],
status: 'stúdiós',
joinedSemester: '2023/2024/1',
introduction: 'Lokális teszt profil egy stúdiós szerepére.',
@@ -59,16 +71,25 @@ export const LOCAL_USERS: LocalUserSpec[] = [
username: 'vezetoseg-dev',
fullName: 'Teszt Vezetőségi Tag',
nickname: 'Vezér',
- groups: ['bss-tag', 'bss-vezetoseg'],
+ groups: ['Vezetőség'],
status: 'stúdiós',
joinedSemester: '2020/2021/2',
introduction: 'Lokális teszt profil vezetőségi joggal.',
},
+ {
+ username: 'admin-dev',
+ fullName: 'Teszt Admin',
+ nickname: 'Admin',
+ groups: ['Admin'],
+ status: 'stúdiós',
+ joinedSemester: '2020/2021/2',
+ introduction: 'Lokális teszt profil admin joggal.',
+ },
{
username: 'jelolt-dev',
fullName: 'Teszt Stúdiósjelölt',
nickname: 'Jelöltke',
- groups: [],
+ groups: ['Stúdiós jelölt'],
status: 'stúdiósjelölt',
joinedSemester: '2025/2026/1',
introduction: null,
@@ -77,7 +98,7 @@ export const LOCAL_USERS: LocalUserSpec[] = [
username: 'jeloltjelolt-dev',
fullName: 'Teszt Stúdiósjelölt-jelölt',
nickname: 'Jelcsa',
- groups: [],
+ groups: ['Stúdiós jelölt-jelölt'],
status: 'stúdiósjelölt-jelölt',
joinedSemester: '2026/2027/1',
introduction: null,
@@ -86,7 +107,7 @@ export const LOCAL_USERS: LocalUserSpec[] = [
username: 'oregtag-dev',
fullName: 'Teszt Aktív Öregtag',
nickname: 'Öreg',
- groups: [],
+ groups: ['Öregtag'],
status: 'aktív öregtag',
joinedSemester: '2019/2020/1',
introduction: null,
@@ -95,20 +116,11 @@ export const LOCAL_USERS: LocalUserSpec[] = [
username: 'archivalt-oregtag-dev',
fullName: 'Teszt Archivált Öregtag',
nickname: 'Archie',
- groups: [],
+ groups: ['Öregtag'],
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 {
@@ -134,7 +146,11 @@ export function renderBlueprint(secrets: LocalSecrets): string {
if (user.groups.length > 0) {
lines.push(' groups:')
for (const group of user.groups) {
- lines.push(` - !KeyOf id-${group}`)
+ const groupId = LOCAL_GROUPS.find((entry) => entry.name === group)?.id
+ if (groupId === undefined) {
+ throw new Error(`Ismeretlen lokális Authentik csoport: ${group}`)
+ }
+ lines.push(` - !KeyOf id-bss-${groupId}`)
}
}
if (
@@ -241,27 +257,15 @@ export function renderBlueprint(secrets: LocalSecrets): string {
' 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',
+ ...LOCAL_GROUPS.flatMap((group) => [
+ ' - model: authentik_core.group',
+ ` id: id-bss-${group.id}`,
+ ' identifiers:',
+ ` name: ${group.name}`,
+ ' attrs:',
+ ` name: ${group.name}`,
+ ' is_superuser: false',
+ ]),
userEntries,
' - model: authentik_providers_oauth2.scopemapping',
' id: id-map-profile',
@@ -358,15 +362,14 @@ export function renderOobConfig(secrets: LocalSecrets): unknown {
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',
+ admin: 'Admin',
+ studio: 'Stúdiós',
+ studioCandidate: 'Stúdiós jelölt',
+ studioCandidateCandidate: 'Stúdiós jelölt-jelölt',
+ leadership: 'Vezetőség',
+ alumni: 'Öregtag',
},
},
youtube: {
diff --git a/src/db/schema.ts b/src/db/schema.ts
index e3bd56f..c0ec7ee 100644
--- a/src/db/schema.ts
+++ b/src/db/schema.ts
@@ -43,12 +43,11 @@ export const eventStatusEnum = pgEnum('event_status', [
])
export const membershipStatusEnum = pgEnum('membership_status', [
- 'studio_member',
- 'studio_candidate',
- 'studio_applicant',
- 'senior_active',
- 'senior_archived',
- 'contributor',
+ 'MEMBER_CANDIDATE_CANDIDATE',
+ 'MEMBER_CANDIDATE',
+ 'MEMBER',
+ 'ACTIVE_ALUMNI',
+ 'ALUMNI',
])
export const semesterEnum = pgEnum('semester', ['spring', 'autumn'])
@@ -107,13 +106,13 @@ export const memberCache = pgTable(
updatedAt: timestamp('updated_at', { withTimezone: true })
.notNull()
.defaultNow(),
- /** Soft delete: retired members keep their staff credits but leave every listing. */
- deletedAt: timestamp('deleted_at', { withTimezone: true }),
+ /** Archived members keep their staff credits but leave every listing. */
+ archivedAt: timestamp('archived_at', { withTimezone: true }),
},
(table) => [
uniqueIndex('member_cache_username_key').on(table.username),
index('member_cache_status_idx').on(table.membershipStatus),
- index('member_cache_deleted_idx').on(table.deletedAt),
+ index('member_cache_archived_idx').on(table.archivedAt),
],
)
@@ -156,7 +155,7 @@ export const webhookDeliveries = pgTable(
operationCount: integer('operation_count').notNull().default(0),
createdCount: integer('created_count').notNull().default(0),
updatedCount: integer('updated_count').notNull().default(0),
- deletedCount: integer('deleted_count').notNull().default(0),
+ archivedCount: integer('archived_count').notNull().default(0),
restoredCount: integer('restored_count').notNull().default(0),
message: text('message'),
receivedAt: timestamp('received_at', { withTimezone: true })
diff --git a/src/lib/admin-labels.ts b/src/lib/admin-labels.ts
index cf4328a..bf4973a 100644
--- a/src/lib/admin-labels.ts
+++ b/src/lib/admin-labels.ts
@@ -21,12 +21,11 @@ export const VISIBILITY_LABELS: Record
@@ -170,11 +170,11 @@ function EndpointSection() {
"fullName": "Gipsz Jakab",
"nickname": "Pitypang",
"avatarUrl": null,
- "membershipStatus": "studio_member",
+ "membershipStatus": "MEMBER",
"isLeadership": false,
"joinedSemester": "2021/2022/1"
}},
- { "op": "delete", "sub": "57" }
+ { "op": "archive", "sub": "57" }
]
}'`}
@@ -183,8 +183,8 @@ function EndpointSection() {
ezen keresztül kapcsolódik a tag a bejelentkezéséhez és a
stáblistákhoz. A
Profilok ({data.summary.active} aktív
- {data.summary.deleted > 0 &&
- `, ${data.summary.deleted} törölt`}
+ {data.summary.archived > 0 &&
+ `, ${data.summary.archived} archivált`}
) — csak olvashatóan
mode: "replace" +{' '}
members alakkal a teljes névsor cserélhető: ami kimarad,
- az törlésre kerül. A x-bss-delivery-id fejléc opcionális;
- ha megadod, ugyanaz a kérés kétszer nem fut le. A{' '}
+ az archiválásra kerül. A x-bss-delivery-id fejléc
+ opcionális; ha megadod, ugyanaz a kérés kétszer nem fut le. A{' '}
joinedSemester alakja ÉÉÉÉ/ÉÉÉÉ/N, ahol{' '}
N 1 (őszi) vagy 2 (tavaszi) félév.
- Betöltés… -
- )} - {listQuery.isError && ( -- Hiba történt az adatok betöltése közben. Próbáld újra később. -
- )} - {listQuery.isSuccess && ( - <> -- {member.fullName} -
- {member.nickname !== null && ( -- „{member.nickname}” -
- )} - - ))} -