Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 15 additions & 42 deletions web/server/api/backgrounds.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {type ShortBackgroundData} from '#shared/types/backgroundTypes'
import {makeSlugLink} from '~~/shared/utils/links'
import {getItemsCount} from '../utils/getCount'
import {fetchAllPaginated} from '../utils/fetchAllPaginated'

type DirectusBackground = {
id: number
Expand All @@ -14,44 +14,17 @@ type DirectusBackground = {
} | null
}

export default defineEventHandler(async (): Promise<ShortBackgroundData[]> => {
const {staticToken, backendAddress} = useRuntimeConfig()
const itemsCount = await getItemsCount(`${backendAddress}/items/backgrounds`)

const itemsPerPage = 100
let totalItems: ShortBackgroundData[] = []
for (let page = 0; page < itemsCount / itemsPerPage; page += 1) {
const {data: backgrounds} = await $fetch<{data: DirectusBackground[]}>(
`${backendAddress}/items/backgrounds`,
{
headers: {
Authorization: `Bearer ${staticToken}`,
},
query: {
fields: [
'id',
'title',
'original_title',
'abilities',
'skills',
'source.title',
'source.description',
].join(','),
sort: 'title',
offset: itemsPerPage * page,
},
}
)
totalItems = totalItems.concat(
backgrounds.map(
(f) =>
({
...f,
slug: `${makeSlugLink({id: f.id, originalTitle: f.original_title})}`,
}) satisfies ShortBackgroundData
)
)
}

return totalItems
})
export default defineEventHandler(() =>
fetchAllPaginated<DirectusBackground, ShortBackgroundData>('backgrounds', [
'id',
'title',
'original_title',
'abilities',
'skills',
'source.title',
'source.description',
], (b) => ({
...b,
slug: makeSlugLink({id: b.id, originalTitle: b.original_title}),
}))
)
59 changes: 16 additions & 43 deletions web/server/api/facilities.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {type ShortFacilityData} from '#shared/types/facilityTypes'
import {makeSlugLink} from '~~/shared/utils/links'
import {getItemsCount} from '../utils/getCount'
import {fetchAllPaginated} from '../utils/fetchAllPaginated'

