forked from ProjectSegfault/website
preload data for all
This commit is contained in:
parent
727bfdaae7
commit
4074e775b1
@ -5,7 +5,7 @@ import type { Provider } from "@auth/core/providers";
|
|||||||
import type { Profile } from "@auth/core/types";
|
import type { Profile } from "@auth/core/types";
|
||||||
import { redirect, type Handle } from "@sveltejs/kit";
|
import { redirect, type Handle } from "@sveltejs/kit";
|
||||||
import { sequence } from "@sveltejs/kit/hooks";
|
import { sequence } from "@sveltejs/kit/hooks";
|
||||||
import { announcements } from "./stores";
|
import { announcements, pubnixUsers, blogPosts, blogTags, blogAuthors } from "./stores";
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import { Agent } from "https";
|
import { Agent } from "https";
|
||||||
|
|
||||||
@ -59,6 +59,19 @@ export const handle: Handle = sequence(
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
export const fetchGhost = async (action: string, additional?: string) => {
|
||||||
|
return await axios(
|
||||||
|
env.GHOST_URL +
|
||||||
|
"/ghost/api/content/" +
|
||||||
|
action +
|
||||||
|
"/?key=" +
|
||||||
|
env.GHOST_API_KEY +
|
||||||
|
"&include=authors,tags&limit=all&formats=html,plaintext" +
|
||||||
|
(additional ? additional : ""),
|
||||||
|
{ httpsAgent: agent, timeout: 10000 }
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const updateMap = async () => {
|
const updateMap = async () => {
|
||||||
try {
|
try {
|
||||||
const res = await axios(
|
const res = await axios(
|
||||||
@ -74,6 +87,57 @@ const updateMap = async () => {
|
|||||||
} catch (err) {
|
} catch (err) {
|
||||||
announcements.set({ error: true, message: "Error: " + err });
|
announcements.set({ error: true, message: "Error: " + err });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const res = await axios(
|
||||||
|
"https://publapi.p.projectsegfau.lt/users",
|
||||||
|
{ httpsAgent: agent, timeout: 10000 }
|
||||||
|
);
|
||||||
|
|
||||||
|
if (res.status === 200) {
|
||||||
|
pubnixUsers.set(res.data);
|
||||||
|
} else {
|
||||||
|
pubnixUsers.set({ error: true, message: "Error: " + res.status });
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
pubnixUsers.set({ error: true, message: "Error: " + err });
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const res = await fetchGhost("posts");
|
||||||
|
|
||||||
|
if (res.status === 200) {
|
||||||
|
blogPosts.set(res.data);
|
||||||
|
} else {
|
||||||
|
blogPosts.set({ error: true, message: "Error: " + res.status });
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
blogPosts.set({ error: true, message: "Error: " + err });
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const res = await fetchGhost("tags");
|
||||||
|
|
||||||
|
if (res.status === 200) {
|
||||||
|
blogTags.set(res.data);
|
||||||
|
} else {
|
||||||
|
blogTags.set({ error: true, message: "Error: " + res.status });
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
blogTags.set({ error: true, message: "Error: " + err });
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const res = await fetchGhost("authors");
|
||||||
|
|
||||||
|
if (res.status === 200) {
|
||||||
|
blogAuthors.set(res.data);
|
||||||
|
} else {
|
||||||
|
blogAuthors.set({ error: true, message: "Error: " + res.status });
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
blogAuthors.set({ error: true, message: "Error: " + err });
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
updateMap();
|
updateMap();
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
import type { PageServerLoad } from "./$types";
|
import type { PageServerLoad } from "./$types";
|
||||||
import fetchGhost from "./fetchGhost";
|
import { blogPosts } from "../../stores";
|
||||||
|
import { get } from "svelte/store";
|
||||||
|
|
||||||
export const load = (async ({ fetch }) => {
|
export const load = (async () => {
|
||||||
const meta = {
|
const meta = {
|
||||||
title: "Blog"
|
title: "Blog"
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
posts: fetchGhost("posts"),
|
posts: get(blogPosts),
|
||||||
...meta
|
...meta
|
||||||
};
|
};
|
||||||
}) satisfies PageServerLoad;
|
}) satisfies PageServerLoad;
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
import type { PageServerLoad } from "./$types";
|
import type { PageServerLoad } from "./$types";
|
||||||
import fetchGhost from "../fetchGhost";
|
import fetchGhost from "../fetchGhost";
|
||||||
|
import { blogPosts } from "../../../stores";
|
||||||
|
import { get } from "svelte/store";
|
||||||
|
|
||||||
export const load = (async ({ params, fetch }) => {
|
export const load = (async ({ params, fetch }) => {
|
||||||
const data = await fetchGhost("posts/slug/" + params.title);
|
const data = await fetchGhost("posts/slug/" + params.title);
|
||||||
|
|
||||||
const allPosts = await fetchGhost("posts");
|
const allPosts = get(blogPosts);
|
||||||
|
|
||||||
const meta = {
|
const meta = {
|
||||||
title: !allPosts.error ? data.posts[0].title : ""
|
title: !allPosts.error ? data.posts[0].title : ""
|
||||||
};
|
};
|
||||||
|
@ -1,23 +1,8 @@
|
|||||||
import { env } from "$env/dynamic/private";
|
import { fetchGhost as func } from "../../hooks.server";
|
||||||
import axios from "axios";
|
|
||||||
import { Agent } from "https";
|
|
||||||
|
|
||||||
const agent = new Agent({
|
|
||||||
family: 4
|
|
||||||
});
|
|
||||||
|
|
||||||
const fetchGhost = async (action: string, additional?: string) => {
|
const fetchGhost = async (action: string, additional?: string) => {
|
||||||
try {
|
try {
|
||||||
const request = await axios(
|
const request = await func(action, additional);
|
||||||
env.GHOST_URL +
|
|
||||||
"/ghost/api/content/" +
|
|
||||||
action +
|
|
||||||
"/?key=" +
|
|
||||||
env.GHOST_API_KEY +
|
|
||||||
"&include=authors,tags&limit=all&formats=html,plaintext" +
|
|
||||||
(additional ? additional : ""),
|
|
||||||
{ httpsAgent: agent }
|
|
||||||
);
|
|
||||||
|
|
||||||
if (request.status === 200) {
|
if (request.status === 200) {
|
||||||
return request.data;
|
return request.data;
|
||||||
|
@ -1,26 +1,14 @@
|
|||||||
import type { PageServerLoad } from "./$types";
|
import type { PageServerLoad } from "./$types";
|
||||||
|
import { pubnixUsers } from "../../stores";
|
||||||
|
import { get } from "svelte/store";
|
||||||
|
|
||||||
export const load = (async ({ fetch }) => {
|
export const load = (async () => {
|
||||||
const meta = {
|
const meta = {
|
||||||
title: "Pubnix"
|
title: "Pubnix"
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
return {
|
||||||
const request = await fetch("https://publapi.p.projectsegfau.lt/users");
|
users: get(pubnixUsers),
|
||||||
|
...meta
|
||||||
if (request.ok) {
|
|
||||||
return {
|
|
||||||
users: await request.json(),
|
|
||||||
...meta
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
return {
|
|
||||||
error: true,
|
|
||||||
message: "Error: " + request.status,
|
|
||||||
...meta
|
|
||||||
};
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
return { error: true, message: "Error: " + err, ...meta };
|
|
||||||
}
|
}
|
||||||
}) satisfies PageServerLoad;
|
}) satisfies PageServerLoad;
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
<h2>Online users</h2>
|
<h2>Online users</h2>
|
||||||
|
|
||||||
{#if !data.error}
|
{#if !data.users.error}
|
||||||
{#if data.users.users.some(isOnline)}
|
{#if data.users.users.some(isOnline)}
|
||||||
<div class="flex flex-row flex-wrap gap-4">
|
<div class="flex flex-row flex-wrap gap-4">
|
||||||
{#each data.users.users as user}
|
{#each data.users.users as user}
|
||||||
@ -44,5 +44,5 @@
|
|||||||
<p>No users online</p>
|
<p>No users online</p>
|
||||||
{/if}
|
{/if}
|
||||||
{:else}
|
{:else}
|
||||||
<p>{data.message}</p>
|
<p>{data.users.message}</p>
|
||||||
{/if}
|
{/if}
|
||||||
|
@ -1,26 +1,14 @@
|
|||||||
import type { PageServerLoad } from "./$types";
|
import type { PageServerLoad } from "./$types";
|
||||||
|
import { pubnixUsers } from "../../../stores";
|
||||||
|
import { get } from "svelte/store";
|
||||||
|
|
||||||
export const load = (async ({ fetch }) => {
|
export const load = (async () => {
|
||||||
const meta = {
|
const meta = {
|
||||||
title: "Pubnix users"
|
title: "Pubnix users"
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
return {
|
||||||
const request = await fetch("https://publapi.p.projectsegfau.lt/users");
|
users: get(pubnixUsers),
|
||||||
|
...meta
|
||||||
if (request.ok) {
|
|
||||||
return {
|
|
||||||
users: await request.json(),
|
|
||||||
...meta
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
return {
|
|
||||||
error: true,
|
|
||||||
message: "Error: " + request.status,
|
|
||||||
...meta
|
|
||||||
};
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
return { error: true, message: "Error: " + err, ...meta };
|
|
||||||
}
|
}
|
||||||
}) satisfies PageServerLoad;
|
}) satisfies PageServerLoad;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
<h1>{data.title}</h1>
|
<h1>{data.title}</h1>
|
||||||
|
|
||||||
{#if !data.error}
|
{#if !data.users.error}
|
||||||
{#if data.users.users.length > 0}
|
{#if data.users.users.length > 0}
|
||||||
<div class="flex flex-row flex-wrap gap-4">
|
<div class="flex flex-row flex-wrap gap-4">
|
||||||
{#each data.users.users as user}
|
{#each data.users.users as user}
|
||||||
@ -18,5 +18,5 @@
|
|||||||
<p>No users</p>
|
<p>No users</p>
|
||||||
{/if}
|
{/if}
|
||||||
{:else}
|
{:else}
|
||||||
<p>{data.message}</p>
|
<p>{data.users.message}</p>
|
||||||
{/if}
|
{/if}
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
import { writable, type Writable } from "svelte/store";
|
import { writable, type Writable } from "svelte/store";
|
||||||
|
|
||||||
export const announcements: Writable<{}> = writable({});
|
export const announcements: Writable<{}> = writable({});
|
||||||
|
|
||||||
|
export const pubnixUsers: Writable<{}> = writable({});
|
||||||
|
|
||||||
|
export const blogPosts: Writable<{}> = writable({});
|
||||||
|
|
||||||
|
export const blogTags: Writable<{}> = writable({});
|
||||||
|
|
||||||
|
export const blogAuthors: Writable<{}> = writable({});
|
Loading…
Reference in New Issue
Block a user