63 lines
1.6 KiB
TypeScript
63 lines
1.6 KiB
TypeScript
import { OwlClient, ApiError, ValidationError } from '$lib/owlClient';
|
|
import type { ApiTrainsTrainByHeadcode } from '@owlboard/owlboard-ts';
|
|
import type { PageLoad } from './$types';
|
|
import { error } from '@sveltejs/kit';
|
|
|
|
export const load: PageLoad = async ({ url }) => {
|
|
const headcode = url.searchParams.get('h');
|
|
let dateParam = url.searchParams.get('d');
|
|
const toc = url.searchParams.get('t') || '';
|
|
|
|
const date: string | Date = dateParam === '' || dateParam === null ? new Date() : dateParam;
|
|
|
|
if (!headcode) {
|
|
throw error(400, {
|
|
message: 'Headcode not provided',
|
|
owlCode: 'INVALID_DATA'
|
|
});
|
|
}
|
|
|
|
// Declared outside of the try so that it can be used in both the try and catch blocks
|
|
let results: ApiTrainsTrainByHeadcode.TrainByHeadcodeResponse[];
|
|
|
|
try {
|
|
const response = await OwlClient.trains.getByHeadcode(headcode, date, toc);
|
|
|
|
results = response.data;
|
|
return {
|
|
title: headcode.toUpperCase(),
|
|
results: results
|
|
};
|
|
} catch (e: unknown) {
|
|
if (e instanceof ValidationError) {
|
|
throw error(400, {
|
|
message: e.message,
|
|
owlCode: 'VALIDATION_ERROR'
|
|
});
|
|
} else if (e instanceof ApiError) {
|
|
// Check if NO_RESULTS error, and return empty array if that is the case
|
|
if (e.code === 'NOT_FOUND') {
|
|
return {
|
|
title: headcode.toUpperCase(),
|
|
results: []
|
|
};
|
|
} else {
|
|
throw error(e.status, {
|
|
message: e.message,
|
|
owlCode: 'API_ERROR'
|
|
});
|
|
}
|
|
} else if (e instanceof Error) {
|
|
throw error(500, {
|
|
message: e.message,
|
|
owlCode: 'GEN_ERROR'
|
|
});
|
|
} else {
|
|
throw error(500, {
|
|
message: 'Unexpected error',
|
|
owlCode: 'UNKNOWN_ERR'
|
|
});
|
|
}
|
|
}
|
|
};
|