a homebrewed DnD campaign based in the Honkai: Star Rail universe
hsr honkaistarrail dnd
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

migrate characters to use remote functions

+51 -34
-21
app/src/routes/(app)/characters/+page.server.ts
··· 1 - import { db } from '$server/db' 2 - import { CharacterRepository, type CharactersByUser } from '$server/db/repos/character' 3 - import { definePageMeta } from '$ui/page-meta' 4 - import type { PageServerLoad } from './$types' 5 - 6 - export const load: PageServerLoad = async ({ parent }) => { 7 - const characterRepo = new CharacterRepository(db) 8 - const user = (await parent()).user 9 - 10 - let queryCharacters = [] as Awaited<CharactersByUser> 11 - if (user !== undefined) { 12 - queryCharacters = await characterRepo.getCharactersByUser(user.id) 13 - } 14 - 15 - return { 16 - meta: definePageMeta({ 17 - title: 'My Characters', 18 - }), 19 - characters: queryCharacters, 20 - } 21 - }
-10
app/src/routes/(app)/characters/new/+page.server.ts
··· 1 - import { definePageMeta } from '$ui/page-meta' 2 - import type { PageServerLoad } from './$types' 3 - 4 - export const load: PageServerLoad = async () => { 5 - return { 6 - meta: definePageMeta({ 7 - title: 'Create a new character', 8 - }), 9 - } 10 - }
+7 -3
app/src/routes/(app)/characters/new/+page.svelte
··· 1 1 <script lang="ts"> 2 + import { Breadcrumb } from '$ui/layout/breadcrumb' 2 3 import { PageMeta } from '$ui/page-meta' 3 - import type { PageProps } from './$types' 4 + import { queryBreadcrumb } from '../page.remote' 5 + import { getPageMeta } from './page.remote' 4 6 5 - let { data }: PageProps = $props() 6 - const { meta } = $derived(data) 7 + const meta = await getPageMeta() 8 + const paths = await queryBreadcrumb() 7 9 </script> 8 10 9 11 <svelte:head> 10 12 <PageMeta {...meta} /> 11 13 </svelte:head> 14 + 15 + <Breadcrumb links={paths.newEntry} />
+8
app/src/routes/(app)/characters/new/page.remote.ts
··· 1 + import { prerender } from '$app/server' 2 + import { definePageMeta } from '$ui/page-meta' 3 + 4 + export const getPageMeta = prerender(() => 5 + definePageMeta({ 6 + title: 'Create a new character', 7 + }), 8 + )
+36
app/src/routes/(app)/characters/page.remote.ts
··· 1 + import { getRequestEvent, prerender, query } from '$app/server' 2 + import { auth } from '$server/auth' 3 + import { db } from '$server/db' 4 + import { CharacterRepository, type CharactersByUser } from '$server/db/repos/character' 5 + import { definePaths } from '$ui/layout/breadcrumb' 6 + import { definePageMeta } from '$ui/page-meta' 7 + 8 + export const getPageMeta = prerender(() => 9 + definePageMeta({ 10 + title: 'My characters', 11 + }), 12 + ) 13 + 14 + export const queryCharacters = query(async () => { 15 + const characterRepo = new CharacterRepository(db) 16 + const currentSession = await auth.api.getSession({ 17 + headers: getRequestEvent().request.headers, 18 + }) 19 + 20 + let characters = [] as Awaited<CharactersByUser> 21 + if (currentSession !== null) { 22 + characters = await characterRepo.getCharactersByUser(currentSession.user.id) 23 + } 24 + 25 + return characters 26 + }) 27 + 28 + export const queryBreadcrumb = query(async () => { 29 + const root = { path: '/characters', text: 'Characters' } 30 + const newEntry = { path: '/characters/new', text: 'Create a new character' } 31 + 32 + return definePaths({ 33 + root: [root], 34 + newEntry: [root, newEntry], 35 + }) 36 + })