60 lines
1.4 KiB
TypeScript
60 lines
1.4 KiB
TypeScript
// src/lib/directus/news.ts
|
|
import { directusFetch } from "@/lib/directus/index";
|
|
import { NewsItem } from "@/types/news";
|
|
/**
|
|
* 最新ニュース5件取得
|
|
*/
|
|
export async function getLatestNews(): Promise<NewsItem[]> {
|
|
const query = [
|
|
"filter[status][_eq]=1", // ✅ 公開=1 のみ取得
|
|
"sort[]=-published_at",
|
|
"limit=5",
|
|
"fields[]=id",
|
|
"fields[]=title",
|
|
"fields[]=slug",
|
|
"fields[]=published_at",
|
|
"fields[]=thumbnail.id",
|
|
"fields[]=thumbnail.filename_disk",
|
|
"fields[]=linkurl",
|
|
"fields[]=link_target",
|
|
"fields[]=tags",
|
|
].join("&");
|
|
|
|
return await directusFetch<NewsItem[]>(`/items/news?${query}`);
|
|
}
|
|
|
|
/**
|
|
* 全ニュース一覧取得
|
|
*/
|
|
export async function getAllNews(): Promise<NewsItem[]> {
|
|
const query = [
|
|
"filter[status][_eq]=1", // ✅ 公開=1 のみ取得
|
|
"sort[]=-published_at",
|
|
"fields[]=id",
|
|
"fields[]=title",
|
|
"fields[]=slug",
|
|
"fields[]=published_at",
|
|
"fields[]=thumbnail.id",
|
|
"fields[]=thumbnail.filename_disk",
|
|
"fields[]=linkurl",
|
|
"fields[]=link_target",
|
|
"fields[]=tags",
|
|
"fields[]=content",
|
|
].join("&");
|
|
|
|
return await directusFetch<NewsItem[]>(`/items/news?${query}`);
|
|
}
|
|
|
|
/**
|
|
* ニュースID指定で詳細取得
|
|
*/
|
|
export async function getNewsById(id: number): Promise<NewsItem | null> {
|
|
try {
|
|
return await directusFetch<NewsItem>(
|
|
`/items/news/${id}?fields=id,title,content,published_at,tags,status,thumbnail.id,mainimg.*`
|
|
);
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|