From 77c5ef6d1bd469f2c053ba1078abc2fc4b969b88 Mon Sep 17 00:00:00 2001 From: Murad Novruzov <95917545+novruzoff@users.noreply.github.com> Date: Fri, 28 Feb 2025 15:42:27 -0500 Subject: [PATCH 01/14] rebase branch onto main and resolve conflicts --- src/app/(app)/(pages)/about/page.tsx | 122 +++++--------- src/app/(app)/(pages)/about/styles.module.css | 148 +++++++++++++++++ src/globals/AboutPage.ts | 156 ++++++++++++++++++ src/payload-types.ts | 118 +++++++++++++ src/payload.config.ts | 3 +- 5 files changed, 469 insertions(+), 78 deletions(-) create mode 100644 src/app/(app)/(pages)/about/styles.module.css create mode 100644 src/globals/AboutPage.ts diff --git a/src/app/(app)/(pages)/about/page.tsx b/src/app/(app)/(pages)/about/page.tsx index 5cf58f19..68587b15 100644 --- a/src/app/(app)/(pages)/about/page.tsx +++ b/src/app/(app)/(pages)/about/page.tsx @@ -1,96 +1,64 @@ -import TeamSection from "./components/TeamSection"; -import Hr from "../../components/Hr"; -import Image from "next/image"; +import { RefreshRouteOnSave } from "@/app/(app)/components/RefreshRouteOnSave"; +import { Fragment } from "react"; +import { getPayloadClient } from "@/payloadClient"; import { Metadata } from "next"; -import { getPageFromCMS } from "@/lib/getPageFromCMS"; +import { RichText } from "@payloadcms/richtext-lexical/react"; +import { SerializedEditorState } from "@payloadcms/richtext-lexical/lexical"; +import Image from "next/image"; +import Hr from "../../components/Hr"; +import TeamSection from "./components/TeamSection"; +import styles from "./styles.module.css"; -const teams = { - leadership: [ - { role: "Senior Advisor", name: "Charlotte Rotstein", pronouns: "she/they", image: "/team/charlotte.webp" }, - { role: "Co-President", name: "Kristie Lam", pronouns: "she/her", image: "/team/kristie.webp" }, - { role: "Co-President", name: "Abbie Carnahan", pronouns: "she/her", image: "/team/abbie.webp" }, - ], - events: [ - { role: "Events Coordinator", name: "Catherine McCourt ", pronouns: "she/her", image: "/team/catherine.webp" }, - { role: "Events Coordinator", name: "Sandrine Huard", pronouns: "she/her", image: "/team/sandrine.webp" }, - ], - finance: [ - { role: "Sponsorship Coordinator", name: "Julia Rotiroti", pronouns: "she/her", image: "/team/julia.webp" }, - { role: "Finance Coordinator", name: "Christina Huan", pronouns: "she/her", image: "/team/christina.webp" }, - ], - marketing: [ - { role: "Social Media Coordinator", name: "Amanda Borja", pronouns: "she/her" }, - { role: "Marketing & Outreach Coordinator", name: "Paige Metcalf", pronouns: "she/her", image: "/team/paige.webp" }, - { role: "TikTok & Video Content Creator", name: "Naomi Harmel", pronouns: "she/her", image: "/team/naomi.webp" }, - ], - website: [ - { role: "Website Content Creator", name: "Julie Burke", pronouns: "she/her", image: "/team/julie.webp" }, - { role: "Website Developer", name: "Atlas Gong", pronouns: "he/him", image: "/team/atlas.webp" }, - { role: "Website Developer", name: "Murad Novruzov", pronouns: "he/him", image: "/team/murad.webp" }, - ], - content: [ - { role: "Newsletter Content Creator", name: "Gianluca Caporicci", pronouns: "he/him", image: "/team/gianluca.webp" }, - { role: "French Coordinator", name: "Alizée Cyr-Comeault", pronouns: "she/her", image: "/team/alizee.webp" }, - ], - founders: [ - { role: "Founder", name: "Safiia Abdulkadyrova", pronouns: "she/her", image: "/team/safiia-abdulkadyrova.webp" }, - { role: "Founder", name: "Lauren Harrison", pronouns: "she/her", image: "/team/lauren-harrison.webp" }, - { role: "Founder", name: "Hana Jamal", pronouns: "she/her", image: "/team/hana-jamal.webp" }, - ], -}; +export default async function AboutPage() { + const payload = await getPayloadClient(); + const content = await payload.findGlobal({ + slug: "about", + }); -export default function AboutPage() { return ( -
- {/* Group Photo */} -
- MindVista Team -
-
-

MindVista Team 2024-2025

-

Committed to student wellness and engagement.

-
-
- - {/* About Content */} -
-

About MindVista's Initiative

+ + +
+
+ {/* Hero / Group Photo Section */} +
+
+ MindVista Team +
+
+

{content?.title}

+

Committed to student wellness and engagement.

+
+
-

Established in 2023, MindVista emerged from the collaborative as part of the Integrated Management Student Fellowship (IMSF) at McGill University. Rooted in a commitment to enhancing mental wellness, our group functions as a student, volunteer-run initiative that envisions a holistic approach to fostering well-being for every McGill student.

+
-

Dedicated to creating a positive impact on campus mental health, MindVista provides a range of initiatives, including:

+ {/* Introduction and Initiative Details Section */} +
+
+ +
+
+ +
+
-
    -
  • Comprehensive Mental Wellness Resources
  • -
  • Club Directory for Increased Engagement
  • -
  • Weekly Wellness Newsletter
  • -
  • Host Wellness Events
  • -
  • Wellness Challenges and Giveaways with Epic Rewards
  • -
+
-

Join MindVista on our mission to cultivate a campus culture that prioritizes mental wellness and fosters a sense of community among McGill students. Together, let's embark on a journey towards a healthier and more connected student experience.

+ {/* Team Sections */} +
{content?.teams?.map((section: any, index: number) => )}
+
- -
- - {/* Photos sectioned by Team */} - - - - - - - -
+ ); } export async function generateMetadata(): Promise { - const page = await getPageFromCMS("about"); + const page = await getPayloadClient().then((client) => client.findGlobal({ slug: "about" })); return { ...(page && { title: page.title, - description: page.seoDescription, + description: typeof page.introduction === "string" ? page.introduction : "About MindVista", }), }; } diff --git a/src/app/(app)/(pages)/about/styles.module.css b/src/app/(app)/(pages)/about/styles.module.css new file mode 100644 index 00000000..ed8a6bdf --- /dev/null +++ b/src/app/(app)/(pages)/about/styles.module.css @@ -0,0 +1,148 @@ +/* Container & Layout */ +.container { + width: 100%; + margin: 0 auto; + padding: 2rem; +} + +.mainContent { + max-width: 1200px; + margin: 0 auto; +} + +/* Section Styling */ +.section { + margin-bottom: 2rem; + padding: 1rem 0; +} + +/* Hero / Group Photo Section */ +.heroSection { + position: relative; + text-align: center; +} + +.imageWrapper { + width: 100%; + height: auto; + overflow: hidden; + border-radius: 8px; +} + +.heroImage { + width: 100%; + height: auto; + object-fit: cover; + filter: brightness(90%); + transition: + transform 0.5s ease, + filter 0.5s ease; +} + +.heroImage:hover { + transform: scale(1.05); + filter: brightness(100%); +} + +.heroText { + position: absolute; + bottom: 20px; + left: 50%; + transform: translateX(-50%); + color: #fff; + text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); +} + +.title { + font-size: 2.5rem; + font-weight: bold; + margin: 0; +} + +.subtitle { + font-size: 1.25rem; +} + +/* Horizontal Rule */ +.hr { + margin: 2rem auto; + width: 75%; + border: none; + border-top: 1px solid #ccc; +} + +/* Rich Text / Content */ +.textContent { + margin-bottom: 1.5rem; + font-size: 1rem; + line-height: 1.6; + color: #333; +} + +/* Card for Team Sections */ +.card { + background: #fff; + padding: 1rem; + border-radius: 8px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + margin-bottom: 2rem; +} + +.cardTitle { + font-size: 2rem; + font-weight: bold; + margin-bottom: 1rem; + text-align: center; +} + +/* Team Grid */ +.teamGrid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 1rem; +} + +/* Team Member Card */ +.teamMember { + text-align: center; + background: #f8f8f8; + padding: 1rem; + border-radius: 8px; +} + +/* Team Member Image */ +.teamImageWrapper { + width: 150px; + height: 150px; + margin: 0 auto 1rem; + overflow: hidden; + border-radius: 50%; +} + +.teamImage { + width: 100%; + height: 100%; + object-fit: cover; +} + +/* Team Member Info */ +.teamInfo { + font-size: 1rem; +} + +.teamName { + font-size: 1.25rem; + font-weight: bold; + margin-bottom: 0.25rem; +} + +.teamPronouns { + font-size: 0.9rem; + font-style: italic; + margin-left: 0.5rem; +} + +.teamRole { + font-size: 1rem; + color: #666; +} diff --git a/src/globals/AboutPage.ts b/src/globals/AboutPage.ts new file mode 100644 index 00000000..24b8ecc3 --- /dev/null +++ b/src/globals/AboutPage.ts @@ -0,0 +1,156 @@ +import type { GlobalConfig } from "payload"; +import { canEditContent, canEditFrenchContent, denyAccessField } from "@lib/access"; +import { revalidatePath } from "next/cache"; + +export const AboutPage: GlobalConfig = { + slug: "about", + admin: { + group: "Static Content", + preview: () => `${process.env.NEXT_PUBLIC_SERVER_URL}/about`, + livePreview: { + url: `${process.env.NEXT_PUBLIC_SERVER_URL}/about`, + }, + }, + versions: { + max: 25, + drafts: true, + }, + hooks: { + // Revalidate page on "save" + afterChange: [ + () => { + revalidatePath("/about"); + }, + ], + }, + fields: [ + { + name: "page", + required: true, + type: "relationship", + relationTo: "pages", + access: { + update: denyAccessField, + }, + }, + { + name: "groupPhoto", + label: "Group Photo", + type: "upload", + relationTo: "media", + required: true, + access: { + update: canEditContent, + }, + }, + { + name: "title", + label: "Page Title", + type: "text", + required: true, + access: { + update: canEditContent, + }, + }, + { + name: "introduction", + label: "Introduction - En", + type: "richText", + required: true, + access: { + update: canEditContent, + }, + }, + { + name: "introductionFr", + label: "Introduction - Fr", + type: "richText", + required: false, + access: { + read: canEditFrenchContent, + update: canEditFrenchContent, + }, + }, + { + name: "initiativeDetails", + label: "Initiative Details - En", + type: "richText", + required: true, + access: { + update: canEditContent, + }, + }, + { + name: "initiativeDetailsFr", + label: "Initiative Details - Fr", + type: "richText", + required: false, + access: { + read: canEditFrenchContent, + update: canEditFrenchContent, + }, + }, + { + name: "teams", + label: "Team Sections", + type: "array", + required: true, + fields: [ + { + name: "title", + label: "Team Section Title", + type: "text", + required: true, + access: { + update: canEditContent, + }, + }, + { + name: "members", + label: "Team Members", + type: "array", + required: true, + fields: [ + { + name: "role", + label: "Role", + type: "text", + required: true, + access: { + update: canEditContent, + }, + }, + { + name: "name", + label: "Name", + type: "text", + required: true, + access: { + update: canEditContent, + }, + }, + { + name: "pronouns", + label: "Pronouns", + type: "text", + required: false, + access: { + update: canEditContent, + }, + }, + { + name: "image", + label: "Profile Image", + type: "upload", + relationTo: "media", + required: false, + access: { + update: canEditContent, + }, + }, + ], + }, + ], + }, + ], +}; diff --git a/src/payload-types.ts b/src/payload-types.ts index d8b43390..063234ac 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -105,12 +105,14 @@ export interface Config { defaultIDType: number; }; globals: { + about: About; 'holistic-wellness': HolisticWellness; sponsor: Sponsor; volunteer: Volunteer; 'announcement-bar': AnnouncementBar; }; globalsSelect: { + about: AboutSelect | AboutSelect; 'holistic-wellness': HolisticWellnessSelect | HolisticWellnessSelect; sponsor: SponsorSelect | SponsorSelect; volunteer: VolunteerSelect | VolunteerSelect; @@ -789,6 +791,90 @@ export interface PayloadMigrationsSelect { updatedAt?: T; createdAt?: T; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "about". + */ +export interface About { + id: number; + page: number | Page; + groupPhoto: number | Media; + title: string; + introduction: { + root: { + type: string; + children: { + type: string; + version: number; + [k: string]: unknown; + }[]; + direction: ('ltr' | 'rtl') | null; + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; + indent: number; + version: number; + }; + [k: string]: unknown; + }; + introductionFr?: { + root: { + type: string; + children: { + type: string; + version: number; + [k: string]: unknown; + }[]; + direction: ('ltr' | 'rtl') | null; + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; + indent: number; + version: number; + }; + [k: string]: unknown; + } | null; + initiativeDetails: { + root: { + type: string; + children: { + type: string; + version: number; + [k: string]: unknown; + }[]; + direction: ('ltr' | 'rtl') | null; + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; + indent: number; + version: number; + }; + [k: string]: unknown; + }; + initiativeDetailsFr?: { + root: { + type: string; + children: { + type: string; + version: number; + [k: string]: unknown; + }[]; + direction: ('ltr' | 'rtl') | null; + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; + indent: number; + version: number; + }; + [k: string]: unknown; + } | null; + teams: { + title: string; + members: { + role: string; + name: string; + pronouns?: string | null; + image?: (number | null) | Media; + id?: string | null; + }[]; + id?: string | null; + }[]; + _status?: ('draft' | 'published') | null; + updatedAt?: string | null; + createdAt?: string | null; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "holistic-wellness". @@ -1065,6 +1151,38 @@ export interface AnnouncementBar { updatedAt?: string | null; createdAt?: string | null; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "about_select". + */ +export interface AboutSelect { + page?: T; + groupPhoto?: T; + title?: T; + introduction?: T; + introductionFr?: T; + initiativeDetails?: T; + initiativeDetailsFr?: T; + teams?: + | T + | { + title?: T; + members?: + | T + | { + role?: T; + name?: T; + pronouns?: T; + image?: T; + id?: T; + }; + id?: T; + }; + _status?: T; + updatedAt?: T; + createdAt?: T; + globalType?: T; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "holistic-wellness_select". diff --git a/src/payload.config.ts b/src/payload.config.ts index ceb694dd..19a71ca7 100644 --- a/src/payload.config.ts +++ b/src/payload.config.ts @@ -16,6 +16,7 @@ import { Users } from "@collections/Users"; import { Media } from "@collections/Media"; import { Pages } from "@collections/Pages"; import { LegalPages } from "@collections/LegalPages"; +import { AboutPage } from "@globals/AboutPage"; import { HolisticWellnessPage } from "@globals/HolisticWellnessPage"; import { Clubs } from "./collections/lists/clubs/Clubs"; import { Resources } from "./collections/lists/resources/Resources"; @@ -118,7 +119,7 @@ export default buildConfig({ avatar: "default", }, collections: [Users, Media, Pages, LegalPages, Events, Clubs, Resources, ClubTagCategories, ResourceTagCategories, ClubTags, ResourceTags], - globals: [HolisticWellnessPage, SponsorPage, VolunteerPage, AnnouncementBar], + globals: [AboutPage, HolisticWellnessPage, SponsorPage, VolunteerPage, AnnouncementBar], editor: lexicalEditor(), secret: process.env.PAYLOAD_SECRET || "", typescript: { From 45a47035999cbbf3db34bb3ee8520292e27619e3 Mon Sep 17 00:00:00 2001 From: novruzoff Date: Tue, 25 Mar 2025 01:58:40 -0400 Subject: [PATCH 02/14] feat(cms): about page and corresponding css fixed --- src/app/(app)/(pages)/about/page.tsx | 33 ++-- src/app/(app)/(pages)/about/styles.module.css | 178 ++++++------------ 2 files changed, 74 insertions(+), 137 deletions(-) diff --git a/src/app/(app)/(pages)/about/page.tsx b/src/app/(app)/(pages)/about/page.tsx index 68587b15..ec92259d 100644 --- a/src/app/(app)/(pages)/about/page.tsx +++ b/src/app/(app)/(pages)/about/page.tsx @@ -1,5 +1,6 @@ import { RefreshRouteOnSave } from "@/app/(app)/components/RefreshRouteOnSave"; import { Fragment } from "react"; +import { getPageFromCMS } from "@/lib/getPageFromCMS"; import { getPayloadClient } from "@/payloadClient"; import { Metadata } from "next"; import { RichText } from "@payloadcms/richtext-lexical/react"; @@ -10,43 +11,47 @@ import TeamSection from "./components/TeamSection"; import styles from "./styles.module.css"; export default async function AboutPage() { - const payload = await getPayloadClient(); - const content = await payload.findGlobal({ - slug: "about", - }); + // Fetch the global "about" content from Payload + const content = await (await getPayloadClient()).findGlobal({ slug: "about" }); return (
- {/* Hero / Group Photo Section */} + {/* Hero Section */}
MindVista Team
-
+

{content?.title}

Committed to student wellness and engagement.

-
+
- {/* Introduction and Initiative Details Section */} + {/* Introduction Section */}
- +
+
+ +
+ + {/* Initiative Details Section */} +
- +
-
+
{/* Team Sections */} -
{content?.teams?.map((section: any, index: number) => )}
+
{content?.teams?.map((team: any, index: number) => )}
@@ -54,11 +59,11 @@ export default async function AboutPage() { } export async function generateMetadata(): Promise { - const page = await getPayloadClient().then((client) => client.findGlobal({ slug: "about" })); + const page = await getPageFromCMS("about"); return { ...(page && { title: page.title, - description: typeof page.introduction === "string" ? page.introduction : "About MindVista", + description: page.seoDescription, }), }; } diff --git a/src/app/(app)/(pages)/about/styles.module.css b/src/app/(app)/(pages)/about/styles.module.css index ed8a6bdf..4d78e5bd 100644 --- a/src/app/(app)/(pages)/about/styles.module.css +++ b/src/app/(app)/(pages)/about/styles.module.css @@ -1,148 +1,80 @@ -/* Container & Layout */ +/* styles.module.css */ + +/* + .container: + - Centers content with a max-width. + - Uses fixed rem-based padding to ensure consistent spacing. +*/ .container { - width: 100%; - margin: 0 auto; - padding: 2rem; + @apply mx-auto max-w-7xl px-6 pb-12 pt-20; } +/* + .mainContent: + - Acts as a wrapper for the page’s main content. + */ .mainContent { - max-width: 1200px; - margin: 0 auto; + @apply relative; } -/* Section Styling */ +/* + .section: + - Provides vertical spacing between sections. + - Previously, a vw-based margin was used (mx-[3vw]); now replaced with fixed rem spacing (mx-4) + for consistency across screen sizes. + */ .section { - margin-bottom: 2rem; - padding: 1rem 0; + @apply mx-4 pb-16; } -/* Hero / Group Photo Section */ +/* + .heroSection: + - Specific padding for the hero section. + - Uses responsive top and bottom padding (pt-10 md:pt-16, pb-10 md:pb-20) defined in rem. + */ .heroSection { - position: relative; - text-align: center; + @apply pb-10 pt-10 md:pb-20 md:pt-16; } +/* + .imageWrapper: + - Styles the container of the hero image. + - Ensures the image is clipped with rounded corners and has a shadow. + */ .imageWrapper { - width: 100%; - height: auto; - overflow: hidden; - border-radius: 8px; + @apply relative overflow-hidden rounded-xl shadow-lg; } +/* + .heroImage: + - Ensures the hero image covers its container, with smooth scaling transitions. + */ .heroImage { - width: 100%; - height: auto; - object-fit: cover; - filter: brightness(90%); - transition: - transform 0.5s ease, - filter 0.5s ease; -} - -.heroImage:hover { - transform: scale(1.05); - filter: brightness(100%); + @apply object-cover transition-transform duration-500; } -.heroText { - position: absolute; - bottom: 20px; - left: 50%; - transform: translateX(-50%); - color: #fff; - text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); +/* + .textContent: + - Adds consistent vertical spacing between text blocks. + */ +.textContent { + @apply space-y-4; } +/* + .title: + - Sets the page title with a bold, centered text style. + - Uses rem-based font sizes (text-3xl) and margin (mb-4) to remain consistent. + */ .title { - font-size: 2.5rem; - font-weight: bold; - margin: 0; + @apply mb-4 text-center text-3xl font-bold; } +/* + .subtitle: + - Sets the subtitle styling using a base font size. + - The text color uses a custom variable (text-cTextOffset) defined in your Tailwind config. + */ .subtitle { - font-size: 1.25rem; -} - -/* Horizontal Rule */ -.hr { - margin: 2rem auto; - width: 75%; - border: none; - border-top: 1px solid #ccc; -} - -/* Rich Text / Content */ -.textContent { - margin-bottom: 1.5rem; - font-size: 1rem; - line-height: 1.6; - color: #333; -} - -/* Card for Team Sections */ -.card { - background: #fff; - padding: 1rem; - border-radius: 8px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); - margin-bottom: 2rem; -} - -.cardTitle { - font-size: 2rem; - font-weight: bold; - margin-bottom: 1rem; - text-align: center; -} - -/* Team Grid */ -.teamGrid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 1rem; -} - -/* Team Member Card */ -.teamMember { - text-align: center; - background: #f8f8f8; - padding: 1rem; - border-radius: 8px; -} - -/* Team Member Image */ -.teamImageWrapper { - width: 150px; - height: 150px; - margin: 0 auto 1rem; - overflow: hidden; - border-radius: 50%; -} - -.teamImage { - width: 100%; - height: 100%; - object-fit: cover; -} - -/* Team Member Info */ -.teamInfo { - font-size: 1rem; -} - -.teamName { - font-size: 1.25rem; - font-weight: bold; - margin-bottom: 0.25rem; -} - -.teamPronouns { - font-size: 0.9rem; - font-style: italic; - margin-left: 0.5rem; -} - -.teamRole { - font-size: 1rem; - color: #666; + @apply text-center text-base text-cTextOffset; } From 3526b81f3e53ef417f7967027f09f32fa4567aaa Mon Sep 17 00:00:00 2001 From: novruzoff Date: Thu, 27 Mar 2025 14:28:59 -0400 Subject: [PATCH 03/14] fix: add fr support and caption for group photo --- src/globals/AboutPage.ts | 48 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/globals/AboutPage.ts b/src/globals/AboutPage.ts index 24b8ecc3..36efb844 100644 --- a/src/globals/AboutPage.ts +++ b/src/globals/AboutPage.ts @@ -16,7 +16,6 @@ export const AboutPage: GlobalConfig = { drafts: true, }, hooks: { - // Revalidate page on "save" afterChange: [ () => { revalidatePath("/about"); @@ -43,15 +42,36 @@ export const AboutPage: GlobalConfig = { update: canEditContent, }, }, + { + // From requested changes: caption for group photo added + name: "groupPhotoCaption", + label: "Group Photo Caption", + type: "text", + required: false, + access: { + update: canEditContent, + }, + }, { name: "title", - label: "Page Title", + label: "Page Title (EN)", type: "text", required: true, access: { update: canEditContent, }, }, + { + // // From requested changes: fr support added + name: "titleFr", + label: "Page Title (FR)", + type: "text", + required: false, + access: { + read: canEditFrenchContent, + update: canEditFrenchContent, + }, + }, { name: "introduction", label: "Introduction - En", @@ -98,13 +118,23 @@ export const AboutPage: GlobalConfig = { fields: [ { name: "title", - label: "Team Section Title", + label: "Team Section Title (EN)", type: "text", required: true, access: { update: canEditContent, }, }, + { + name: "titleFr", + label: "Team Section Title (FR)", + type: "text", + required: false, + access: { + read: canEditFrenchContent, + update: canEditFrenchContent, + }, + }, { name: "members", label: "Team Members", @@ -113,13 +143,23 @@ export const AboutPage: GlobalConfig = { fields: [ { name: "role", - label: "Role", + label: "Role (EN)", type: "text", required: true, access: { update: canEditContent, }, }, + { + name: "roleFr", + label: "Role (FR)", + type: "text", + required: false, + access: { + read: canEditFrenchContent, + update: canEditFrenchContent, + }, + }, { name: "name", label: "Name", From 20488a28eac83fe6827728a077f92bd0e3c414a6 Mon Sep 17 00:00:00 2001 From: novruzoff Date: Thu, 27 Mar 2025 14:34:40 -0400 Subject: [PATCH 04/14] feat(cms): payload-types now support optional caption and fr title --- src/payload-types.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/payload-types.ts b/src/payload-types.ts index 063234ac..e0e61e80 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -799,7 +799,9 @@ export interface About { id: number; page: number | Page; groupPhoto: number | Media; + groupPhotoCaption?: string | null; title: string; + titleFr?: string | null; introduction: { root: { type: string; @@ -862,8 +864,10 @@ export interface About { } | null; teams: { title: string; + titleFr?: string | null; members: { role: string; + roleFr?: string | null; name: string; pronouns?: string | null; image?: (number | null) | Media; @@ -1158,7 +1162,9 @@ export interface AnnouncementBar { export interface AboutSelect { page?: T; groupPhoto?: T; + groupPhotoCaption?: T; title?: T; + titleFr?: T; introduction?: T; introductionFr?: T; initiativeDetails?: T; @@ -1167,10 +1173,12 @@ export interface AboutSelect { | T | { title?: T; + titleFr?: T; members?: | T | { role?: T; + roleFr?: T; name?: T; pronouns?: T; image?: T; From 83983c436c8090eab8ee8a953eb25a75674dfb7c Mon Sep 17 00:00:00 2001 From: novruzoff Date: Fri, 28 Mar 2025 20:17:06 -0400 Subject: [PATCH 05/14] refactor: format files with prettier --- src/globals/AboutPage.ts | 342 +++++++++++++++++++-------------------- 1 file changed, 171 insertions(+), 171 deletions(-) diff --git a/src/globals/AboutPage.ts b/src/globals/AboutPage.ts index 36efb844..b289f04e 100644 --- a/src/globals/AboutPage.ts +++ b/src/globals/AboutPage.ts @@ -3,194 +3,194 @@ import { canEditContent, canEditFrenchContent, denyAccessField } from "@lib/acce import { revalidatePath } from "next/cache"; export const AboutPage: GlobalConfig = { - slug: "about", - admin: { - group: "Static Content", - preview: () => `${process.env.NEXT_PUBLIC_SERVER_URL}/about`, - livePreview: { - url: `${process.env.NEXT_PUBLIC_SERVER_URL}/about`, - }, - }, - versions: { - max: 25, - drafts: true, - }, - hooks: { - afterChange: [ - () => { - revalidatePath("/about"); - }, - ], - }, - fields: [ - { - name: "page", - required: true, - type: "relationship", - relationTo: "pages", - access: { - update: denyAccessField, - }, - }, - { - name: "groupPhoto", - label: "Group Photo", - type: "upload", - relationTo: "media", - required: true, - access: { - update: canEditContent, - }, - }, - { - // From requested changes: caption for group photo added - name: "groupPhotoCaption", - label: "Group Photo Caption", - type: "text", - required: false, - access: { - update: canEditContent, - }, - }, - { - name: "title", - label: "Page Title (EN)", - type: "text", - required: true, - access: { - update: canEditContent, - }, - }, - { - // // From requested changes: fr support added - name: "titleFr", - label: "Page Title (FR)", - type: "text", - required: false, - access: { - read: canEditFrenchContent, - update: canEditFrenchContent, - }, - }, - { - name: "introduction", - label: "Introduction - En", - type: "richText", - required: true, - access: { - update: canEditContent, - }, - }, - { - name: "introductionFr", - label: "Introduction - Fr", - type: "richText", - required: false, - access: { - read: canEditFrenchContent, - update: canEditFrenchContent, - }, + slug: "about", + admin: { + group: "Static Content", + preview: () => `${process.env.NEXT_PUBLIC_SERVER_URL}/about`, + livePreview: { + url: `${process.env.NEXT_PUBLIC_SERVER_URL}/about`, + }, }, - { - name: "initiativeDetails", - label: "Initiative Details - En", - type: "richText", - required: true, - access: { - update: canEditContent, - }, + versions: { + max: 25, + drafts: true, }, - { - name: "initiativeDetailsFr", - label: "Initiative Details - Fr", - type: "richText", - required: false, - access: { - read: canEditFrenchContent, - update: canEditFrenchContent, - }, + hooks: { + afterChange: [ + () => { + revalidatePath("/about"); + }, + ], }, - { - name: "teams", - label: "Team Sections", - type: "array", - required: true, - fields: [ + fields: [ { - name: "title", - label: "Team Section Title (EN)", - type: "text", - required: true, - access: { - update: canEditContent, - }, + name: "page", + required: true, + type: "relationship", + relationTo: "pages", + access: { + update: denyAccessField, + }, }, { - name: "titleFr", - label: "Team Section Title (FR)", - type: "text", - required: false, - access: { - read: canEditFrenchContent, - update: canEditFrenchContent, - }, + name: "groupPhoto", + label: "Group Photo", + type: "upload", + relationTo: "media", + required: true, + access: { + update: canEditContent, + }, }, { - name: "members", - label: "Team Members", - type: "array", - required: true, - fields: [ - { - name: "role", - label: "Role (EN)", - type: "text", - required: true, - access: { + // From requested changes: caption for group photo added + name: "groupPhotoCaption", + label: "Group Photo Caption", + type: "text", + required: false, + access: { update: canEditContent, - }, }, - { - name: "roleFr", - label: "Role (FR)", - type: "text", - required: false, - access: { + }, + { + name: "title", + label: "Page Title (EN)", + type: "text", + required: true, + access: { + update: canEditContent, + }, + }, + { + // // From requested changes: fr support added + name: "titleFr", + label: "Page Title (FR)", + type: "text", + required: false, + access: { read: canEditFrenchContent, update: canEditFrenchContent, - }, }, - { - name: "name", - label: "Name", - type: "text", - required: true, - access: { + }, + { + name: "introduction", + label: "Introduction - En", + type: "richText", + required: true, + access: { update: canEditContent, - }, }, - { - name: "pronouns", - label: "Pronouns", - type: "text", - required: false, - access: { - update: canEditContent, - }, + }, + { + name: "introductionFr", + label: "Introduction - Fr", + type: "richText", + required: false, + access: { + read: canEditFrenchContent, + update: canEditFrenchContent, }, - { - name: "image", - label: "Profile Image", - type: "upload", - relationTo: "media", - required: false, - access: { + }, + { + name: "initiativeDetails", + label: "Initiative Details - En", + type: "richText", + required: true, + access: { update: canEditContent, - }, }, - ], }, - ], - }, - ], + { + name: "initiativeDetailsFr", + label: "Initiative Details - Fr", + type: "richText", + required: false, + access: { + read: canEditFrenchContent, + update: canEditFrenchContent, + }, + }, + { + name: "teams", + label: "Team Sections", + type: "array", + required: true, + fields: [ + { + name: "title", + label: "Team Section Title (EN)", + type: "text", + required: true, + access: { + update: canEditContent, + }, + }, + { + name: "titleFr", + label: "Team Section Title (FR)", + type: "text", + required: false, + access: { + read: canEditFrenchContent, + update: canEditFrenchContent, + }, + }, + { + name: "members", + label: "Team Members", + type: "array", + required: true, + fields: [ + { + name: "role", + label: "Role (EN)", + type: "text", + required: true, + access: { + update: canEditContent, + }, + }, + { + name: "roleFr", + label: "Role (FR)", + type: "text", + required: false, + access: { + read: canEditFrenchContent, + update: canEditFrenchContent, + }, + }, + { + name: "name", + label: "Name", + type: "text", + required: true, + access: { + update: canEditContent, + }, + }, + { + name: "pronouns", + label: "Pronouns", + type: "text", + required: false, + access: { + update: canEditContent, + }, + }, + { + name: "image", + label: "Profile Image", + type: "upload", + relationTo: "media", + required: false, + access: { + update: canEditContent, + }, + }, + ], + }, + ], + }, + ], }; From ac38645a0ea4fd5dc2341bf2d962f036d49952ec Mon Sep 17 00:00:00 2001 From: novruzoff Date: Fri, 28 Mar 2025 20:25:18 -0400 Subject: [PATCH 06/14] fix: change the column name in migration --- src/migrations/20250403_154007_remove_root.json | 4 ++-- src/migrations/20250403_154007_remove_root.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/migrations/20250403_154007_remove_root.json b/src/migrations/20250403_154007_remove_root.json index da498d03..1f24d027 100644 --- a/src/migrations/20250403_154007_remove_root.json +++ b/src/migrations/20250403_154007_remove_root.json @@ -195,8 +195,8 @@ "primaryKey": false, "notNull": false }, - "thumbnail_u_r_l": { - "name": "thumbnail_u_r_l", + "thumbnail_url": { + "name": "thumbnail_url", "type": "varchar", "primaryKey": false, "notNull": false diff --git a/src/migrations/20250403_154007_remove_root.ts b/src/migrations/20250403_154007_remove_root.ts index 9c4bd6d3..8e704fdb 100644 --- a/src/migrations/20250403_154007_remove_root.ts +++ b/src/migrations/20250403_154007_remove_root.ts @@ -79,7 +79,7 @@ export async function up({ db, payload, req }: MigrateUpArgs): Promise { "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, "url" varchar, - "thumbnail_u_r_l" varchar, + "thumbnail_url" varchar, "filename" varchar, "mime_type" varchar, "filesize" numeric, From 33a92f7cce7fc296d9c7ef72937cd240e856fb9e Mon Sep 17 00:00:00 2001 From: novruzoff Date: Mon, 31 Mar 2025 17:44:43 -0400 Subject: [PATCH 07/14] feat(cms): about page structure and css laid out --- src/app/(app)/(pages)/about/page.tsx | 69 +++++++-- src/app/(app)/(pages)/about/styles.module.css | 134 +++++++++++------- src/globals/AboutPage.ts | 4 +- src/payload-types.ts | 2 +- 4 files changed, 143 insertions(+), 66 deletions(-) diff --git a/src/app/(app)/(pages)/about/page.tsx b/src/app/(app)/(pages)/about/page.tsx index ec92259d..86187ace 100644 --- a/src/app/(app)/(pages)/about/page.tsx +++ b/src/app/(app)/(pages)/about/page.tsx @@ -1,18 +1,66 @@ import { RefreshRouteOnSave } from "@/app/(app)/components/RefreshRouteOnSave"; import { Fragment } from "react"; -import { getPageFromCMS } from "@/lib/getPageFromCMS"; import { getPayloadClient } from "@/payloadClient"; import { Metadata } from "next"; import { RichText } from "@payloadcms/richtext-lexical/react"; import { SerializedEditorState } from "@payloadcms/richtext-lexical/lexical"; import Image from "next/image"; import Hr from "../../components/Hr"; -import TeamSection from "./components/TeamSection"; import styles from "./styles.module.css"; +/** + * Types for Payload global data. + * - groupPhoto can be either a number (ID) or an object with a URL. + */ +interface TeamMember { + role: string; + name: string; + pronouns?: string; + image?: string; +} + +interface TeamSectionData { + title: string; + members: TeamMember[]; +} + +interface AboutContent { + groupPhoto?: { url: string } | number; + title?: string; + introduction?: SerializedEditorState; + initiativeDetails?: SerializedEditorState; + teams?: TeamSectionData[]; + // Note: seoDescription is not defined on the global schema, so we use a fallback. +} + +/** + * Inline TeamSection component. + */ +function TeamSection({ title, members }: TeamSectionData) { + return ( +
+

{title}

+
+ {members.map((member) => ( +
+
+ {member.name} +
+
+

{member.name}

+ {member.pronouns && ({member.pronouns})} +

{member.role}

+
+
+ ))} +
+
+ ); +} + export default async function AboutPage() { // Fetch the global "about" content from Payload - const content = await (await getPayloadClient()).findGlobal({ slug: "about" }); + const content = (await (await getPayloadClient()).findGlobal({ slug: "about" })) as AboutContent | null; return ( @@ -21,12 +69,11 @@ export default async function AboutPage() {
{/* Hero Section */}
-
+
MindVista Team

{content?.title}

-

Committed to student wellness and engagement.

@@ -51,7 +98,7 @@ export default async function AboutPage() {
{/* Team Sections */} -
{content?.teams?.map((team: any, index: number) => )}
+ {content?.teams?.map((team, index) => )}
@@ -59,11 +106,11 @@ export default async function AboutPage() { } export async function generateMetadata(): Promise { - const page = await getPageFromCMS("about"); + // Here we cast page as any to allow for seoDescription fallback, + // since the global might not include that property. + const page = await getPayloadClient().then((client) => client.findGlobal({ slug: "about" })); return { - ...(page && { - title: page.title, - description: page.seoDescription, - }), + title: page?.title || "About MindVista", + description: (page as any)?.seoDescription || "Committed to student wellness and engagement.", }; } diff --git a/src/app/(app)/(pages)/about/styles.module.css b/src/app/(app)/(pages)/about/styles.module.css index 4d78e5bd..089b7d68 100644 --- a/src/app/(app)/(pages)/about/styles.module.css +++ b/src/app/(app)/(pages)/about/styles.module.css @@ -1,80 +1,110 @@ -/* styles.module.css */ - -/* - .container: - - Centers content with a max-width. - - Uses fixed rem-based padding to ensure consistent spacing. -*/ +/* Container for the entire page */ .container { @apply mx-auto max-w-7xl px-6 pb-12 pt-20; } -/* - .mainContent: - - Acts as a wrapper for the page’s main content. - */ +/* Main content wrapper */ .mainContent { @apply relative; } -/* - .section: - - Provides vertical spacing between sections. - - Previously, a vw-based margin was used (mx-[3vw]); now replaced with fixed rem spacing (mx-4) - for consistency across screen sizes. - */ +/* Section spacing */ .section { - @apply mx-4 pb-16; + @apply mb-16; } -/* - .heroSection: - - Specific padding for the hero section. - - Uses responsive top and bottom padding (pt-10 md:pt-16, pb-10 md:pb-20) defined in rem. - */ +/* Hero Section styles */ .heroSection { - @apply pb-10 pt-10 md:pb-20 md:pt-16; + /* Additional adjustments if needed can be added here */ } -/* - .imageWrapper: - - Styles the container of the hero image. - - Ensures the image is clipped with rounded corners and has a shadow. - */ -.imageWrapper { - @apply relative overflow-hidden rounded-xl shadow-lg; +/* Wrapper for the hero image (group photo container) */ +.heroImageWrapper { + @apply relative mb-16 aspect-[16/9] w-full overflow-hidden rounded-xl shadow-lg transition-all duration-300; } -/* - .heroImage: - - Ensures the hero image covers its container, with smooth scaling transitions. - */ +/* Hero image styling */ .heroImage { - @apply object-cover transition-transform duration-500; + @apply h-full w-full object-cover brightness-90 transition-transform duration-500 group-hover:scale-105 group-hover:brightness-100; } -/* - .textContent: - - Adds consistent vertical spacing between text blocks. - */ +/* Text content container for various sections */ .textContent { @apply space-y-4; } -/* - .title: - - Sets the page title with a bold, centered text style. - - Uses rem-based font sizes (text-3xl) and margin (mb-4) to remain consistent. - */ +/* Page title styling */ .title { - @apply mb-4 text-center text-3xl font-bold; + @apply mb-4 bg-gradient-to-r from-purple-500 to-blue-400 bg-clip-text text-center text-3xl font-bold text-transparent md:text-4xl dark:from-purple-400 dark:to-blue-300; } -/* - .subtitle: - - Sets the subtitle styling using a base font size. - - The text color uses a custom variable (text-cTextOffset) defined in your Tailwind config. - */ +/* Subtitle styling */ .subtitle { - @apply text-center text-base text-cTextOffset; + @apply text-base font-medium leading-relaxed text-cTextOffset; +} + +/* ------------------- */ +/* Team Section Styles */ +/* ------------------- */ + +/* Container for each team section */ +.teamSection { + @apply mb-16; +} + +/* Team section title styling */ +.teamTitle { + @apply mb-8 text-center text-3xl font-bold text-cText; +} + +/* Grid layout for team member cards */ +.teamGrid { + @apply flex flex-wrap justify-center gap-8; +} + +/* Individual team card styling */ +.teamCard { + @apply flex w-full flex-col items-center rounded-xl bg-cBackgroundOffset p-6 text-center shadow-lg; +} + +@media (min-width: 640px) { + .teamCard { + width: calc(50% - 1rem); + } +} + +@media (min-width: 1024px) { + .teamCard { + width: calc(33.333% - 1rem); + } +} + +/* Wrapper for the team member image */ +.teamImageWrapper { + @apply mb-4 h-40 w-40 overflow-hidden rounded-full; +} + +/* Team member image styling */ +.teamImage { + @apply h-full w-full object-cover; +} + +/* Container for team member information */ +.memberInfo { + @apply flex flex-col items-center; +} + +/* Team member name styling */ +.memberName { + @apply text-xl font-semibold text-cText; +} + +/* Team member pronouns styling */ +.memberPronouns { + @apply ml-1 text-sm italic text-cTextOffset; +} + +/* Team member role styling */ +.memberRole { + @apply font-medium text-cTextOffset; } diff --git a/src/globals/AboutPage.ts b/src/globals/AboutPage.ts index b289f04e..f6f27d6d 100644 --- a/src/globals/AboutPage.ts +++ b/src/globals/AboutPage.ts @@ -29,7 +29,7 @@ export const AboutPage: GlobalConfig = { type: "relationship", relationTo: "pages", access: { - update: denyAccessField, + update: canEditContent, }, }, { @@ -37,7 +37,7 @@ export const AboutPage: GlobalConfig = { label: "Group Photo", type: "upload", relationTo: "media", - required: true, + required: false, access: { update: canEditContent, }, diff --git a/src/payload-types.ts b/src/payload-types.ts index e0e61e80..cf1e065b 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -798,7 +798,7 @@ export interface PayloadMigrationsSelect { export interface About { id: number; page: number | Page; - groupPhoto: number | Media; + groupPhoto?: (number | null) | Media; groupPhotoCaption?: string | null; title: string; titleFr?: string | null; From c834b3de36874f03e05df4b32a2e6ae4c5223020 Mon Sep 17 00:00:00 2001 From: novruzoff Date: Sat, 5 Apr 2025 20:17:58 -0400 Subject: [PATCH 08/14] feat(cms): transfer group photo section to payload --- src/app/(app)/(pages)/about/page.tsx | 29 +++++++++++-------- src/app/(app)/(pages)/about/styles.module.css | 20 +++++++++++++ 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/app/(app)/(pages)/about/page.tsx b/src/app/(app)/(pages)/about/page.tsx index 86187ace..e566f865 100644 --- a/src/app/(app)/(pages)/about/page.tsx +++ b/src/app/(app)/(pages)/about/page.tsx @@ -9,8 +9,8 @@ import Hr from "../../components/Hr"; import styles from "./styles.module.css"; /** - * Types for Payload global data. - * - groupPhoto can be either a number (ID) or an object with a URL. + * Types for the Payload global "about" content. + * - groupPhoto is now required and expected to be an object with a URL. */ interface TeamMember { role: string; @@ -25,16 +25,15 @@ interface TeamSectionData { } interface AboutContent { - groupPhoto?: { url: string } | number; + groupPhoto: { url: string }; title?: string; introduction?: SerializedEditorState; initiativeDetails?: SerializedEditorState; teams?: TeamSectionData[]; - // Note: seoDescription is not defined on the global schema, so we use a fallback. } /** - * Inline TeamSection component. + * Inline TeamSection component – purely presentational. */ function TeamSection({ title, members }: TeamSectionData) { return ( @@ -62,6 +61,11 @@ export default async function AboutPage() { // Fetch the global "about" content from Payload const content = (await (await getPayloadClient()).findGlobal({ slug: "about" })) as AboutContent | null; + // If no content or group photo is found, display an error message. + if (!content || !content.groupPhoto || !content.groupPhoto.url) { + return
Error: Group photo is not set in Payload.
; + } + return ( @@ -69,11 +73,14 @@ export default async function AboutPage() {
{/* Hero Section */}
-
- MindVista Team -
-
-

{content?.title}

+ {/* Add "group" class here so children can use group-hover */} +
+ MindVista Team +
+
+

MindVista Team 2024-2025

+

Committed to student wellness and engagement.

+
@@ -106,8 +113,6 @@ export default async function AboutPage() { } export async function generateMetadata(): Promise { - // Here we cast page as any to allow for seoDescription fallback, - // since the global might not include that property. const page = await getPayloadClient().then((client) => client.findGlobal({ slug: "about" })); return { title: page?.title || "About MindVista", diff --git a/src/app/(app)/(pages)/about/styles.module.css b/src/app/(app)/(pages)/about/styles.module.css index 089b7d68..88b5e9ef 100644 --- a/src/app/(app)/(pages)/about/styles.module.css +++ b/src/app/(app)/(pages)/about/styles.module.css @@ -28,6 +28,26 @@ @apply h-full w-full object-cover brightness-90 transition-transform duration-500 group-hover:scale-105 group-hover:brightness-100; } +/* Purple-to-blue overlay that appears on hover */ +.heroOverlay { + @apply absolute inset-0 bg-gradient-to-r from-purple-500/20 to-blue-500/20 opacity-0 transition-opacity duration-500 group-hover:opacity-100; +} + +/* Caption area at the bottom with dark background */ +.heroCaption { + @apply absolute bottom-0 left-0 right-0 bg-black/40 p-4 text-white opacity-0 transition-opacity duration-500 group-hover:opacity-100; +} + +/* Caption title text */ +.heroCaptionTitle { + @apply text-xl font-semibold; +} + +/* Caption subtitle text */ +.heroCaptionSubtitle { + @apply text-sm; +} + /* Text content container for various sections */ .textContent { @apply space-y-4; From 4f978183e32d5c88fa7ca9e189108d3002cf84eb Mon Sep 17 00:00:00 2001 From: novruzoff Date: Sun, 25 May 2025 20:59:52 +0400 Subject: [PATCH 09/14] fix(cms): change page field to be unaccessible --- src/globals/AboutPage.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/globals/AboutPage.ts b/src/globals/AboutPage.ts index f6f27d6d..de805e1c 100644 --- a/src/globals/AboutPage.ts +++ b/src/globals/AboutPage.ts @@ -29,7 +29,7 @@ export const AboutPage: GlobalConfig = { type: "relationship", relationTo: "pages", access: { - update: canEditContent, + update: denyAccessField, }, }, { From 0bab13668f009a61c64a882a3e2599c7b15545ce Mon Sep 17 00:00:00 2001 From: novruzoff Date: Sun, 25 May 2025 21:02:18 +0400 Subject: [PATCH 10/14] fix(cms): streamline generateMetadata function --- src/app/(app)/(pages)/about/page.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/app/(app)/(pages)/about/page.tsx b/src/app/(app)/(pages)/about/page.tsx index e566f865..18f7e1ba 100644 --- a/src/app/(app)/(pages)/about/page.tsx +++ b/src/app/(app)/(pages)/about/page.tsx @@ -1,6 +1,7 @@ import { RefreshRouteOnSave } from "@/app/(app)/components/RefreshRouteOnSave"; import { Fragment } from "react"; import { getPayloadClient } from "@/payloadClient"; +import { getPageFromCMS } from "@/lib/getPageFromCMS"; import { Metadata } from "next"; import { RichText } from "@payloadcms/richtext-lexical/react"; import { SerializedEditorState } from "@payloadcms/richtext-lexical/lexical"; @@ -113,9 +114,11 @@ export default async function AboutPage() { } export async function generateMetadata(): Promise { - const page = await getPayloadClient().then((client) => client.findGlobal({ slug: "about" })); + const page = await getPageFromCMS("about"); return { - title: page?.title || "About MindVista", - description: (page as any)?.seoDescription || "Committed to student wellness and engagement.", + ...(page && { + title: page.title, + description: page.seoDescription, + }), }; } From 267dd2711e1e813be1aa0cca5e6b98a8c1821272 Mon Sep 17 00:00:00 2001 From: Atlas Gong <68199735+atlasgong@users.noreply.github.com> Date: Sun, 25 May 2025 14:18:29 -0400 Subject: [PATCH 11/14] refactor: extract types from auto-generated types --- .../(pages)/about/components/TeamSection.tsx | 35 ----------------- src/app/(app)/(pages)/about/page.tsx | 39 +++++-------------- 2 files changed, 10 insertions(+), 64 deletions(-) delete mode 100644 src/app/(app)/(pages)/about/components/TeamSection.tsx diff --git a/src/app/(app)/(pages)/about/components/TeamSection.tsx b/src/app/(app)/(pages)/about/components/TeamSection.tsx deleted file mode 100644 index a6be65cf..00000000 --- a/src/app/(app)/(pages)/about/components/TeamSection.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import Image from "next/image"; - -interface TeamMember { - role: string; - name: string; - pronouns?: string; - image?: string; -} - -interface Props { - title: string; - members: TeamMember[]; -} - -export default function TeamSection(props: Props) { - return ( -
-

{props.title}

-
- {props.members.map((member) => ( -
-
- {member.name} -
-
-

{member.name}

- {member.pronouns && ({member.pronouns})} -
-

{member.role}

-
- ))} -
-
- ); -} diff --git a/src/app/(app)/(pages)/about/page.tsx b/src/app/(app)/(pages)/about/page.tsx index 18f7e1ba..4ab45b84 100644 --- a/src/app/(app)/(pages)/about/page.tsx +++ b/src/app/(app)/(pages)/about/page.tsx @@ -8,43 +8,23 @@ import { SerializedEditorState } from "@payloadcms/richtext-lexical/lexical"; import Image from "next/image"; import Hr from "../../components/Hr"; import styles from "./styles.module.css"; +import { About, Media } from "@/payload-types"; -/** - * Types for the Payload global "about" content. - * - groupPhoto is now required and expected to be an object with a URL. - */ -interface TeamMember { - role: string; - name: string; - pronouns?: string; - image?: string; -} - -interface TeamSectionData { - title: string; - members: TeamMember[]; -} - -interface AboutContent { - groupPhoto: { url: string }; - title?: string; - introduction?: SerializedEditorState; - initiativeDetails?: SerializedEditorState; - teams?: TeamSectionData[]; -} +type TeamMember = About["teams"][number]["members"][number]; +type TeamSection = About["teams"][number]; /** * Inline TeamSection component – purely presentational. */ -function TeamSection({ title, members }: TeamSectionData) { +function TeamSection({ title, members }: TeamSection) { return (

{title}

- {members.map((member) => ( + {members.map((member: TeamMember) => (
- {member.name} + {(member.image

{member.name}

@@ -60,12 +40,13 @@ function TeamSection({ title, members }: TeamSectionData) { export default async function AboutPage() { // Fetch the global "about" content from Payload - const content = (await (await getPayloadClient()).findGlobal({ slug: "about" })) as AboutContent | null; + const content = await (await getPayloadClient()).findGlobal({ slug: "about" }); // If no content or group photo is found, display an error message. - if (!content || !content.groupPhoto || !content.groupPhoto.url) { + if (!content || !content.groupPhoto || !(content.groupPhoto as Media).url) { return
Error: Group photo is not set in Payload.
; } + const groupPhotoURL = (content.groupPhoto as Media).url as string; return ( @@ -76,7 +57,7 @@ export default async function AboutPage() {
{/* Add "group" class here so children can use group-hover */}
- MindVista Team + MindVista Team

MindVista Team 2024-2025

From 5ff00d020ea1cf2ac9178cf67880b07aa4e65ea9 Mon Sep 17 00:00:00 2001 From: Atlas Gong <68199735+atlasgong@users.noreply.github.com> Date: Sun, 25 May 2025 14:39:07 -0400 Subject: [PATCH 12/14] cms: create migration --- src/migrations/20250525_183845_about_pg.json | 6144 ++++++++++++++++++ src/migrations/20250525_183845_about_pg.ts | 173 + src/migrations/index.ts | 6 + 3 files changed, 6323 insertions(+) create mode 100644 src/migrations/20250525_183845_about_pg.json create mode 100644 src/migrations/20250525_183845_about_pg.ts diff --git a/src/migrations/20250525_183845_about_pg.json b/src/migrations/20250525_183845_about_pg.json new file mode 100644 index 00000000..f2055076 --- /dev/null +++ b/src/migrations/20250525_183845_about_pg.json @@ -0,0 +1,6144 @@ +{ + "id": "016986c6-0c85-417b-b02a-3bb7645a8b89", + "prevId": "00000000-0000-0000-0000-000000000000", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "full_name": { + "name": "full_name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "enum_users_role", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'contentEditor'" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "email": { + "name": "email", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "reset_password_token": { + "name": "reset_password_token", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "reset_password_expiration": { + "name": "reset_password_expiration", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "salt": { + "name": "salt", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "hash": { + "name": "hash", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "login_attempts": { + "name": "login_attempts", + "type": "numeric", + "primaryKey": false, + "notNull": false, + "default": 0 + }, + "lock_until": { + "name": "lock_until", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "users_updated_at_idx": { + "name": "users_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "users_created_at_idx": { + "name": "users_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "users_email_idx": { + "name": "users_email_idx", + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.media": { + "name": "media", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "alt": { + "name": "alt", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "alt_fr": { + "name": "alt_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "purpose": { + "name": "purpose", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "prefix": { + "name": "prefix", + "type": "varchar", + "primaryKey": false, + "notNull": false, + "default": "'media'" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "url": { + "name": "url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "thumbnail_u_r_l": { + "name": "thumbnail_u_r_l", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "filename": { + "name": "filename", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "mime_type": { + "name": "mime_type", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "filesize": { + "name": "filesize", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "width": { + "name": "width", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "height": { + "name": "height", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "focal_x": { + "name": "focal_x", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "focal_y": { + "name": "focal_y", + "type": "numeric", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "media_updated_at_idx": { + "name": "media_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "media_created_at_idx": { + "name": "media_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "media_filename_idx": { + "name": "media_filename_idx", + "columns": [ + { + "expression": "filename", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pages": { + "name": "pages", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "title_fr": { + "name": "title_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "seo_description": { + "name": "seo_description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "seo_description_fr": { + "name": "seo_description_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "pages_slug_idx": { + "name": "pages_slug_idx", + "columns": [ + { + "expression": "slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_updated_at_idx": { + "name": "pages_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pages_created_at_idx": { + "name": "pages_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.legal": { + "name": "legal", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "page_id": { + "name": "page_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "content": { + "name": "content", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "content_fr": { + "name": "content_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "_status": { + "name": "_status", + "type": "enum_legal_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'draft'" + } + }, + "indexes": { + "legal_page_idx": { + "name": "legal_page_idx", + "columns": [ + { + "expression": "page_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "legal_updated_at_idx": { + "name": "legal_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "legal_created_at_idx": { + "name": "legal_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "legal__status_idx": { + "name": "legal__status_idx", + "columns": [ + { + "expression": "_status", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "legal_page_id_pages_id_fk": { + "name": "legal_page_id_pages_id_fk", + "tableFrom": "legal", + "tableTo": "pages", + "columnsFrom": ["page_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public._legal_v": { + "name": "_legal_v", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "version_page_id": { + "name": "version_page_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "version_content": { + "name": "version_content", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "version_content_fr": { + "name": "version_content_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "version_updated_at": { + "name": "version_updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "version_created_at": { + "name": "version_created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "version__status": { + "name": "version__status", + "type": "enum__legal_v_version_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'draft'" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "latest": { + "name": "latest", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "_legal_v_parent_idx": { + "name": "_legal_v_parent_idx", + "columns": [ + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_legal_v_version_version_page_idx": { + "name": "_legal_v_version_version_page_idx", + "columns": [ + { + "expression": "version_page_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_legal_v_version_version_updated_at_idx": { + "name": "_legal_v_version_version_updated_at_idx", + "columns": [ + { + "expression": "version_updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_legal_v_version_version_created_at_idx": { + "name": "_legal_v_version_version_created_at_idx", + "columns": [ + { + "expression": "version_created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_legal_v_version_version__status_idx": { + "name": "_legal_v_version_version__status_idx", + "columns": [ + { + "expression": "version__status", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_legal_v_created_at_idx": { + "name": "_legal_v_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_legal_v_updated_at_idx": { + "name": "_legal_v_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_legal_v_latest_idx": { + "name": "_legal_v_latest_idx", + "columns": [ + { + "expression": "latest", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "_legal_v_parent_id_legal_id_fk": { + "name": "_legal_v_parent_id_legal_id_fk", + "tableFrom": "_legal_v", + "tableTo": "legal", + "columnsFrom": ["parent_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "_legal_v_version_page_id_pages_id_fk": { + "name": "_legal_v_version_page_id_pages_id_fk", + "tableFrom": "_legal_v", + "tableTo": "pages", + "columnsFrom": ["version_page_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.events_date_ranges": { + "name": "events_date_ranges", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "start_date": { + "name": "start_date", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true + }, + "end_date": { + "name": "end_date", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "events_date_ranges_order_idx": { + "name": "events_date_ranges_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "events_date_ranges_parent_id_idx": { + "name": "events_date_ranges_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "events_date_ranges_start_date_idx": { + "name": "events_date_ranges_start_date_idx", + "columns": [ + { + "expression": "start_date", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "events_date_ranges_end_date_idx": { + "name": "events_date_ranges_end_date_idx", + "columns": [ + { + "expression": "end_date", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "events_date_ranges_parent_id_fk": { + "name": "events_date_ranges_parent_id_fk", + "tableFrom": "events_date_ranges", + "tableTo": "events", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.events": { + "name": "events", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "title_fr": { + "name": "title_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "description_fr": { + "name": "description_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "incentive": { + "name": "incentive", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "incentive_fr": { + "name": "incentive_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "limited_availability": { + "name": "limited_availability", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "is_chance": { + "name": "is_chance", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "location": { + "name": "location", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "location_fr": { + "name": "location_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "location_link": { + "name": "location_link", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sign_up_link": { + "name": "sign_up_link", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "instagram_post": { + "name": "instagram_post", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "graphic_id": { + "name": "graphic_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "events_slug_idx": { + "name": "events_slug_idx", + "columns": [ + { + "expression": "slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "events_graphic_idx": { + "name": "events_graphic_idx", + "columns": [ + { + "expression": "graphic_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "events_updated_at_idx": { + "name": "events_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "events_created_at_idx": { + "name": "events_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "events_graphic_id_media_id_fk": { + "name": "events_graphic_id_media_id_fk", + "tableFrom": "events", + "tableTo": "media", + "columnsFrom": ["graphic_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.clubs_other_socials": { + "name": "clubs_other_socials", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "link": { + "name": "link", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "clubs_other_socials_order_idx": { + "name": "clubs_other_socials_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "clubs_other_socials_parent_id_idx": { + "name": "clubs_other_socials_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "clubs_other_socials_parent_id_fk": { + "name": "clubs_other_socials_parent_id_fk", + "tableFrom": "clubs_other_socials", + "tableTo": "clubs", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.clubs": { + "name": "clubs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "title_fr": { + "name": "title_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "description_fr": { + "name": "description_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "website": { + "name": "website", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "newsletter": { + "name": "newsletter", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "phone_number": { + "name": "phone_number", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "facebook": { + "name": "facebook", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "instagram": { + "name": "instagram", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "graphic_title": { + "name": "graphic_title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "graphic_title_fr": { + "name": "graphic_title_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "graphic_id": { + "name": "graphic_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "currently_active": { + "name": "currently_active", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "clubs_slug_idx": { + "name": "clubs_slug_idx", + "columns": [ + { + "expression": "slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "clubs_graphic_idx": { + "name": "clubs_graphic_idx", + "columns": [ + { + "expression": "graphic_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "clubs_updated_at_idx": { + "name": "clubs_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "clubs_created_at_idx": { + "name": "clubs_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "clubs_graphic_id_media_id_fk": { + "name": "clubs_graphic_id_media_id_fk", + "tableFrom": "clubs", + "tableTo": "media", + "columnsFrom": ["graphic_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.clubs_rels": { + "name": "clubs_rels", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "club_tags_id": { + "name": "club_tags_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "clubs_rels_order_idx": { + "name": "clubs_rels_order_idx", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "clubs_rels_parent_idx": { + "name": "clubs_rels_parent_idx", + "columns": [ + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "clubs_rels_path_idx": { + "name": "clubs_rels_path_idx", + "columns": [ + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "clubs_rels_club_tags_id_idx": { + "name": "clubs_rels_club_tags_id_idx", + "columns": [ + { + "expression": "club_tags_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "clubs_rels_parent_fk": { + "name": "clubs_rels_parent_fk", + "tableFrom": "clubs_rels", + "tableTo": "clubs", + "columnsFrom": ["parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "clubs_rels_club_tags_fk": { + "name": "clubs_rels_club_tags_fk", + "tableFrom": "clubs_rels", + "tableTo": "club_tags", + "columnsFrom": ["club_tags_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.resources_insurance_providers_insurance_provider": { + "name": "resources_insurance_providers_insurance_provider", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "name_fr": { + "name": "name_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "description_fr": { + "name": "description_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "resources_insurance_providers_insurance_provider_order_idx": { + "name": "resources_insurance_providers_insurance_provider_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "resources_insurance_providers_insurance_provider_parent_id_idx": { + "name": "resources_insurance_providers_insurance_provider_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "resources_insurance_providers_insurance_provider_parent_id_fk": { + "name": "resources_insurance_providers_insurance_provider_parent_id_fk", + "tableFrom": "resources_insurance_providers_insurance_provider", + "tableTo": "resources_insurance_providers", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.resources_insurance_providers": { + "name": "resources_insurance_providers", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + } + }, + "indexes": { + "resources_insurance_providers_order_idx": { + "name": "resources_insurance_providers_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "resources_insurance_providers_parent_id_idx": { + "name": "resources_insurance_providers_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "resources_insurance_providers_parent_id_fk": { + "name": "resources_insurance_providers_parent_id_fk", + "tableFrom": "resources_insurance_providers", + "tableTo": "resources", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.resources": { + "name": "resources", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "title_fr": { + "name": "title_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "description_fr": { + "name": "description_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "website": { + "name": "website", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "newsletter": { + "name": "newsletter", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "insurance_details": { + "name": "insurance_details", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "insurance_detail_fr": { + "name": "insurance_detail_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "phone_number": { + "name": "phone_number", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "location": { + "name": "location", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "location_fr": { + "name": "location_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "channel_online": { + "name": "channel_online", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "channel_telephone": { + "name": "channel_telephone", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "channel_in_person": { + "name": "channel_in_person", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "on_campus": { + "name": "on_campus", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "graphic_title": { + "name": "graphic_title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "graphic_title_fr": { + "name": "graphic_title_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "graphic_id": { + "name": "graphic_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "currently_active": { + "name": "currently_active", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "resources_slug_idx": { + "name": "resources_slug_idx", + "columns": [ + { + "expression": "slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "resources_graphic_idx": { + "name": "resources_graphic_idx", + "columns": [ + { + "expression": "graphic_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "resources_updated_at_idx": { + "name": "resources_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "resources_created_at_idx": { + "name": "resources_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "resources_graphic_id_media_id_fk": { + "name": "resources_graphic_id_media_id_fk", + "tableFrom": "resources", + "tableTo": "media", + "columnsFrom": ["graphic_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.resources_rels": { + "name": "resources_rels", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "resource_tags_id": { + "name": "resource_tags_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "resources_rels_order_idx": { + "name": "resources_rels_order_idx", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "resources_rels_parent_idx": { + "name": "resources_rels_parent_idx", + "columns": [ + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "resources_rels_path_idx": { + "name": "resources_rels_path_idx", + "columns": [ + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "resources_rels_resource_tags_id_idx": { + "name": "resources_rels_resource_tags_id_idx", + "columns": [ + { + "expression": "resource_tags_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "resources_rels_parent_fk": { + "name": "resources_rels_parent_fk", + "tableFrom": "resources_rels", + "tableTo": "resources", + "columnsFrom": ["parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "resources_rels_resource_tags_fk": { + "name": "resources_rels_resource_tags_fk", + "tableFrom": "resources_rels", + "tableTo": "resource_tags", + "columnsFrom": ["resource_tags_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.club_tag_categories": { + "name": "club_tag_categories", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "club_tag_categories_updated_at_idx": { + "name": "club_tag_categories_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "club_tag_categories_created_at_idx": { + "name": "club_tag_categories_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.resource_tag_categories": { + "name": "resource_tag_categories", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "resource_tag_categories_updated_at_idx": { + "name": "resource_tag_categories_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "resource_tag_categories_created_at_idx": { + "name": "resource_tag_categories_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.club_tags": { + "name": "club_tags", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "category_id": { + "name": "category_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "club_tags_category_idx": { + "name": "club_tags_category_idx", + "columns": [ + { + "expression": "category_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "club_tags_updated_at_idx": { + "name": "club_tags_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "club_tags_created_at_idx": { + "name": "club_tags_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "club_tags_category_id_club_tag_categories_id_fk": { + "name": "club_tags_category_id_club_tag_categories_id_fk", + "tableFrom": "club_tags", + "tableTo": "club_tag_categories", + "columnsFrom": ["category_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.resource_tags": { + "name": "resource_tags", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "category_id": { + "name": "category_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "resource_tags_category_idx": { + "name": "resource_tags_category_idx", + "columns": [ + { + "expression": "category_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "resource_tags_updated_at_idx": { + "name": "resource_tags_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "resource_tags_created_at_idx": { + "name": "resource_tags_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "resource_tags_category_id_resource_tag_categories_id_fk": { + "name": "resource_tags_category_id_resource_tag_categories_id_fk", + "tableFrom": "resource_tags", + "tableTo": "resource_tag_categories", + "columnsFrom": ["category_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.audit_log": { + "name": "audit_log", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true + }, + "operation": { + "name": "operation", + "type": "enum_audit_log_operation", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "resource_u_r_l": { + "name": "resource_u_r_l", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "document_id": { + "name": "document_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "previous_version_id": { + "name": "previous_version_id", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "audit_log_user_idx": { + "name": "audit_log_user_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "audit_log_updated_at_idx": { + "name": "audit_log_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "audit_log_created_at_idx": { + "name": "audit_log_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "audit_log_user_id_users_id_fk": { + "name": "audit_log_user_id_users_id_fk", + "tableFrom": "audit_log", + "tableTo": "users", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_locked_documents": { + "name": "payload_locked_documents", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "global_slug": { + "name": "global_slug", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "payload_locked_documents_global_slug_idx": { + "name": "payload_locked_documents_global_slug_idx", + "columns": [ + { + "expression": "global_slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_updated_at_idx": { + "name": "payload_locked_documents_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_created_at_idx": { + "name": "payload_locked_documents_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_locked_documents_rels": { + "name": "payload_locked_documents_rels", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "media_id": { + "name": "media_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "pages_id": { + "name": "pages_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "legal_id": { + "name": "legal_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "events_id": { + "name": "events_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "clubs_id": { + "name": "clubs_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "resources_id": { + "name": "resources_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "club_tag_categories_id": { + "name": "club_tag_categories_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "resource_tag_categories_id": { + "name": "resource_tag_categories_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "club_tags_id": { + "name": "club_tags_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "resource_tags_id": { + "name": "resource_tags_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "audit_log_id": { + "name": "audit_log_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "payload_locked_documents_rels_order_idx": { + "name": "payload_locked_documents_rels_order_idx", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_parent_idx": { + "name": "payload_locked_documents_rels_parent_idx", + "columns": [ + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_path_idx": { + "name": "payload_locked_documents_rels_path_idx", + "columns": [ + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_users_id_idx": { + "name": "payload_locked_documents_rels_users_id_idx", + "columns": [ + { + "expression": "users_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_media_id_idx": { + "name": "payload_locked_documents_rels_media_id_idx", + "columns": [ + { + "expression": "media_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_pages_id_idx": { + "name": "payload_locked_documents_rels_pages_id_idx", + "columns": [ + { + "expression": "pages_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_legal_id_idx": { + "name": "payload_locked_documents_rels_legal_id_idx", + "columns": [ + { + "expression": "legal_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_events_id_idx": { + "name": "payload_locked_documents_rels_events_id_idx", + "columns": [ + { + "expression": "events_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_clubs_id_idx": { + "name": "payload_locked_documents_rels_clubs_id_idx", + "columns": [ + { + "expression": "clubs_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_resources_id_idx": { + "name": "payload_locked_documents_rels_resources_id_idx", + "columns": [ + { + "expression": "resources_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_club_tag_categories_id_idx": { + "name": "payload_locked_documents_rels_club_tag_categories_id_idx", + "columns": [ + { + "expression": "club_tag_categories_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_resource_tag_categories_id_idx": { + "name": "payload_locked_documents_rels_resource_tag_categories_id_idx", + "columns": [ + { + "expression": "resource_tag_categories_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_club_tags_id_idx": { + "name": "payload_locked_documents_rels_club_tags_id_idx", + "columns": [ + { + "expression": "club_tags_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_resource_tags_id_idx": { + "name": "payload_locked_documents_rels_resource_tags_id_idx", + "columns": [ + { + "expression": "resource_tags_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_locked_documents_rels_audit_log_id_idx": { + "name": "payload_locked_documents_rels_audit_log_id_idx", + "columns": [ + { + "expression": "audit_log_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "payload_locked_documents_rels_parent_fk": { + "name": "payload_locked_documents_rels_parent_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "payload_locked_documents", + "columnsFrom": ["parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_users_fk": { + "name": "payload_locked_documents_rels_users_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "users", + "columnsFrom": ["users_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_media_fk": { + "name": "payload_locked_documents_rels_media_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "media", + "columnsFrom": ["media_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_pages_fk": { + "name": "payload_locked_documents_rels_pages_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "pages", + "columnsFrom": ["pages_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_legal_fk": { + "name": "payload_locked_documents_rels_legal_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "legal", + "columnsFrom": ["legal_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_events_fk": { + "name": "payload_locked_documents_rels_events_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "events", + "columnsFrom": ["events_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_clubs_fk": { + "name": "payload_locked_documents_rels_clubs_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "clubs", + "columnsFrom": ["clubs_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_resources_fk": { + "name": "payload_locked_documents_rels_resources_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "resources", + "columnsFrom": ["resources_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_club_tag_categories_fk": { + "name": "payload_locked_documents_rels_club_tag_categories_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "club_tag_categories", + "columnsFrom": ["club_tag_categories_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_resource_tag_categories_fk": { + "name": "payload_locked_documents_rels_resource_tag_categories_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "resource_tag_categories", + "columnsFrom": ["resource_tag_categories_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_club_tags_fk": { + "name": "payload_locked_documents_rels_club_tags_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "club_tags", + "columnsFrom": ["club_tags_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_resource_tags_fk": { + "name": "payload_locked_documents_rels_resource_tags_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "resource_tags", + "columnsFrom": ["resource_tags_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_locked_documents_rels_audit_log_fk": { + "name": "payload_locked_documents_rels_audit_log_fk", + "tableFrom": "payload_locked_documents_rels", + "tableTo": "audit_log", + "columnsFrom": ["audit_log_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_preferences": { + "name": "payload_preferences", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "key": { + "name": "key", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "value": { + "name": "value", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "payload_preferences_key_idx": { + "name": "payload_preferences_key_idx", + "columns": [ + { + "expression": "key", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_updated_at_idx": { + "name": "payload_preferences_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_created_at_idx": { + "name": "payload_preferences_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_preferences_rels": { + "name": "payload_preferences_rels", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "parent_id": { + "name": "parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "users_id": { + "name": "users_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "payload_preferences_rels_order_idx": { + "name": "payload_preferences_rels_order_idx", + "columns": [ + { + "expression": "order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_rels_parent_idx": { + "name": "payload_preferences_rels_parent_idx", + "columns": [ + { + "expression": "parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_rels_path_idx": { + "name": "payload_preferences_rels_path_idx", + "columns": [ + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_preferences_rels_users_id_idx": { + "name": "payload_preferences_rels_users_id_idx", + "columns": [ + { + "expression": "users_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "payload_preferences_rels_parent_fk": { + "name": "payload_preferences_rels_parent_fk", + "tableFrom": "payload_preferences_rels", + "tableTo": "payload_preferences", + "columnsFrom": ["parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "payload_preferences_rels_users_fk": { + "name": "payload_preferences_rels_users_fk", + "tableFrom": "payload_preferences_rels", + "tableTo": "users", + "columnsFrom": ["users_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.payload_migrations": { + "name": "payload_migrations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "batch": { + "name": "batch", + "type": "numeric", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "payload_migrations_updated_at_idx": { + "name": "payload_migrations_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "payload_migrations_created_at_idx": { + "name": "payload_migrations_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.about_teams_members": { + "name": "about_teams_members", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "role": { + "name": "role", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "role_fr": { + "name": "role_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "pronouns": { + "name": "pronouns", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "image_id": { + "name": "image_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "about_teams_members_order_idx": { + "name": "about_teams_members_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "about_teams_members_parent_id_idx": { + "name": "about_teams_members_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "about_teams_members_image_idx": { + "name": "about_teams_members_image_idx", + "columns": [ + { + "expression": "image_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "about_teams_members_image_id_media_id_fk": { + "name": "about_teams_members_image_id_media_id_fk", + "tableFrom": "about_teams_members", + "tableTo": "media", + "columnsFrom": ["image_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "about_teams_members_parent_id_fk": { + "name": "about_teams_members_parent_id_fk", + "tableFrom": "about_teams_members", + "tableTo": "about_teams", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.about_teams": { + "name": "about_teams", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "title_fr": { + "name": "title_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "about_teams_order_idx": { + "name": "about_teams_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "about_teams_parent_id_idx": { + "name": "about_teams_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "about_teams_parent_id_fk": { + "name": "about_teams_parent_id_fk", + "tableFrom": "about_teams", + "tableTo": "about", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.about": { + "name": "about", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "page_id": { + "name": "page_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "group_photo_id": { + "name": "group_photo_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "group_photo_caption": { + "name": "group_photo_caption", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "title_fr": { + "name": "title_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "introduction": { + "name": "introduction", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "introduction_fr": { + "name": "introduction_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "initiative_details": { + "name": "initiative_details", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "initiative_details_fr": { + "name": "initiative_details_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "_status": { + "name": "_status", + "type": "enum_about_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'draft'" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "about_page_idx": { + "name": "about_page_idx", + "columns": [ + { + "expression": "page_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "about_group_photo_idx": { + "name": "about_group_photo_idx", + "columns": [ + { + "expression": "group_photo_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "about__status_idx": { + "name": "about__status_idx", + "columns": [ + { + "expression": "_status", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "about_page_id_pages_id_fk": { + "name": "about_page_id_pages_id_fk", + "tableFrom": "about", + "tableTo": "pages", + "columnsFrom": ["page_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "about_group_photo_id_media_id_fk": { + "name": "about_group_photo_id_media_id_fk", + "tableFrom": "about", + "tableTo": "media", + "columnsFrom": ["group_photo_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public._about_v_version_teams_members": { + "name": "_about_v_version_teams_members", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "role": { + "name": "role", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "role_fr": { + "name": "role_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "pronouns": { + "name": "pronouns", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "image_id": { + "name": "image_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "_uuid": { + "name": "_uuid", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "_about_v_version_teams_members_order_idx": { + "name": "_about_v_version_teams_members_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_about_v_version_teams_members_parent_id_idx": { + "name": "_about_v_version_teams_members_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_about_v_version_teams_members_image_idx": { + "name": "_about_v_version_teams_members_image_idx", + "columns": [ + { + "expression": "image_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "_about_v_version_teams_members_image_id_media_id_fk": { + "name": "_about_v_version_teams_members_image_id_media_id_fk", + "tableFrom": "_about_v_version_teams_members", + "tableTo": "media", + "columnsFrom": ["image_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "_about_v_version_teams_members_parent_id_fk": { + "name": "_about_v_version_teams_members_parent_id_fk", + "tableFrom": "_about_v_version_teams_members", + "tableTo": "_about_v_version_teams", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public._about_v_version_teams": { + "name": "_about_v_version_teams", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "title_fr": { + "name": "title_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "_uuid": { + "name": "_uuid", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "_about_v_version_teams_order_idx": { + "name": "_about_v_version_teams_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_about_v_version_teams_parent_id_idx": { + "name": "_about_v_version_teams_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "_about_v_version_teams_parent_id_fk": { + "name": "_about_v_version_teams_parent_id_fk", + "tableFrom": "_about_v_version_teams", + "tableTo": "_about_v", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public._about_v": { + "name": "_about_v", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "version_page_id": { + "name": "version_page_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "version_group_photo_id": { + "name": "version_group_photo_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "version_group_photo_caption": { + "name": "version_group_photo_caption", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version_title": { + "name": "version_title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version_title_fr": { + "name": "version_title_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version_introduction": { + "name": "version_introduction", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "version_introduction_fr": { + "name": "version_introduction_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "version_initiative_details": { + "name": "version_initiative_details", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "version_initiative_details_fr": { + "name": "version_initiative_details_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "version__status": { + "name": "version__status", + "type": "enum__about_v_version_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'draft'" + }, + "version_updated_at": { + "name": "version_updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "version_created_at": { + "name": "version_created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "latest": { + "name": "latest", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "_about_v_version_version_page_idx": { + "name": "_about_v_version_version_page_idx", + "columns": [ + { + "expression": "version_page_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_about_v_version_version_group_photo_idx": { + "name": "_about_v_version_version_group_photo_idx", + "columns": [ + { + "expression": "version_group_photo_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_about_v_version_version__status_idx": { + "name": "_about_v_version_version__status_idx", + "columns": [ + { + "expression": "version__status", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_about_v_created_at_idx": { + "name": "_about_v_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_about_v_updated_at_idx": { + "name": "_about_v_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_about_v_latest_idx": { + "name": "_about_v_latest_idx", + "columns": [ + { + "expression": "latest", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "_about_v_version_page_id_pages_id_fk": { + "name": "_about_v_version_page_id_pages_id_fk", + "tableFrom": "_about_v", + "tableTo": "pages", + "columnsFrom": ["version_page_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "_about_v_version_group_photo_id_media_id_fk": { + "name": "_about_v_version_group_photo_id_media_id_fk", + "tableFrom": "_about_v", + "tableTo": "media", + "columnsFrom": ["version_group_photo_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.holistic_wellness_wellness_wheel_dimensions": { + "name": "holistic_wellness_wellness_wheel_dimensions", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "name_fr": { + "name": "name_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "description_fr": { + "name": "description_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "color": { + "name": "color", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "holistic_wellness_wellness_wheel_dimensions_order_idx": { + "name": "holistic_wellness_wellness_wheel_dimensions_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "holistic_wellness_wellness_wheel_dimensions_parent_id_idx": { + "name": "holistic_wellness_wellness_wheel_dimensions_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "holistic_wellness_wellness_wheel_dimensions_parent_id_fk": { + "name": "holistic_wellness_wellness_wheel_dimensions_parent_id_fk", + "tableFrom": "holistic_wellness_wellness_wheel_dimensions", + "tableTo": "holistic_wellness", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.holistic_wellness_sections": { + "name": "holistic_wellness_sections", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "content": { + "name": "content", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "content_fr": { + "name": "content_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "holistic_wellness_sections_order_idx": { + "name": "holistic_wellness_sections_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "holistic_wellness_sections_parent_id_idx": { + "name": "holistic_wellness_sections_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "holistic_wellness_sections_parent_id_fk": { + "name": "holistic_wellness_sections_parent_id_fk", + "tableFrom": "holistic_wellness_sections", + "tableTo": "holistic_wellness", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.holistic_wellness": { + "name": "holistic_wellness", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "page_id": { + "name": "page_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "hero_content": { + "name": "hero_content", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "hero_content_fr": { + "name": "hero_content_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "wellness_wheel_top_content": { + "name": "wellness_wheel_top_content", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "wellness_wheel_top_content_fr": { + "name": "wellness_wheel_top_content_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "wellness_wheel_bottom_content": { + "name": "wellness_wheel_bottom_content", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "wellness_wheel_bottom_content_fr": { + "name": "wellness_wheel_bottom_content_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "holistic_wellness_page_idx": { + "name": "holistic_wellness_page_idx", + "columns": [ + { + "expression": "page_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "holistic_wellness_page_id_pages_id_fk": { + "name": "holistic_wellness_page_id_pages_id_fk", + "tableFrom": "holistic_wellness", + "tableTo": "pages", + "columnsFrom": ["page_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public._holistic_wellness_v_version_wellness_wheel_dimensions": { + "name": "_holistic_wellness_v_version_wellness_wheel_dimensions", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "name_fr": { + "name": "name_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "description_fr": { + "name": "description_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "color": { + "name": "color", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "_uuid": { + "name": "_uuid", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "_holistic_wellness_v_version_wellness_wheel_dimensions_order_idx": { + "name": "_holistic_wellness_v_version_wellness_wheel_dimensions_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_holistic_wellness_v_version_wellness_wheel_dimensions_parent_id_idx": { + "name": "_holistic_wellness_v_version_wellness_wheel_dimensions_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "_holistic_wellness_v_version_wellness_wheel_dimensions_parent_id_fk": { + "name": "_holistic_wellness_v_version_wellness_wheel_dimensions_parent_id_fk", + "tableFrom": "_holistic_wellness_v_version_wellness_wheel_dimensions", + "tableTo": "_holistic_wellness_v", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public._holistic_wellness_v_version_sections": { + "name": "_holistic_wellness_v_version_sections", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "content": { + "name": "content", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "content_fr": { + "name": "content_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "_uuid": { + "name": "_uuid", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "_holistic_wellness_v_version_sections_order_idx": { + "name": "_holistic_wellness_v_version_sections_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_holistic_wellness_v_version_sections_parent_id_idx": { + "name": "_holistic_wellness_v_version_sections_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "_holistic_wellness_v_version_sections_parent_id_fk": { + "name": "_holistic_wellness_v_version_sections_parent_id_fk", + "tableFrom": "_holistic_wellness_v_version_sections", + "tableTo": "_holistic_wellness_v", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public._holistic_wellness_v": { + "name": "_holistic_wellness_v", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "version_page_id": { + "name": "version_page_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "version_hero_content": { + "name": "version_hero_content", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "version_hero_content_fr": { + "name": "version_hero_content_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "version_wellness_wheel_top_content": { + "name": "version_wellness_wheel_top_content", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "version_wellness_wheel_top_content_fr": { + "name": "version_wellness_wheel_top_content_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "version_wellness_wheel_bottom_content": { + "name": "version_wellness_wheel_bottom_content", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "version_wellness_wheel_bottom_content_fr": { + "name": "version_wellness_wheel_bottom_content_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "version_updated_at": { + "name": "version_updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "version_created_at": { + "name": "version_created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "_holistic_wellness_v_version_version_page_idx": { + "name": "_holistic_wellness_v_version_version_page_idx", + "columns": [ + { + "expression": "version_page_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_holistic_wellness_v_created_at_idx": { + "name": "_holistic_wellness_v_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_holistic_wellness_v_updated_at_idx": { + "name": "_holistic_wellness_v_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "_holistic_wellness_v_version_page_id_pages_id_fk": { + "name": "_holistic_wellness_v_version_page_id_pages_id_fk", + "tableFrom": "_holistic_wellness_v", + "tableTo": "pages", + "columnsFrom": ["version_page_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.sponsor_sponsors": { + "name": "sponsor_sponsors", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "url": { + "name": "url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "logo_id": { + "name": "logo_id", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "sponsor_sponsors_order_idx": { + "name": "sponsor_sponsors_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "sponsor_sponsors_parent_id_idx": { + "name": "sponsor_sponsors_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "sponsor_sponsors_logo_idx": { + "name": "sponsor_sponsors_logo_idx", + "columns": [ + { + "expression": "logo_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "sponsor_sponsors_logo_id_media_id_fk": { + "name": "sponsor_sponsors_logo_id_media_id_fk", + "tableFrom": "sponsor_sponsors", + "tableTo": "media", + "columnsFrom": ["logo_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "sponsor_sponsors_parent_id_fk": { + "name": "sponsor_sponsors_parent_id_fk", + "tableFrom": "sponsor_sponsors", + "tableTo": "sponsor", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.sponsor": { + "name": "sponsor", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "page_id": { + "name": "page_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "our_sponsors_section": { + "name": "our_sponsors_section", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "our_sponsors_section_fr": { + "name": "our_sponsors_section_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "callout": { + "name": "callout", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "callout_fr": { + "name": "callout_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sponsor_us_section": { + "name": "sponsor_us_section", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "sponsor_us_section_fr": { + "name": "sponsor_us_section_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "_status": { + "name": "_status", + "type": "enum_sponsor_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'draft'" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "sponsor_page_idx": { + "name": "sponsor_page_idx", + "columns": [ + { + "expression": "page_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "sponsor__status_idx": { + "name": "sponsor__status_idx", + "columns": [ + { + "expression": "_status", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "sponsor_page_id_pages_id_fk": { + "name": "sponsor_page_id_pages_id_fk", + "tableFrom": "sponsor", + "tableTo": "pages", + "columnsFrom": ["page_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public._sponsor_v_version_sponsors": { + "name": "_sponsor_v_version_sponsors", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "url": { + "name": "url", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "logo_id": { + "name": "logo_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "_uuid": { + "name": "_uuid", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "_sponsor_v_version_sponsors_order_idx": { + "name": "_sponsor_v_version_sponsors_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_sponsor_v_version_sponsors_parent_id_idx": { + "name": "_sponsor_v_version_sponsors_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_sponsor_v_version_sponsors_logo_idx": { + "name": "_sponsor_v_version_sponsors_logo_idx", + "columns": [ + { + "expression": "logo_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "_sponsor_v_version_sponsors_logo_id_media_id_fk": { + "name": "_sponsor_v_version_sponsors_logo_id_media_id_fk", + "tableFrom": "_sponsor_v_version_sponsors", + "tableTo": "media", + "columnsFrom": ["logo_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "_sponsor_v_version_sponsors_parent_id_fk": { + "name": "_sponsor_v_version_sponsors_parent_id_fk", + "tableFrom": "_sponsor_v_version_sponsors", + "tableTo": "_sponsor_v", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public._sponsor_v": { + "name": "_sponsor_v", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "version_page_id": { + "name": "version_page_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "version_our_sponsors_section": { + "name": "version_our_sponsors_section", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version_our_sponsors_section_fr": { + "name": "version_our_sponsors_section_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version_callout": { + "name": "version_callout", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version_callout_fr": { + "name": "version_callout_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version_sponsor_us_section": { + "name": "version_sponsor_us_section", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version_sponsor_us_section_fr": { + "name": "version_sponsor_us_section_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version__status": { + "name": "version__status", + "type": "enum__sponsor_v_version_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'draft'" + }, + "version_updated_at": { + "name": "version_updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "version_created_at": { + "name": "version_created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "latest": { + "name": "latest", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "_sponsor_v_version_version_page_idx": { + "name": "_sponsor_v_version_version_page_idx", + "columns": [ + { + "expression": "version_page_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_sponsor_v_version_version__status_idx": { + "name": "_sponsor_v_version_version__status_idx", + "columns": [ + { + "expression": "version__status", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_sponsor_v_created_at_idx": { + "name": "_sponsor_v_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_sponsor_v_updated_at_idx": { + "name": "_sponsor_v_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_sponsor_v_latest_idx": { + "name": "_sponsor_v_latest_idx", + "columns": [ + { + "expression": "latest", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "_sponsor_v_version_page_id_pages_id_fk": { + "name": "_sponsor_v_version_page_id_pages_id_fk", + "tableFrom": "_sponsor_v", + "tableTo": "pages", + "columnsFrom": ["version_page_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.volunteer_positions": { + "name": "volunteer_positions", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "title_fr": { + "name": "title_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "description_fr": { + "name": "description_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "requirements": { + "name": "requirements", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "requirements_fr": { + "name": "requirements_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "time_commitment": { + "name": "time_commitment", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "time_commitment_fr": { + "name": "time_commitment_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "date_posted": { + "name": "date_posted", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "form_link": { + "name": "form_link", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "is_open": { + "name": "is_open", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + } + }, + "indexes": { + "volunteer_positions_order_idx": { + "name": "volunteer_positions_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "volunteer_positions_parent_id_idx": { + "name": "volunteer_positions_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "volunteer_positions_parent_id_fk": { + "name": "volunteer_positions_parent_id_fk", + "tableFrom": "volunteer_positions", + "tableTo": "volunteer", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.volunteer": { + "name": "volunteer", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "page_id": { + "name": "page_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "title_fr": { + "name": "title_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "description_fr": { + "name": "description_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "_status": { + "name": "_status", + "type": "enum_volunteer_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'draft'" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "volunteer_page_idx": { + "name": "volunteer_page_idx", + "columns": [ + { + "expression": "page_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "volunteer__status_idx": { + "name": "volunteer__status_idx", + "columns": [ + { + "expression": "_status", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "volunteer_page_id_pages_id_fk": { + "name": "volunteer_page_id_pages_id_fk", + "tableFrom": "volunteer", + "tableTo": "pages", + "columnsFrom": ["page_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public._volunteer_v_version_positions": { + "name": "_volunteer_v_version_positions", + "schema": "", + "columns": { + "_order": { + "name": "_order", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "_parent_id": { + "name": "_parent_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "title_fr": { + "name": "title_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "description_fr": { + "name": "description_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "requirements": { + "name": "requirements", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "requirements_fr": { + "name": "requirements_fr", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "time_commitment": { + "name": "time_commitment", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "time_commitment_fr": { + "name": "time_commitment_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "date_posted": { + "name": "date_posted", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "form_link": { + "name": "form_link", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "is_open": { + "name": "is_open", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "_uuid": { + "name": "_uuid", + "type": "varchar", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "_volunteer_v_version_positions_order_idx": { + "name": "_volunteer_v_version_positions_order_idx", + "columns": [ + { + "expression": "_order", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_volunteer_v_version_positions_parent_id_idx": { + "name": "_volunteer_v_version_positions_parent_id_idx", + "columns": [ + { + "expression": "_parent_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "_volunteer_v_version_positions_parent_id_fk": { + "name": "_volunteer_v_version_positions_parent_id_fk", + "tableFrom": "_volunteer_v_version_positions", + "tableTo": "_volunteer_v", + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public._volunteer_v": { + "name": "_volunteer_v", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "version_page_id": { + "name": "version_page_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "version_title": { + "name": "version_title", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version_title_fr": { + "name": "version_title_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version_description": { + "name": "version_description", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version_description_fr": { + "name": "version_description_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version__status": { + "name": "version__status", + "type": "enum__volunteer_v_version_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'draft'" + }, + "version_updated_at": { + "name": "version_updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "version_created_at": { + "name": "version_created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "latest": { + "name": "latest", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "_volunteer_v_version_version_page_idx": { + "name": "_volunteer_v_version_version_page_idx", + "columns": [ + { + "expression": "version_page_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_volunteer_v_version_version__status_idx": { + "name": "_volunteer_v_version_version__status_idx", + "columns": [ + { + "expression": "version__status", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_volunteer_v_created_at_idx": { + "name": "_volunteer_v_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_volunteer_v_updated_at_idx": { + "name": "_volunteer_v_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_volunteer_v_latest_idx": { + "name": "_volunteer_v_latest_idx", + "columns": [ + { + "expression": "latest", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "_volunteer_v_version_page_id_pages_id_fk": { + "name": "_volunteer_v_version_page_id_pages_id_fk", + "tableFrom": "_volunteer_v", + "tableTo": "pages", + "columnsFrom": ["version_page_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.announcement_bar": { + "name": "announcement_bar", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "is_enabled": { + "name": "is_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "message": { + "name": "message", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "message_fr": { + "name": "message_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "link_text": { + "name": "link_text", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "link_text_fr": { + "name": "link_text_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "link_href": { + "name": "link_href", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "_status": { + "name": "_status", + "type": "enum_announcement_bar_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'draft'" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "announcement_bar__status_idx": { + "name": "announcement_bar__status_idx", + "columns": [ + { + "expression": "_status", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public._announcement_bar_v": { + "name": "_announcement_bar_v", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "version_is_enabled": { + "name": "version_is_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "version_message": { + "name": "version_message", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version_message_fr": { + "name": "version_message_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version_link_text": { + "name": "version_link_text", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version_link_text_fr": { + "name": "version_link_text_fr", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version_link_href": { + "name": "version_link_href", + "type": "varchar", + "primaryKey": false, + "notNull": false + }, + "version__status": { + "name": "version__status", + "type": "enum__announcement_bar_v_version_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'draft'" + }, + "version_updated_at": { + "name": "version_updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "version_created_at": { + "name": "version_created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3) with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "latest": { + "name": "latest", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "_announcement_bar_v_version_version__status_idx": { + "name": "_announcement_bar_v_version_version__status_idx", + "columns": [ + { + "expression": "version__status", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_announcement_bar_v_created_at_idx": { + "name": "_announcement_bar_v_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_announcement_bar_v_updated_at_idx": { + "name": "_announcement_bar_v_updated_at_idx", + "columns": [ + { + "expression": "updated_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "_announcement_bar_v_latest_idx": { + "name": "_announcement_bar_v_latest_idx", + "columns": [ + { + "expression": "latest", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.enum_users_role": { + "name": "enum_users_role", + "schema": "public", + "values": ["admin", "contentEditor", "contentEditorFr"] + }, + "public.enum_legal_status": { + "name": "enum_legal_status", + "schema": "public", + "values": ["draft", "published"] + }, + "public.enum__legal_v_version_status": { + "name": "enum__legal_v_version_status", + "schema": "public", + "values": ["draft", "published"] + }, + "public.enum_audit_log_operation": { + "name": "enum_audit_log_operation", + "schema": "public", + "values": ["create", "read", "update", "delete"] + }, + "public.enum_about_status": { + "name": "enum_about_status", + "schema": "public", + "values": ["draft", "published"] + }, + "public.enum__about_v_version_status": { + "name": "enum__about_v_version_status", + "schema": "public", + "values": ["draft", "published"] + }, + "public.enum_sponsor_status": { + "name": "enum_sponsor_status", + "schema": "public", + "values": ["draft", "published"] + }, + "public.enum__sponsor_v_version_status": { + "name": "enum__sponsor_v_version_status", + "schema": "public", + "values": ["draft", "published"] + }, + "public.enum_volunteer_status": { + "name": "enum_volunteer_status", + "schema": "public", + "values": ["draft", "published"] + }, + "public.enum__volunteer_v_version_status": { + "name": "enum__volunteer_v_version_status", + "schema": "public", + "values": ["draft", "published"] + }, + "public.enum_announcement_bar_status": { + "name": "enum_announcement_bar_status", + "schema": "public", + "values": ["draft", "published"] + }, + "public.enum__announcement_bar_v_version_status": { + "name": "enum__announcement_bar_v_version_status", + "schema": "public", + "values": ["draft", "published"] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + } +} diff --git a/src/migrations/20250525_183845_about_pg.ts b/src/migrations/20250525_183845_about_pg.ts new file mode 100644 index 00000000..a5886b8d --- /dev/null +++ b/src/migrations/20250525_183845_about_pg.ts @@ -0,0 +1,173 @@ +import { MigrateUpArgs, MigrateDownArgs, sql } from "@payloadcms/db-postgres"; + +export async function up({ db, payload, req }: MigrateUpArgs): Promise { + await db.execute(sql` + CREATE TYPE "public"."enum_about_status" AS ENUM('draft', 'published'); + CREATE TYPE "public"."enum__about_v_version_status" AS ENUM('draft', 'published'); + CREATE TABLE IF NOT EXISTS "about_teams_members" ( + "_order" integer NOT NULL, + "_parent_id" varchar NOT NULL, + "id" varchar PRIMARY KEY NOT NULL, + "role" varchar, + "role_fr" varchar, + "name" varchar, + "pronouns" varchar, + "image_id" integer + ); + + CREATE TABLE IF NOT EXISTS "about_teams" ( + "_order" integer NOT NULL, + "_parent_id" integer NOT NULL, + "id" varchar PRIMARY KEY NOT NULL, + "title" varchar, + "title_fr" varchar + ); + + CREATE TABLE IF NOT EXISTS "about" ( + "id" serial PRIMARY KEY NOT NULL, + "page_id" integer, + "group_photo_id" integer, + "group_photo_caption" varchar, + "title" varchar, + "title_fr" varchar, + "introduction" jsonb, + "introduction_fr" jsonb, + "initiative_details" jsonb, + "initiative_details_fr" jsonb, + "_status" "enum_about_status" DEFAULT 'draft', + "updated_at" timestamp(3) with time zone, + "created_at" timestamp(3) with time zone + ); + + CREATE TABLE IF NOT EXISTS "_about_v_version_teams_members" ( + "_order" integer NOT NULL, + "_parent_id" integer NOT NULL, + "id" serial PRIMARY KEY NOT NULL, + "role" varchar, + "role_fr" varchar, + "name" varchar, + "pronouns" varchar, + "image_id" integer, + "_uuid" varchar + ); + + CREATE TABLE IF NOT EXISTS "_about_v_version_teams" ( + "_order" integer NOT NULL, + "_parent_id" integer NOT NULL, + "id" serial PRIMARY KEY NOT NULL, + "title" varchar, + "title_fr" varchar, + "_uuid" varchar + ); + + CREATE TABLE IF NOT EXISTS "_about_v" ( + "id" serial PRIMARY KEY NOT NULL, + "version_page_id" integer, + "version_group_photo_id" integer, + "version_group_photo_caption" varchar, + "version_title" varchar, + "version_title_fr" varchar, + "version_introduction" jsonb, + "version_introduction_fr" jsonb, + "version_initiative_details" jsonb, + "version_initiative_details_fr" jsonb, + "version__status" "enum__about_v_version_status" DEFAULT 'draft', + "version_updated_at" timestamp(3) with time zone, + "version_created_at" timestamp(3) with time zone, + "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, + "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, + "latest" boolean + ); + + DO $$ BEGIN + ALTER TABLE "about_teams_members" ADD CONSTRAINT "about_teams_members_image_id_media_id_fk" FOREIGN KEY ("image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "about_teams_members" ADD CONSTRAINT "about_teams_members_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."about_teams"("id") ON DELETE cascade ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "about_teams" ADD CONSTRAINT "about_teams_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."about"("id") ON DELETE cascade ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "about" ADD CONSTRAINT "about_page_id_pages_id_fk" FOREIGN KEY ("page_id") REFERENCES "public"."pages"("id") ON DELETE set null ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "about" ADD CONSTRAINT "about_group_photo_id_media_id_fk" FOREIGN KEY ("group_photo_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "_about_v_version_teams_members" ADD CONSTRAINT "_about_v_version_teams_members_image_id_media_id_fk" FOREIGN KEY ("image_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "_about_v_version_teams_members" ADD CONSTRAINT "_about_v_version_teams_members_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_about_v_version_teams"("id") ON DELETE cascade ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "_about_v_version_teams" ADD CONSTRAINT "_about_v_version_teams_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."_about_v"("id") ON DELETE cascade ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "_about_v" ADD CONSTRAINT "_about_v_version_page_id_pages_id_fk" FOREIGN KEY ("version_page_id") REFERENCES "public"."pages"("id") ON DELETE set null ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + DO $$ BEGIN + ALTER TABLE "_about_v" ADD CONSTRAINT "_about_v_version_group_photo_id_media_id_fk" FOREIGN KEY ("version_group_photo_id") REFERENCES "public"."media"("id") ON DELETE set null ON UPDATE no action; + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + + CREATE INDEX IF NOT EXISTS "about_teams_members_order_idx" ON "about_teams_members" USING btree ("_order"); + CREATE INDEX IF NOT EXISTS "about_teams_members_parent_id_idx" ON "about_teams_members" USING btree ("_parent_id"); + CREATE INDEX IF NOT EXISTS "about_teams_members_image_idx" ON "about_teams_members" USING btree ("image_id"); + CREATE INDEX IF NOT EXISTS "about_teams_order_idx" ON "about_teams" USING btree ("_order"); + CREATE INDEX IF NOT EXISTS "about_teams_parent_id_idx" ON "about_teams" USING btree ("_parent_id"); + CREATE INDEX IF NOT EXISTS "about_page_idx" ON "about" USING btree ("page_id"); + CREATE INDEX IF NOT EXISTS "about_group_photo_idx" ON "about" USING btree ("group_photo_id"); + CREATE INDEX IF NOT EXISTS "about__status_idx" ON "about" USING btree ("_status"); + CREATE INDEX IF NOT EXISTS "_about_v_version_teams_members_order_idx" ON "_about_v_version_teams_members" USING btree ("_order"); + CREATE INDEX IF NOT EXISTS "_about_v_version_teams_members_parent_id_idx" ON "_about_v_version_teams_members" USING btree ("_parent_id"); + CREATE INDEX IF NOT EXISTS "_about_v_version_teams_members_image_idx" ON "_about_v_version_teams_members" USING btree ("image_id"); + CREATE INDEX IF NOT EXISTS "_about_v_version_teams_order_idx" ON "_about_v_version_teams" USING btree ("_order"); + CREATE INDEX IF NOT EXISTS "_about_v_version_teams_parent_id_idx" ON "_about_v_version_teams" USING btree ("_parent_id"); + CREATE INDEX IF NOT EXISTS "_about_v_version_version_page_idx" ON "_about_v" USING btree ("version_page_id"); + CREATE INDEX IF NOT EXISTS "_about_v_version_version_group_photo_idx" ON "_about_v" USING btree ("version_group_photo_id"); + CREATE INDEX IF NOT EXISTS "_about_v_version_version__status_idx" ON "_about_v" USING btree ("version__status"); + CREATE INDEX IF NOT EXISTS "_about_v_created_at_idx" ON "_about_v" USING btree ("created_at"); + CREATE INDEX IF NOT EXISTS "_about_v_updated_at_idx" ON "_about_v" USING btree ("updated_at"); + CREATE INDEX IF NOT EXISTS "_about_v_latest_idx" ON "_about_v" USING btree ("latest");`); +} + +export async function down({ db, payload, req }: MigrateDownArgs): Promise { + await db.execute(sql` + DROP TABLE "about_teams_members" CASCADE; + DROP TABLE "about_teams" CASCADE; + DROP TABLE "about" CASCADE; + DROP TABLE "_about_v_version_teams_members" CASCADE; + DROP TABLE "_about_v_version_teams" CASCADE; + DROP TABLE "_about_v" CASCADE; + DROP TYPE "public"."enum_about_status"; + DROP TYPE "public"."enum__about_v_version_status";`); +} diff --git a/src/migrations/index.ts b/src/migrations/index.ts index a33ddd2f..c3ea8a53 100644 --- a/src/migrations/index.ts +++ b/src/migrations/index.ts @@ -1,5 +1,6 @@ import * as migration_20250403_154007_remove_root from "./20250403_154007_remove_root"; import * as migration_20250430_051055_sentinel from "./20250430_051055_sentinel"; +import * as migration_20250525_183845_about_pg from "./20250525_183845_about_pg"; export const migrations = [ { @@ -12,4 +13,9 @@ export const migrations = [ down: migration_20250430_051055_sentinel.down, name: "20250430_051055_sentinel", }, + { + up: migration_20250525_183845_about_pg.up, + down: migration_20250525_183845_about_pg.down, + name: "20250525_183845_about_pg", + }, ]; From 58e1eb721dc4aa6f1bcbb43417f7f07615b63e4d Mon Sep 17 00:00:00 2001 From: Atlas Gong <68199735+atlasgong@users.noreply.github.com> Date: Sun, 25 May 2025 14:59:37 -0400 Subject: [PATCH 13/14] fix(about): handle null images in hero and team sections --- src/app/(app)/(pages)/about/page.tsx | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/app/(app)/(pages)/about/page.tsx b/src/app/(app)/(pages)/about/page.tsx index 4ab45b84..94a7c83f 100644 --- a/src/app/(app)/(pages)/about/page.tsx +++ b/src/app/(app)/(pages)/about/page.tsx @@ -24,7 +24,7 @@ function TeamSection({ title, members }: TeamSection) { {members.map((member: TeamMember) => (
- {(member.image + {(member.image

{member.name}

@@ -42,11 +42,7 @@ export default async function AboutPage() { // Fetch the global "about" content from Payload const content = await (await getPayloadClient()).findGlobal({ slug: "about" }); - // If no content or group photo is found, display an error message. - if (!content || !content.groupPhoto || !(content.groupPhoto as Media).url) { - return
Error: Group photo is not set in Payload.
; - } - const groupPhotoURL = (content.groupPhoto as Media).url as string; + const groupPhotoUrl = (content?.groupPhoto as Media)?.url; return ( @@ -57,7 +53,7 @@ export default async function AboutPage() {
{/* Add "group" class here so children can use group-hover */}
- MindVista Team + {groupPhotoUrl ? MindVista Team :
Error: Group photo is not set in Payload.
}

MindVista Team 2024-2025

From 81da645ca7451688ad30605225425a89bd099c6b Mon Sep 17 00:00:00 2001 From: Atlas Gong <68199735+atlasgong@users.noreply.github.com> Date: Tue, 27 May 2025 16:34:41 -0400 Subject: [PATCH 14/14] Revert "fix: change the column name in migration" This reverts commit 9a0eba73dc1a82a86f9427f6a7f6f8788a24cc27. --- src/migrations/20250403_154007_remove_root.json | 4 ++-- src/migrations/20250403_154007_remove_root.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/migrations/20250403_154007_remove_root.json b/src/migrations/20250403_154007_remove_root.json index 1f24d027..da498d03 100644 --- a/src/migrations/20250403_154007_remove_root.json +++ b/src/migrations/20250403_154007_remove_root.json @@ -195,8 +195,8 @@ "primaryKey": false, "notNull": false }, - "thumbnail_url": { - "name": "thumbnail_url", + "thumbnail_u_r_l": { + "name": "thumbnail_u_r_l", "type": "varchar", "primaryKey": false, "notNull": false diff --git a/src/migrations/20250403_154007_remove_root.ts b/src/migrations/20250403_154007_remove_root.ts index 8e704fdb..9c4bd6d3 100644 --- a/src/migrations/20250403_154007_remove_root.ts +++ b/src/migrations/20250403_154007_remove_root.ts @@ -79,7 +79,7 @@ export async function up({ db, payload, req }: MigrateUpArgs): Promise { "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL, "url" varchar, - "thumbnail_url" varchar, + "thumbnail_u_r_l" varchar, "filename" varchar, "mime_type" varchar, "filesize" numeric,