From 0eb91d67dd69488957d4ba76dd680e38c55fb667 Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Tue, 6 May 2025 12:31:44 -0400 Subject: [PATCH] fix strapi urls and shit --- src/app.d.ts | 7 ++-- src/hooks.server.ts | 25 +++++++---- src/lib/server/index.ts | 0 src/lib/server/strapi/index.ts | 31 ++++++++++++++ src/routes/blog/+page.server.ts | 58 +++++++++++--------------- src/routes/blog/+page.svelte | 3 +- src/routes/blog/[slug]/+page.server.ts | 28 ++++--------- src/routes/blog/[slug]/+page.svelte | 6 +-- 8 files changed, 92 insertions(+), 66 deletions(-) create mode 100644 src/lib/server/index.ts create mode 100644 src/lib/server/strapi/index.ts diff --git a/src/app.d.ts b/src/app.d.ts index 224968c..a061326 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -1,12 +1,13 @@ // See https://svelte.dev/docs/kit/types#app.d.ts + +import type { Strapi } from "$lib/server/strapi"; + // for information about these interfaces declare global { namespace App { // interface Error {} interface Locals { - Strapi: { - url: string; - }; + strapi: Strapi; } // interface PageData {} // interface PageState {} diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 0c762e3..aa44e2a 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1,20 +1,31 @@ -import { env } from '$env/dynamic/private'; -import type { Handle, HandleServerError } from '@sveltejs/kit'; -import { randomUUID } from 'crypto'; +import { env } from "$env/dynamic/private"; +import { Strapi } from "$lib/server/strapi"; +import type { Handle, HandleServerError } from "@sveltejs/kit"; +import { randomUUID } from "crypto"; -export const handleError: HandleServerError = async ({ error, event, message, status }) => { +export const handleError: HandleServerError = async ({ + error, + event, + message, + status, +}) => { const errorId = randomUUID(); console.error(error, { errorId, event, message, status }); return { - message: 'An Internal Error Occurred', - errorId + message: "An Internal Error Occurred", + errorId, }; }; export const handle: Handle = async ({ event, resolve }) => { - event.locals.Strapi.url = `http://${env.STRAPI_HOST}:${env.STRAPI_PORT}`; + event.locals = { + strapi: new Strapi( + `http://${env.STRAPI_HOST}:${env.STRAPI_PORT}`, + env.STRAPI_TOKEN, + ), + }; const response = await resolve(event); return response; diff --git a/src/lib/server/index.ts b/src/lib/server/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/lib/server/strapi/index.ts b/src/lib/server/strapi/index.ts new file mode 100644 index 0000000..175b98c --- /dev/null +++ b/src/lib/server/strapi/index.ts @@ -0,0 +1,31 @@ +import { strapi, type StrapiClient } from "@strapi/client"; + +export class Strapi { + private readonly client: StrapiClient; + + constructor( + public readonly url: string, + auth: string, + ) { + this.client = strapi({ + baseURL: `${url}/api`, + auth: auth, + }); + } + + async Blogs() { + const blogs = this.client.collection("blogs"); + + return await blogs.find({ + populate: ["Header", "Topics"], + }); + } + + async Blog(id: string) { + const blogs = this.client.collection("blogs"); + + return await blogs.findOne(id, { + populate: ["Header", "Topics"], + }); + } +} diff --git a/src/routes/blog/+page.server.ts b/src/routes/blog/+page.server.ts index 20a8a5f..1f8f73a 100644 --- a/src/routes/blog/+page.server.ts +++ b/src/routes/blog/+page.server.ts @@ -1,39 +1,31 @@ -import { env } from '$env/dynamic/private'; -import { strapi } from '@strapi/client'; -import type { PageServerLoad } from './$types'; +import { error } from "@sveltejs/kit"; +import type { PageServerLoad } from "./$types"; export const load: PageServerLoad = async ({ locals }) => { - const { Strapi } = locals; + const { strapi } = locals; - const client = strapi({ - baseURL: Strapi.url, - auth: env.STRAPI_TOKEN - }); + try { + const { data, meta } = await strapi.Blogs(); - const blogs = client.collection('blogs'); - - const { data, meta } = await blogs.find({ - populate: ['Header', 'Topics'] - }); - - return { - strapi: { - url: Strapi.url - }, - posts: data.map((post) => ({ - id: post.documentId, - image: { - url: `${Strapi.url}${post.Header.formats.medium.url}`, - alt: post.Header.alternativeText - }, - title: post.Title, - body: post.Body, - topics: post.Topics.map((topic: { id: string; Topic: string }) => ({ - id: topic.id, - name: topic.Topic + return { + posts: data.map((post) => ({ + id: post.documentId, + image: { + url: post.Header.formats.medium.url, + alt: post.Header.alternativeText, + }, + title: post.Title, + body: post.Body, + topics: post.Topics.map((topic: { id: string; Topic: string }) => ({ + id: topic.id, + name: topic.Topic, + })), + published: post.publishedAt, })), - published: post.publishedAt - })), - meta - }; + meta, + }; + } catch (err) { + console.log("Uh-oh!"); + error(500, err.message); + } }; diff --git a/src/routes/blog/+page.svelte b/src/routes/blog/+page.svelte index 4f4902e..13b82b3 100644 --- a/src/routes/blog/+page.svelte +++ b/src/routes/blog/+page.svelte @@ -1,4 +1,5 @@