sba-website/src/services/newsService.ts
2023-10-12 16:31:27 -05:00

70 lines
1.8 KiB
TypeScript

import GhostContentAPI, { type PostsOrPages } from '@tryghost/content-api'
export interface NewsPostAuthor {
id: string | undefined,
name: string | undefined,
slug: string | undefined,
profileImage: string | undefined,
url: string | undefined
}
export interface NewsPost {
id: string,
uuid: string | undefined,
title: string | undefined,
featureImage: string | undefined,
featureImageAlt: string | undefined,
createdAt: string | undefined,
updatedAt: string | undefined,
publishedAt: string | undefined,
slug: string,
url: string | undefined,
excerpt: string | undefined,
customExcerpt: string | undefined,
readingTime: number | undefined,
primaryAuthor: NewsPostAuthor | undefined
}
export async function getPosts() {
const newsApi = new GhostContentAPI({
url: 'https://sbanews.manticorum.com',
key: '37abf30917ce55d6d9155b537d',
version: 'v5.0'
})
const posts: PostsOrPages = await newsApi.posts.browse({
limit: 4,
include: ['authors', 'tags'],
})
return makeNewPostsFromPostsOrPages(posts)
}
function makeNewPostsFromPostsOrPages(posts: PostsOrPages): NewsPost[] {
return posts.map(p => {
return {
id: p.id,
uuid: p.uuid,
title: p.title,
featureImage: p.feature_image ?? undefined,
featureImageAlt: p.feature_image_alt ?? undefined,
createdAt: p.created_at ?? undefined,
updatedAt: p.updated_at ?? undefined,
publishedAt: p.published_at ?? undefined,
slug: p.slug,
url: p.url,
excerpt: p.excerpt,
customExcerpt: p.custom_excerpt,
readingTime: p.reading_time,
primaryAuthor: {
id: p.primary_author?.id,
name: p.primary_author?.name,
slug: p.primary_author?.slug,
profileImage: p.primary_author?.profile_image ?? undefined,
url: p.primary_author?.url ?? undefined
}
}
})
}