import directus from './directus'; import { readItems, type Query } from '@directus/sdk'; import type { CodyopsCareers, Careers } from '../types/codyops-careers'; import { sumTimes } from '../utils/time'; export async function getCareers(): Promise { const careers = await directus.request( readItems>('codyops_careers', { fields: [ 'slug', 'name', 'description', 'banner', { courses: [ { codyops_courses_id: [ 'name', 'level', 'category', { modules: [ 'duration' ] } ], }, ], }, ], }) ); const careersWithCalculatedHours = careers.map(career => { let totalCareerMinutes = 0; const coursesWithCalculatedHours = career.courses.map(courseItem => { const course = courseItem.codyops_courses_id; if (course && course.modules) { const moduleDurations = course.modules .map(module => module.duration) .filter((duration): duration is string => duration !== undefined && duration !== null); // Filter out undefined/null const { hours, minutes } = sumTimes(moduleDurations); const totalCourseMinutes = (hours * 60) + minutes; totalCareerMinutes += totalCourseMinutes; return { ...courseItem, codyops_courses_id: { ...course, totalCourseHours: hours + (minutes / 60), // Store as decimal hours totalCourseMinutes: totalCourseMinutes, } }; } return courseItem; }); const totalCareerHours = Math.floor(totalCareerMinutes / 60); const remainingCareerMinutes = totalCareerMinutes % 60; return { ...career, courses: coursesWithCalculatedHours, totalCareerHours: totalCareerHours + (remainingCareerMinutes / 60), // Store as decimal hours totalCareerMinutes: totalCareerMinutes, }; }); return careersWithCalculatedHours; }