at main 2.6 kB view raw
1import { promises as fs } from 'fs'; 2import path from 'path'; 3import type { Article, CaseStudy, Company, ContentData, Job, Skill } from '@/types/content'; 4 5const dataDirectory = path.join(process.cwd(), 'src', 'data', 'json'); 6 7export async function getContent(): Promise<ContentData> { 8 const filePath = path.join(dataDirectory, 'content.json'); 9 const jsonData = await fs.readFile(filePath, 'utf8'); 10 return JSON.parse(jsonData); 11} 12 13export async function getArticles(): Promise<Article[]> { 14 const filePath = path.join(dataDirectory, 'articles.json'); 15 const jsonData = await fs.readFile(filePath, 'utf8'); 16 return JSON.parse(jsonData); 17} 18 19export async function getCaseStudies(): Promise<CaseStudy[]> { 20 const filePath = path.join(dataDirectory, 'casestudies.json'); 21 const jsonData = await fs.readFile(filePath, 'utf8'); 22 return JSON.parse(jsonData); 23} 24 25export async function getCompanies(): Promise<Company[]> { 26 const filePath = path.join(dataDirectory, 'companies.json'); 27 const jsonData = await fs.readFile(filePath, 'utf8'); 28 return JSON.parse(jsonData); 29} 30 31export async function getJobs(): Promise<Job[]> { 32 const filePath = path.join(dataDirectory, 'jobs.json'); 33 const jsonData = await fs.readFile(filePath, 'utf8'); 34 return JSON.parse(jsonData); 35} 36 37export async function getSkills(): Promise<Skill[]> { 38 const filePath = path.join(dataDirectory, 'skills.json'); 39 const jsonData = await fs.readFile(filePath, 'utf8'); 40 return JSON.parse(jsonData); 41} 42 43// Helper function to get a single item by slug 44export async function getItemBySlug<T extends { slug: string }>(items: T[], slug: string): Promise<T | undefined> { 45 return items.find((item) => item.slug === slug); 46} 47 48// Helper function to get featured articles 49export async function getFeaturedArticles(): Promise<Article[]> { 50 const articles = await getArticles(); 51 return articles.filter((article) => article.featured); 52} 53 54// Helper function to get latest case studies 55export async function getLatestCaseStudies(limit: number = 3): Promise<CaseStudy[]> { 56 const caseStudies = await getCaseStudies(); 57 return caseStudies 58 .sort((a, b) => new Date(b.publishedOn).getTime() - new Date(a.publishedOn).getTime()) 59 .slice(0, limit); 60} 61 62// Helper function to get latest jobs 63export async function getLatestJobs(limit: number = 5): Promise<Job[]> { 64 const jobs = await getJobs(); 65 return jobs 66 .sort((a, b) => { 67 const dateA = b.endDate ? new Date(b.endDate).getTime() : Date.now(); 68 const dateB = a.endDate ? new Date(a.endDate).getTime() : Date.now(); 69 return dateA - dateB; 70 }) 71 .slice(0, limit); 72}