65 lines
2.0 KiB
TypeScript
65 lines
2.0 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",
|
|
})
|
|
}
|
|
}
|
|
}
|