fix strapi urls and shit
All checks were successful
Deployment / Deploy website (push) Successful in 2m32s
Deployment / Deploy strapi (push) Successful in 3m5s

This commit is contained in:
Benjamin Palko 2025-05-06 12:31:44 -04:00
parent 0e94cb95ca
commit 0eb91d67dd
8 changed files with 92 additions and 66 deletions

7
src/app.d.ts vendored
View file

@ -1,12 +1,13 @@
// See https://svelte.dev/docs/kit/types#app.d.ts // See https://svelte.dev/docs/kit/types#app.d.ts
import type { Strapi } from "$lib/server/strapi";
// for information about these interfaces // for information about these interfaces
declare global { declare global {
namespace App { namespace App {
// interface Error {} // interface Error {}
interface Locals { interface Locals {
Strapi: { strapi: Strapi;
url: string;
};
} }
// interface PageData {} // interface PageData {}
// interface PageState {} // interface PageState {}

View file

@ -1,20 +1,31 @@
import { env } from '$env/dynamic/private'; import { env } from "$env/dynamic/private";
import type { Handle, HandleServerError } from '@sveltejs/kit'; import { Strapi } from "$lib/server/strapi";
import { randomUUID } from 'crypto'; 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(); const errorId = randomUUID();
console.error(error, { errorId, event, message, status }); console.error(error, { errorId, event, message, status });
return { return {
message: 'An Internal Error Occurred', message: "An Internal Error Occurred",
errorId errorId,
}; };
}; };
export const handle: Handle = async ({ event, resolve }) => { 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); const response = await resolve(event);
return response; return response;

0
src/lib/server/index.ts Normal file
View file

View file

@ -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"],
});
}
}

View file

@ -1,39 +1,31 @@
import { env } from '$env/dynamic/private'; import { error } from "@sveltejs/kit";
import { strapi } from '@strapi/client'; import type { PageServerLoad } from "./$types";
import type { PageServerLoad } from './$types';
export const load: PageServerLoad = async ({ locals }) => { export const load: PageServerLoad = async ({ locals }) => {
const { Strapi } = locals; const { strapi } = locals;
const client = strapi({ try {
baseURL: Strapi.url, const { data, meta } = await strapi.Blogs();
auth: env.STRAPI_TOKEN
});
const blogs = client.collection('blogs');
const { data, meta } = await blogs.find({
populate: ['Header', 'Topics']
});
return { return {
strapi: {
url: Strapi.url
},
posts: data.map((post) => ({ posts: data.map((post) => ({
id: post.documentId, id: post.documentId,
image: { image: {
url: `${Strapi.url}${post.Header.formats.medium.url}`, url: post.Header.formats.medium.url,
alt: post.Header.alternativeText alt: post.Header.alternativeText,
}, },
title: post.Title, title: post.Title,
body: post.Body, body: post.Body,
topics: post.Topics.map((topic: { id: string; Topic: string }) => ({ topics: post.Topics.map((topic: { id: string; Topic: string }) => ({
id: topic.id, id: topic.id,
name: topic.Topic name: topic.Topic,
})), })),
published: post.publishedAt published: post.publishedAt,
})), })),
meta meta,
}; };
} catch (err) {
console.log("Uh-oh!");
error(500, err.message);
}
}; };

View file

@ -1,4 +1,5 @@
<script lang="ts"> <script lang="ts">
import { env } from '$env/dynamic/public';
import BlogCard from '$lib/components/BlogCard.svelte'; import BlogCard from '$lib/components/BlogCard.svelte';
import type { PageProps } from './$types'; import type { PageProps } from './$types';
@ -15,7 +16,7 @@
{#each posts as post (post.id)} {#each posts as post (post.id)}
<BlogCard <BlogCard
id={post.id} id={post.id}
img={post.image.url} img={`${env.PUBLIC_STRAPI_HOST}${post.image.url}`}
img-alt={post.image.alt} img-alt={post.image.alt}
title={post.title} title={post.title}
published={post.published} published={post.published}

View file

@ -1,37 +1,27 @@
import { env } from '$env/dynamic/private'; import type { PageServerLoad } from "./$types";
import { strapi } from '@strapi/client';
import type { PageServerLoad } from './$types';
export const load: PageServerLoad = async ({ locals, params }) => { export const load: PageServerLoad = async ({ locals, params }) => {
const { slug } = params; const { slug } = params;
const { Strapi } = locals; const { strapi } = locals;
const client = strapi({ const { data: post, meta } = await strapi.Blog(slug);
baseURL: Strapi.url,
auth: env.STRAPI_TOKEN
});
const blogs = client.collection('blogs');
const { data: post, meta } = await blogs.findOne(slug, {
populate: ['Header', 'Topics']
});
return { return {
post: { post: {
id: post.documentId, id: post.documentId,
image: { image: {
url: `${Strapi.url}${post.Header.url}`, url: post.Header.url,
alt: post.Header.alternativeText alt: post.Header.alternativeText,
caption: post.Header.caption,
}, },
title: post.Title, title: post.Title,
body: post.Body, body: post.Body,
topics: post.Topics.map((topic: { id: string; Topic: string }) => ({ topics: post.Topics.map((topic: { id: string; Topic: string }) => ({
id: topic.id, id: topic.id,
name: topic.Topic name: topic.Topic,
})), })),
published: post.publishedAt published: post.publishedAt,
}, },
meta meta,
}; };
}; };

View file

@ -1,8 +1,8 @@
<script lang="ts"> <script lang="ts">
import dayjs from 'dayjs';
import type { PageProps } from './$types';
import { compile } from 'mdsvex';
import { env } from '$env/dynamic/public'; import { env } from '$env/dynamic/public';
import dayjs from 'dayjs';
import { compile } from 'mdsvex';
import type { PageProps } from './$types';
let { data }: PageProps = $props(); let { data }: PageProps = $props();