My personal website
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}