From e23c077a0531d83521438df959d99f2b1d799c8c Mon Sep 17 00:00:00 2001 From: Quinn Hegeman <102350242+itsfinniii@users.noreply.github.com> Date: Sat, 7 Mar 2026 19:22:06 +0100 Subject: [PATCH] Make a function to get all website settings --- astro/src/content/settings/settings.ts | 133 ++++++++++++++++++++ astro/src/graphql/settings/settings.graphql | 124 ++++++++++++++++++ astro/src/pages/index.astro | 3 + astro/src/types/settings/blog.d.ts | 9 ++ astro/src/types/settings/photo.d.ts | 37 ++++++ astro/src/types/settings/plugin.d.ts | 8 ++ astro/src/types/settings/project.d.ts | 9 ++ astro/src/types/settings/setting.d.ts | 8 ++ astro/src/types/settings/sitemap.d.ts | 3 + astro/src/types/settings/website.d.ts | 32 +++++ 10 files changed, 366 insertions(+) create mode 100644 astro/src/content/settings/settings.ts create mode 100644 astro/src/graphql/settings/settings.graphql create mode 100644 astro/src/types/settings/blog.d.ts create mode 100644 astro/src/types/settings/photo.d.ts create mode 100644 astro/src/types/settings/plugin.d.ts create mode 100644 astro/src/types/settings/project.d.ts create mode 100644 astro/src/types/settings/setting.d.ts create mode 100644 astro/src/types/settings/sitemap.d.ts create mode 100644 astro/src/types/settings/website.d.ts diff --git a/astro/src/content/settings/settings.ts b/astro/src/content/settings/settings.ts new file mode 100644 index 0000000..38075d0 --- /dev/null +++ b/astro/src/content/settings/settings.ts @@ -0,0 +1,133 @@ +import { print } from 'graphql'; +import { createDirectusConnection } from "@/lib/directus"; +import getSettingsQuery from '@/graphql/settings/settings.graphql'; + +export async function getSettings(): Promise { + const client = await createDirectusConnection(); + const result = await client.query(print(getSettingsQuery)); + + const websiteResults = result["Website_Settings"]; + const websiteSettings: WebsiteSettings = { + domainName: websiteResults["domain_name"], + titleTemplate: websiteResults["title_template"], + applicationName: websiteResults["application_name"], + colors: { + primary: websiteResults["primary_color"], + secondary: websiteResults["secondary_color"] + }, + author: { + name: websiteResults["author_name"], + url: websiteResults["author_url"] + }, + owner: websiteResults["owner"], + designer: websiteResults["designer"], + developer: websiteResults["developer"], + copyright: websiteResults["copyright"], + twitter: { + id: websiteResults["twitter_id"], + handle: websiteResults["twitter_handle"] + } + }; + + const blogResults = result["Blog_Settings"]; + const blogSettings: BlogSettings = { + enabled: blogResults["enabled"], + title: blogResults["title"], + subtext: blogResults["subtext"], + indexRouteTemplate: blogResults["index_route_template"], + blogRouteTemplate: blogResults["blog_route_template"] + }; + + const projectResults = result["Project_Settings"]; + const projectSettings: ProjectSettings = { + enabled: projectResults["enabled"], + title: projectResults["title"], + subtext: projectResults["subtext"], + indexRouteTemplate: projectResults["index_route_template"], + projectRouteTemplate: projectResults["project_route_template"] + }; + + const photoResults = result["Photo_Settings"]; + const photoSettings: WebsitePhotoSettings = { + enabled: photoResults["enabled"], + categoryIndex: { + indexRouteTemplate: photoResults["categories_index_route_template_url"] + }, + category: { + routeTemplate: photoResults["category_route_template_url"], + perPage: photoResults["albums_per_category_page"], + icons: { + photos: { + url: photoResults["category_icons"]["photos_icon"]["filename_download"], + height: photoResults["category_icons"]["photos_icon"]["height"], + width: photoResults["category_icons"]["photos_icon"]["width"] + }, + location: { + url: photoResults["category_icons"]["location_icon"]["filename_download"], + height: photoResults["category_icons"]["location_icon"]["height"], + width: photoResults["category_icons"]["location_icon"]["width"] + }, + date: { + url: photoResults["category_icons"]["date_icon"]["filename_download"], + height: photoResults["category_icons"]["date_icon"]["height"], + width: photoResults["category_icons"]["date_icon"]["width"] + } + } + }, + album: { + routeTemplate: photoResults["album_route_template_url"], + perPage: photoResults["photos_per_album_page"] + }, + photo: { + routeTemplate: photoResults["photo_route_template_url"], + icons: { + previous: { + url: photoResults["photo_icons"]["previous_icon"]["filename_download"], + height: photoResults["photo_icons"]["previous_icon"]["height"], + width: photoResults["photo_icons"]["previous_icon"]["width"] + }, + next: { + url: photoResults["photo_icons"]["next_icon"]["filename_download"], + height: photoResults["photo_icons"]["next_icon"]["height"], + width: photoResults["photo_icons"]["next_icon"]["width"] + }, + close: { + url: photoResults["photo_icons"]["close_icon"]["filename_download"], + height: photoResults["photo_icons"]["close_icon"]["height"], + width: photoResults["photo_icons"]["close_icon"]["width"] + }, + download: { + url: photoResults["photo_icons"]["download_icon"]["filename_download"], + height: photoResults["photo_icons"]["download_icon"]["height"], + width: photoResults["photo_icons"]["download_icon"]["width"] + } + } + } + }; + + const sitemapResults = result["Sitemap_Settings"]; + const sitemapSettings: SitemapSettings = { + perPage: sitemapResults["per_page"] + }; + + const pluginResults = result["Plugin_Settings"]; + const pluginSettings: PluginSettings = { + swetrix: { + id: pluginResults["swetrix_id"], + url: pluginResults["swetrix_url"] + } + } + + if (pluginResults["swetrix_id"] === null && pluginResults["swetrix_url"] === null) { + pluginSettings.swetrix = null; + } + + return { + website: websiteSettings, + blog: blogSettings, + project: projectSettings, + photo: photoSettings, + sitemap: sitemapSettings, + plugins: pluginSettings + } +} diff --git a/astro/src/graphql/settings/settings.graphql b/astro/src/graphql/settings/settings.graphql new file mode 100644 index 0000000..77e4fcc --- /dev/null +++ b/astro/src/graphql/settings/settings.graphql @@ -0,0 +1,124 @@ +query getAllSettings { + Website_Settings { + id, + date_created, + date_updated, + domain_name, + title_template, + application_name, + primary_color, + secondary_color, + author_name, + author_url, + designer, + developer, + owner, + copyright, + twitter_id, + twitter_handle + }, + Blog_Settings { + id, + date_created, + date_updated, + enabled, + title, + subtext, + index_route_template, + blog_route_template + }, + Project_Settings { + id, + date_created, + date_updated, + enabled, + title, + subtext, + index_route_template, + project_route_template + }, + Photo_Settings { + id, + date_created, + date_updated, + enabled, + categories_index_route_template_url, + category_route_template_url, + albums_per_category_page, + category_icons { + id, + date_created, + date_updated, + photos_icon { + id, + created_on, + filename_download, + width, + height + }, + location_icon { + id, + created_on, + filename_download, + width, + height + }, + date_icon { + id, + created_on, + filename_download, + width, + height + } + }, + album_route_template_url, + photos_per_album_page, + photo_route_template_url, + photo_icons { + id, + date_created, + date_updated, + previous_icon { + id, + created_on, + filename_download, + width, + height + }, + next_icon { + id, + created_on, + filename_download, + width, + height + }, + close_icon { + id, + created_on, + filename_download, + width, + height + }, + download_icon { + id, + created_on, + filename_download, + width, + height + } + } + }, + Sitemap_Settings { + id, + date_created, + date_updated, + per_page + }, + Plugin_Settings { + id, + date_created, + date_updated, + swetrix_id, + swetrix_url + } +} \ No newline at end of file diff --git a/astro/src/pages/index.astro b/astro/src/pages/index.astro index 561196b..f8f175e 100644 --- a/astro/src/pages/index.astro +++ b/astro/src/pages/index.astro @@ -1,5 +1,8 @@ --- +import { getSettings } from "@/content/settings/settings" +const settings = await getSettings(); +console.log(settings); --- diff --git a/astro/src/types/settings/blog.d.ts b/astro/src/types/settings/blog.d.ts new file mode 100644 index 0000000..d76fecd --- /dev/null +++ b/astro/src/types/settings/blog.d.ts @@ -0,0 +1,9 @@ +type BlogSettings = { + enabled: string; + + title: string; + subtext: string | null; + + indexRouteTemplate: string; + blogRouteTemplate: string; +} diff --git a/astro/src/types/settings/photo.d.ts b/astro/src/types/settings/photo.d.ts new file mode 100644 index 0000000..37f7997 --- /dev/null +++ b/astro/src/types/settings/photo.d.ts @@ -0,0 +1,37 @@ +type WebsitePhotoSettings = { + enabled: boolean; + + categoryIndex: WebsitePhotoSettingsCategoryIndex; + category: WebsitePhotoSettingsCategory; + album: WebsitePhotoSettingsAlbum; + photo: WebsitePhotoSettingsPhoto; +} + +type WebsitePhotoSettingsCategoryIndex = { + indexRouteTemplate: string; +} + +type WebsitePhotoSettingsCategory = { + routeTemplate: string; + perPage: number; + icons: { + photos: PhotoProps; + location: PhotoProps; + date: PhotoProps; + } +} + +type WebsitePhotoSettingsAlbum = { + routeTemplate: string; + perPage: number; +} + +type WebsitePhotoSettingsPhoto = { + routeTemplate: string; + icons: { + previous: PhotoProps; + next: PhotoProps; + close: PhotoProps; + download: PhotoProps; + } +} diff --git a/astro/src/types/settings/plugin.d.ts b/astro/src/types/settings/plugin.d.ts new file mode 100644 index 0000000..ad46ae2 --- /dev/null +++ b/astro/src/types/settings/plugin.d.ts @@ -0,0 +1,8 @@ +type PluginSettings = { + swetrix: PluginSettingsSwetrix | null; +} + +type PluginSettingsSwetrix = { + id: string | null; + url: string | null; +} diff --git a/astro/src/types/settings/project.d.ts b/astro/src/types/settings/project.d.ts new file mode 100644 index 0000000..5757550 --- /dev/null +++ b/astro/src/types/settings/project.d.ts @@ -0,0 +1,9 @@ +type ProjectSettings = { + enabled: string; + + title: string; + subtext: string | null; + + indexRouteTemplate: string; + projectRouteTemplate: string; +} diff --git a/astro/src/types/settings/setting.d.ts b/astro/src/types/settings/setting.d.ts new file mode 100644 index 0000000..52ebd74 --- /dev/null +++ b/astro/src/types/settings/setting.d.ts @@ -0,0 +1,8 @@ +type GlobalSettings = { + website: WebsiteSettings; + blog: BlogSettings; + project: ProjectSettings; + photo: WebsitePhotoSettings; + sitemap: SitemapSettings; + plugins: PluginSettings; +} diff --git a/astro/src/types/settings/sitemap.d.ts b/astro/src/types/settings/sitemap.d.ts new file mode 100644 index 0000000..252ceb0 --- /dev/null +++ b/astro/src/types/settings/sitemap.d.ts @@ -0,0 +1,3 @@ +type SitemapSettings = { + perPage: number; +} diff --git a/astro/src/types/settings/website.d.ts b/astro/src/types/settings/website.d.ts new file mode 100644 index 0000000..7d4ec28 --- /dev/null +++ b/astro/src/types/settings/website.d.ts @@ -0,0 +1,32 @@ +type WebsiteSettings = { + domainName: string; + titleTemplate: string; + applicationName: string; + + colors: WebsiteSettingsColors; + + author: WebsiteSettingsAuthor; + + owner: string; + designer: string; + developer: string; + copyright: string; + + twitter: WebsiteSettingsTwitter; +} + +type WebsiteSettingsColors = { + primary: string; + secondary: string | null; +} + +type WebsiteSettingsAuthor = { + name: string; + url: string; +} + +type WebsiteSettingsTwitter = { + id: string; + handle: string; +} +