import { createDirectusConnection } from "@/lib/directus"; import { print } from 'graphql'; import getBlogs from '@/graphql/blogs/getBlogs.graphql'; import getBlogPost from '@/graphql/blogs/getBlog.graphql'; import getLastBlogPosts from '@/graphql/blogs/getLastBlogPosts.graphql'; import getPaginatedBlogs from '@/graphql/blogs/getPaginatedBlogs.graphql'; import { formatDate } from "@/lib/dates"; export async function getAllBlogs(settings: GlobalSettings): Promise { const client = await createDirectusConnection(); const result = await client.query(print(getBlogs), { date: formatDate(new Date(), "%Y-%M-%D") }); let blogs: BlogPost[] = []; result["Blogs"].forEach((blogRecord: any) => { let dates: string[] = [ settings.blog.lastModified.toISOString(), settings.website.lastModified.toISOString(), blogRecord["date_created"], blogRecord["date_updated"], blogRecord["search_engine"][0]["date_created"], blogRecord["search_engine"][0]["date_updated"], blogRecord["search_engine"][0]["thumbnail"]["created_on"] ]; const blog: BlogPost = { exists: true, type: "BlogPost", id: blogRecord["id"], lastModified: new Date(), title: blogRecord["title"], content: blogRecord["content"], date: blogRecord["date"], url: blogRecord["url"], searchEngine: { title: blogRecord["search_engine"][0]["title"], description: blogRecord["search_engine"][0]["description"], allowCrawlers: blogRecord["search_engine"][0]["allow_crawler"], canonical: blogRecord["search_engine"][0]["canonical"], priority: blogRecord["search_engine"][0]["priority"], thumbnail: { url: blogRecord["search_engine"][0]["thumbnail"]["filename_disk"], height: blogRecord["search_engine"][0]["thumbnail"]["height"], width: blogRecord["search_engine"][0]["thumbnail"]["width"] } }, tags: [] }; blogRecord["tags"].forEach((tagRecord: any) => { blog["tags"].push({ text: tagRecord["Tags_id"]["text"], code: tagRecord["Tags_id"]["code"], color: tagRecord["Tags_id"]["color"] }); dates.push(tagRecord["Tags_id"]["date_created"]); dates.push(tagRecord["Tags_id"]["date_updated"]); }); if (dates.filter(e => e !== null).length === 0) { blog.lastModified = new Date(); } else { const sortedDates: string[] = dates.sort((a: string, b: string) => { return new Date(b).getTime() - new Date(a).getTime(); }); blog.lastModified = new Date(sortedDates[0]); } blogs.push(blog); }); return blogs; } export async function getBlog(settings: GlobalSettings, route: string): Promise { const client = await createDirectusConnection(); const result = await client.query(print(getBlogPost), { route: route }); const blogRecord = result["Blogs"][0]; let dates: string[] = [ settings.blog.lastModified.toISOString(), settings.website.lastModified.toISOString(), blogRecord["date_created"], blogRecord["date_updated"], blogRecord["search_engine"][0]["date_created"], blogRecord["search_engine"][0]["date_updated"], blogRecord["search_engine"][0]["thumbnail"]["created_on"] ]; const blog: BlogPost = { exists: true, type: "BlogPost", id: blogRecord["id"], lastModified: new Date(), title: blogRecord["title"], content: blogRecord["content"], date: blogRecord["date"], url: blogRecord["url"], searchEngine: { title: blogRecord["search_engine"][0]["title"], description: blogRecord["search_engine"][0]["description"], allowCrawlers: blogRecord["search_engine"][0]["allow_crawler"], canonical: blogRecord["search_engine"][0]["canonical"], priority: blogRecord["search_engine"][0]["priority"], thumbnail: { url: blogRecord["search_engine"][0]["thumbnail"]["filename_disk"], height: blogRecord["search_engine"][0]["thumbnail"]["height"], width: blogRecord["search_engine"][0]["thumbnail"]["width"] } }, tags: [] }; blogRecord["tags"].forEach((tagRecord: any) => { blog["tags"].push({ text: tagRecord["Tags_id"]["text"], code: tagRecord["Tags_id"]["code"], color: tagRecord["Tags_id"]["color"] }); dates.push(tagRecord["Tags_id"]["date_created"]); dates.push(tagRecord["Tags_id"]["date_updated"]); }); if (dates.filter(e => e !== null).length === 0) { blog.lastModified = new Date(); } else { const sortedDates: string[] = dates.sort((a: string, b: string) => { return new Date(b).getTime() - new Date(a).getTime(); }); blog.lastModified = new Date(sortedDates[0]); } return blog; } export async function getLastBlogs(amount: number): Promise { const client = await createDirectusConnection(); const result = await client.query(print(getLastBlogPosts), { date: formatDate(new Date(), "%Y-%M-%D"), amount: amount }); let blogs: BlogPost[] = []; result["Blogs"].forEach((blogRecord: any) => { let dates: string[] = [ blogRecord["date_created"], blogRecord["date_updated"], blogRecord["search_engine"][0]["date_created"], blogRecord["search_engine"][0]["date_updated"], blogRecord["search_engine"][0]["thumbnail"]["created_on"] ]; const blog: BlogPost = { exists: true, type: "BlogPost", id: blogRecord["id"], lastModified: new Date(), title: blogRecord["title"], content: blogRecord["content"], date: blogRecord["date"], url: blogRecord["url"], searchEngine: { title: blogRecord["search_engine"][0]["title"], description: blogRecord["search_engine"][0]["description"], allowCrawlers: blogRecord["search_engine"][0]["allow_crawler"], canonical: blogRecord["search_engine"][0]["canonical"], priority: blogRecord["search_engine"][0]["priority"], thumbnail: { url: blogRecord["search_engine"][0]["thumbnail"]["filename_disk"], height: blogRecord["search_engine"][0]["thumbnail"]["height"], width: blogRecord["search_engine"][0]["thumbnail"]["width"] } }, tags: [] }; blogRecord["tags"].forEach((tagRecord: any) => { blog["tags"].push({ text: tagRecord["Tags_id"]["text"], code: tagRecord["Tags_id"]["code"], color: tagRecord["Tags_id"]["color"] }); dates.push(tagRecord["Tags_id"]["date_created"]); dates.push(tagRecord["Tags_id"]["date_updated"]); }); if (dates.filter(e => e !== null).length === 0) { blog.lastModified = new Date(); } else { const sortedDates: string[] = dates.sort((a: string, b: string) => { return new Date(b).getTime() - new Date(a).getTime(); }); blog.lastModified = new Date(sortedDates[0]); } blogs.push(blog); }); return blogs; } export async function getAllPaginatedBlogs(settings: GlobalSettings, page: number): Promise { const client = await createDirectusConnection(); const result = await client.query(print(getPaginatedBlogs), { date: formatDate(new Date(), "%Y-%M-%D"), limit: 8, pageNumber: page }); let blogs: BlogPost[] = []; result["Blogs"].forEach((blogRecord: any) => { let dates: string[] = [ settings.blog.lastModified.toISOString(), settings.website.lastModified.toISOString(), blogRecord["date_created"], blogRecord["date_updated"], blogRecord["search_engine"][0]["date_created"], blogRecord["search_engine"][0]["date_updated"], blogRecord["search_engine"][0]["thumbnail"]["created_on"] ]; const blog: BlogPost = { exists: true, type: "BlogPost", id: blogRecord["id"], lastModified: new Date(), title: blogRecord["title"], content: blogRecord["content"], date: blogRecord["date"], url: blogRecord["url"], searchEngine: { title: blogRecord["search_engine"][0]["title"], description: blogRecord["search_engine"][0]["description"], allowCrawlers: blogRecord["search_engine"][0]["allow_crawler"], canonical: blogRecord["search_engine"][0]["canonical"], priority: blogRecord["search_engine"][0]["priority"], thumbnail: { url: blogRecord["search_engine"][0]["thumbnail"]["filename_disk"], height: blogRecord["search_engine"][0]["thumbnail"]["height"], width: blogRecord["search_engine"][0]["thumbnail"]["width"] } }, tags: [] }; blogRecord["tags"].forEach((tagRecord: any) => { blog["tags"].push({ text: tagRecord["Tags_id"]["text"], code: tagRecord["Tags_id"]["code"], color: tagRecord["Tags_id"]["color"] }); dates.push(tagRecord["Tags_id"]["date_created"]); dates.push(tagRecord["Tags_id"]["date_updated"]); }); if (dates.filter(e => e !== null).length === 0) { blog.lastModified = new Date(); } else { const sortedDates: string[] = dates.sort((a: string, b: string) => { return new Date(b).getTime() - new Date(a).getTime(); }); blog.lastModified = new Date(sortedDates[0]); } blogs.push(blog); }); return blogs; }