type DirectusFacility = {
id: number
Expand All @@ -15,45 +15,18 @@ type DirectusFacility = {
size: string
}

export default defineEventHandler(async (): Promise<ShortFacilityData[]> => {
const {staticToken, backendAddress} = useRuntimeConfig()
const itemsCount = await getItemsCount(`${backendAddress}/items/facilities`)

const itemsPerPage = 100
let totalItems: ShortFacilityData[] = []
for (let page = 0; page < itemsCount / itemsPerPage; page += 1) {
const {data: items} = await $fetch<{data: DirectusFacility[]}>(
`${backendAddress}/items/facilities`,
{
headers: {
Authorization: `Bearer ${staticToken}`,
},
query: {
fields: [
'id',
'title',
'original_title',
'source.title',
'source.description',
'level',
'order',
'size',
].join(','),
sort: 'title',
offset: itemsPerPage * page,
},
}
)
totalItems = totalItems.concat(
items.map(
(f) =>
({
...f,
slug: `${makeSlugLink({id: f.id, originalTitle: f.original_title})}`,
}) satisfies ShortFacilityData
)
)
}

return totalItems
})
export default defineEventHandler(() =>
fetchAllPaginated<DirectusFacility, ShortFacilityData>('facilities', [
'id',
'title',
'original_title',
'source.title',
'source.description',
'level',
'order',
'size',
], (f) => ({
...f,
slug: makeSlugLink({id: f.id, originalTitle: f.original_title}),
}))
)
55 changes: 14 additions & 41 deletions web/server/api/feats.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {type ShortFeatData} from '#shared/types/featTypes'
import {makeSlugLink} from '~~/shared/utils/links'
import {getItemsCount} from '../utils/getCount'
import {fetchAllPaginated} from '../utils/fetchAllPaginated'

type DirectusFeat = {
id: number
Expand All @@ -13,43 +13,16 @@ type DirectusFeat = {
} | null
}

export default defineEventHandler(async (): Promise<ShortFeatData[]> => {
const {staticToken, backendAddress} = useRuntimeConfig()
const itemsCount = await getItemsCount(`${backendAddress}/items/feats`)

const itemsPerPage = 100
let totalItems: ShortFeatData[] = []
for (let page = 0; page < itemsCount / itemsPerPage; page += 1) {
const {data: feats} = await $fetch<{data: DirectusFeat[]}>(
`${backendAddress}/items/feats`,
{
headers: {
Authorization: `Bearer ${staticToken}`,
},
query: {
fields: [
'id',
'title',
'original_title',
'source.title',
'source.description',
'category',
].join(','),
sort: 'title',
offset: itemsPerPage * page,
},
}
)
totalItems = totalItems.concat(
feats.map(
(f) =>
({
...f,
slug: `${makeSlugLink({id: f.id, originalTitle: f.original_title})}`,
}) satisfies ShortFeatData
)
)
}

return totalItems
})
export default defineEventHandler(() =>
fetchAllPaginated<DirectusFeat, ShortFeatData>('feats', [
'id',
'title',
'original_title',
'source.title',
'source.description',
'category',
], (f) => ({
...f,
slug: makeSlugLink({id: f.id, originalTitle: f.original_title}),
}))
)
71 changes: 23 additions & 48 deletions web/server/api/magic-items.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import {
type ItemRarity,
type ShortMagicItemData,
} from '#shared/types/magicItemTypes'
import {makeSlugLink} from '~~/shared/utils/links'
import {fetchAllPaginated} from '../utils/fetchAllPaginated'

type DirectusMagicItem = {
id: number
Expand All @@ -17,51 +19,24 @@ type DirectusMagicItem = {
} | null
}

export default defineEventHandler(async (): Promise<ShortMagicItemData[]> => {
const {staticToken, backendAddress} = useRuntimeConfig()
const itemsCount = await getItemsCount(`${backendAddress}/items/magic_items`)

const itemsPerPage = 100
let totalItems: ShortMagicItemData[] = []
for (let page = 0; page < itemsCount / itemsPerPage; page += 1) {
const {data: items} = await $fetch<{data: DirectusMagicItem[]}>(
`${backendAddress}/items/magic_items`,
{
headers: {
Authorization: `Bearer ${staticToken}`,
},
query: {
fields: [
'id',
'title',
'original_title',
'category',
'rarity',
'attunement',
'source.title',
'source.description',
].join(','),
sort: 'title',
offset: itemsPerPage * page,
},
}
)
totalItems = totalItems.concat(
items.map(
(f) =>
({
id: f.id,
title: f.title,
originalTitle: f.original_title,
category: f.category,
rarity: f.rarity,
attunement: f.attunement,
source: f.source,
slug: `${makeSlugLink({id: f.id, originalTitle: f.original_title})}`,
}) satisfies ShortMagicItemData
)
)
}

return totalItems
})
export default defineEventHandler(() =>
fetchAllPaginated<DirectusMagicItem, ShortMagicItemData>('magic_items', [
'id',
'title',
'original_title',
'category',
'rarity',
'attunement',
'source.title',
'source.description',
], (f) => ({
id: f.id,
title: f.title,
originalTitle: f.original_title,
category: f.category,
rarity: f.rarity,
attunement: f.attunement,
source: f.source,
slug: makeSlugLink({id: f.id, originalTitle: f.original_title}),
}))
)
58 changes: 21 additions & 37 deletions web/server/api/spell-cards.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {createDirectives, presetDirectiveConfigs} from 'marked-directive'
import {type SpellData} from '#shared/types/spellTypes'
import {createSbHeaderDirective, sbStatsDirective} from '#shared/utils/markdown'

import {getItemsCount} from '../utils/getCount'
import {fetchAllPaginated} from '../utils/fetchAllPaginated'

type DirectusSpell = {
id: number
Expand All @@ -30,41 +30,25 @@ type DirectusSpell = {

export default defineCachedEventHandler(
async (): Promise<SpellData[]> => {
const {staticToken, backendAddress} = useRuntimeConfig()
const itemsCount = await getItemsCount(`${backendAddress}/items/spells`)

const itemsPerPage = 100
let totalItems: DirectusSpell[] = []
for (let page = 0; page < itemsCount / itemsPerPage; page += 1) {
const {data: spells} = await $fetch<{data: DirectusSpell[]}>(
`${backendAddress}/items/spells`,
{
headers: {
Authorization: `Bearer ${staticToken}`,
},
query: {
fields: [
'id',
'title',
'original_title',
'level',
'school',
'casting_time',
'range',
'components',
'duration',
'description',
'classes.classes_id.title',
'source.title',
'source.description',
].join(','),
sort: 'title',
offset: itemsPerPage * page,
},
}
)
totalItems = totalItems.concat(spells)
}
const spells = await fetchAllPaginated<DirectusSpell, DirectusSpell>(
'spells',
[
'id',
'title',
'original_title',
'level',
'school',
'casting_time',
'range',
'components',
'duration',
'description',
'classes.classes_id.title',
'source.title',
'source.description',
],
(s) => s,
)

const marked = new Marked(
createDirectives([
Expand Down Expand Up @@ -99,7 +83,7 @@ export default defineCachedEventHandler(
})

return Promise.all(
totalItems.map(
spells.map(
async (s): Promise<SpellData> => ({
id: s.id,
title: s.title,
Expand Down
Loading