import { postgresAdapter } from "@payloadcms/db-postgres"; import { lexicalEditor } from "@payloadcms/richtext-lexical"; import path from "path"; import { buildConfig } from "payload"; import { fileURLToPath } from "url"; import sharp from "sharp"; import { Users } from "@/collections/Users"; import { Media } from "@/collections/Media"; import { Events } from "@/collections/Events"; import { Posts } from "@/collections/Posts"; import { Offers } from "@/collections/Offers"; import { EventRegistrations } from "@/collections/EventRegistrations"; import { Customers } from "@/collections/Customers"; import { Availability } from "@/collections/Availability"; import { AvailabilityOverrides } from "@/collections/AvailabilityOverrides"; import { BookingRequests } from "@/collections/BookingRequests"; import { Conversations } from "@/collections/Conversations"; import { ConversationMessages } from "@/collections/ConversationMessages"; import { GroupRegistrations } from "@/collections/GroupRegistrations"; import { Redirects } from "@/collections/Redirects"; import { AnalyticsEvents } from "@/collections/AnalyticsEvents"; import { AnalyticsDailyStats } from "@/collections/AnalyticsDailyStats"; import { Home } from "@/globals/Home"; import { About } from "@/globals/About"; import { AngeboteIntro } from "@/globals/AngeboteIntro"; import { AktuellesIntro } from "@/globals/AktuellesIntro"; import { Contact } from "@/globals/Contact"; import { Booking } from "@/globals/Booking"; import { MeetingSettings } from "@/globals/MeetingSettings"; import { BookingSettings } from "@/globals/BookingSettings"; import { SEOSettings } from "@/globals/SEOSettings"; import { CookieSettings } from "@/globals/CookieSettings"; import { AnalyticsSettings } from "@/globals/AnalyticsSettings"; import { payloadEmailAdapter } from "@/lib/email/payloadAdapter"; const filename = fileURLToPath(import.meta.url); const dirname = path.dirname(filename); export default buildConfig({ serverURL: process.env.NEXT_PUBLIC_SERVER_URL || "http://localhost:3000", admin: { user: Users.slug, importMap: { baseDir: path.resolve(dirname), }, meta: { titleSuffix: "— Anouma Admin", }, components: { afterNavLinks: [ "/components/admin/CalendarNavLink#CalendarNavLink", "/components/admin/AnalyticsNavLink#AnalyticsNavLink", "/components/admin/ConversationsNavLink#ConversationsNavLink", ], views: { kalender: { Component: "/components/admin/AdminCalendarView#AdminCalendarView", path: "/kalender", exact: true, meta: { title: "Kalender" }, }, analytics: { Component: "/components/admin/AdminAnalyticsView#AdminAnalyticsView", path: "/analytics", exact: true, meta: { title: "Analytics" }, }, anfragen: { Component: "/components/admin/AdminConversationsView#AdminConversationsView", path: "/anfragen", exact: true, meta: { title: "Anfragen" }, }, }, }, }, collections: [ Users, Customers, Media, Events, Posts, Offers, EventRegistrations, Availability, AvailabilityOverrides, BookingRequests, Conversations, ConversationMessages, GroupRegistrations, Redirects, AnalyticsEvents, AnalyticsDailyStats, ], globals: [ Home, About, AngeboteIntro, AktuellesIntro, Contact, Booking, MeetingSettings, BookingSettings, SEOSettings, CookieSettings, AnalyticsSettings, ], editor: lexicalEditor(), email: payloadEmailAdapter, graphQL: { disablePlaygroundInProduction: true, disableIntrospectionInProduction: true, }, secret: process.env.PAYLOAD_SECRET || "", typescript: { outputFile: path.resolve(dirname, "payload-types.ts"), }, db: postgresAdapter({ pool: { connectionString: process.env.DATABASE_URI || "", }, }), sharp, // Server-side upload size limit; the Media collection restricts formats. upload: { limits: { fileSize: 10 * 1024 * 1024, // 10 MB }, }, plugins: [], });