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;
|
||||
}
|
||||
|
||||
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 smt: Statement = await unit.prepare(sql);
|
||||
const smt: Statement = await unit.prepare(sql, bindings);
|
||||
const result = await smt.all<T[]>();
|
||||
await unit.complete(true);
|
||||
return result;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user