implemented task 5
This commit is contained in:
parent
d905f7c8ae
commit
89dc70e3e1
41
src/routes/plane.router.ts
Normal file
41
src/routes/plane.router.ts
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import express, {Request, Response} from "express";
|
||||||
|
import {StatusCodes} from "http-status-codes";
|
||||||
|
import {PlaneService} from "../services/plane.service";
|
||||||
|
import {PlaneModel} from "../models/plane.model";
|
||||||
|
|
||||||
|
const router = express.Router();
|
||||||
|
|
||||||
|
router.get('/', async (req : Request<null, null, null, {departureTime : string}>, res : Response) : Promise<void> => {
|
||||||
|
const departureTimeIso = req.query.departureTime;
|
||||||
|
const dateNumber =Date.parse(departureTimeIso);
|
||||||
|
|
||||||
|
if(isNaN(dateNumber))
|
||||||
|
{
|
||||||
|
res.sendStatus(StatusCodes.BAD_REQUEST);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
const departureTime = new Date();
|
||||||
|
const planes = await PlaneService.getAvailbePlanes(departureTime);
|
||||||
|
|
||||||
|
res.status(200).json(planes);
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get('/:tailNo', async (req : Request<{tailNo : string}>, res : Response) : Promise<void> => {
|
||||||
|
const tailNo = req.params.tailNo;
|
||||||
|
|
||||||
|
if(tailNo === undefined || tailNo.length <6)
|
||||||
|
{
|
||||||
|
res.sendStatus(StatusCodes.BAD_REQUEST);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
const plane : PlaneModel | null = await PlaneService.getOne(tailNo);
|
||||||
|
|
||||||
|
if(plane === null){
|
||||||
|
res.sendStatus(StatusCodes.NO_CONTENT);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
res.status(200).json(plane);
|
||||||
|
});
|
||||||
32
src/services/plane.service.ts
Normal file
32
src/services/plane.service.ts
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
import {ServiceBase} from "./serviceBase";
|
||||||
|
import {PlaneModel} from "../models/plane.model";
|
||||||
|
|
||||||
|
|
||||||
|
export class PlaneService extends ServiceBase {
|
||||||
|
static async getOne(tailNo : string) : Promise<PlaneModel | null>{
|
||||||
|
const sql = `select tailNo, model, manufacturer, capacity from Plane where tailNo = ?1;`
|
||||||
|
const params = {
|
||||||
|
1: tailNo
|
||||||
|
}
|
||||||
|
return await this.get<PlaneModel>(sql, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
static async getAvailbePlanes(date : Date) : Promise<string[]>{
|
||||||
|
const sql = `WITH BlockedPlanes AS (SELECT p.tailNo
|
||||||
|
FROM Plane p
|
||||||
|
JOIN Flight f ON p.tailNo = f.operates
|
||||||
|
WHERE f.departure BETWEEN datetime(?1, '-12 hours') AND datetime(?1, '+12 hours'))
|
||||||
|
SELECT p.tailNo
|
||||||
|
FROM Plane p
|
||||||
|
LEFT JOIN BlockedPlanes bp ON p.tailNo = bp.tailNo
|
||||||
|
WHERE bp.tailNo IS NULL;`
|
||||||
|
|
||||||
|
const params = {
|
||||||
|
1: date.toISOString()
|
||||||
|
}
|
||||||
|
|
||||||
|
return await this.all<string>(sql, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -32,9 +32,9 @@ export class ServiceBase {
|
|||||||
return result ?? null;
|
return result ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async all<T>(sql: string): Promise<T[]> {
|
public static async all<T>(sql: string, bindings : any | null = null): Promise<T[]> {
|
||||||
const unit: Unit = await Unit.create(false);
|
const unit: Unit = await Unit.create(false);
|
||||||
const smt: Statement = await unit.prepare(sql);
|
const smt: Statement = await unit.prepare(sql, bindings);
|
||||||
const result = await smt.all<T[]>();
|
const result = await smt.all<T[]>();
|
||||||
await unit.complete(true);
|
await unit.complete(true);
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user