Skip to content

Commit

Permalink
fix redirects, more typing, cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
dangowans committed Mar 18, 2024
1 parent 636826d commit 3d8483c
Show file tree
Hide file tree
Showing 47 changed files with 526 additions and 416 deletions.
3 changes: 2 additions & 1 deletion handlers/permissions.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { getConfigProperty } from '../helpers/functions.config.js';
import * as userFunctions from '../helpers/functions.user.js';
const dashboardRedirectUrl = '/dashboard';
const dashboardRedirectUrl = `${getConfigProperty('reverseProxy.urlPrefix')}/dashboard`;
export const adminGetHandler = (request, response, next) => {
if (userFunctions.userIsAdmin(request)) {
next();
Expand Down
5 changes: 4 additions & 1 deletion handlers/permissions.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import type { RequestHandler } from 'express'

import { getConfigProperty } from '../helpers/functions.config.js'
import * as userFunctions from '../helpers/functions.user.js'

const dashboardRedirectUrl = '/dashboard'
const dashboardRedirectUrl = `${getConfigProperty(
'reverseProxy.urlPrefix'
)}/dashboard`

export const adminGetHandler: RequestHandler = (request, response, next) => {
if (userFunctions.userIsAdmin(request)) {
Expand Down
7 changes: 6 additions & 1 deletion handlers/plates-get/view.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
/// <reference types="cookie-parser" />
import type { Request, Response } from 'express';
export default function handler(request: Request, response: Response): Promise<void>;
export interface PlatesViewParameters {
licencePlateCountry: '_' | string;
licencePlateProvince: '_' | string;
licencePlateNumber: '_' | string;
}
export default function handler(request: Request<PlatesViewParameters>, response: Response): Promise<void>;
8 changes: 7 additions & 1 deletion handlers/plates-get/view.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,14 @@ import type { Request, Response } from 'express'
import { getAllLicencePlateOwners } from '../../database/parkingDB/getAllLicencePlateOwners.js'
import { getParkingTicketsByLicencePlate } from '../../database/parkingDB/getParkingTickets.js'

export interface PlatesViewParameters {
licencePlateCountry: '_' | string
licencePlateProvince: '_' | string
licencePlateNumber: '_' | string
}

export default async function handler(
request: Request,
request: Request<PlatesViewParameters>,
response: Response
): Promise<void> {
let licencePlateCountry = request.params.licencePlateCountry
Expand Down
3 changes: 2 additions & 1 deletion handlers/reports-all/reportName.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import papaparse from 'papaparse';
import { getReportData } from '../../database/parkingDB-reporting.js';
import { getConfigProperty } from '../../helpers/functions.config.js';
export default function handler(request, response) {
const reportName = request.params.reportName;
const rows = getReportData(reportName, request.query);
if (!rows) {
response.redirect('/reports/?error=reportNotAvailable');
response.redirect(`${getConfigProperty('reverseProxy.urlPrefix')}/reports/?error=reportNotAvailable`);
return;
}
const csv = papaparse.unparse(rows);
Expand Down
7 changes: 6 additions & 1 deletion handlers/reports-all/reportName.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type { Request, Response } from 'express'
import papaparse from 'papaparse'

import { getReportData } from '../../database/parkingDB-reporting.js'
import { getConfigProperty } from '../../helpers/functions.config.js'

export default function handler(request: Request, response: Response): void {
const reportName = request.params.reportName
Expand All @@ -12,7 +13,11 @@ export default function handler(request: Request, response: Response): void {
)

if (!rows) {
response.redirect('/reports/?error=reportNotAvailable')
response.redirect(
`${getConfigProperty(
'reverseProxy.urlPrefix'
)}/reports/?error=reportNotAvailable`
)
return
}

Expand Down
5 changes: 4 additions & 1 deletion handlers/tickets-get/byTicketNumber.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
/// <reference types="cookie-parser" />
import type { Request, Response } from 'express';
export default function handler(request: Request, response: Response): void;
export interface TicketsByTicketNumberParameters {
ticketNumber: string;
}
export default function handler(request: Request<TicketsByTicketNumberParameters>, response: Response): void;
6 changes: 4 additions & 2 deletions handlers/tickets-get/byTicketNumber.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import getParkingTicketId from '../../database/parkingDB/getParkingTicketId.js';
import { getConfigProperty } from '../../helpers/functions.config.js';
const urlPrefix = getConfigProperty('reverseProxy.urlPrefix');
export default function handler(request, response) {
const ticketNumber = request.params.ticketNumber;
const ticketId = getParkingTicketId(ticketNumber);
if (ticketId === undefined) {
response.redirect('/tickets/?error=ticketNotFound');
response.redirect(`${urlPrefix}/tickets/?error=ticketNotFound`);
}
else {
response.redirect(`/tickets/${ticketId.toString()}`);
response.redirect(`${urlPrefix}/tickets/${ticketId.toString()}`);
}
}
16 changes: 13 additions & 3 deletions handlers/tickets-get/byTicketNumber.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,25 @@
import type { Request, Response } from 'express'

import getParkingTicketId from '../../database/parkingDB/getParkingTicketId.js'
import { getConfigProperty } from '../../helpers/functions.config.js'

export default function handler(request: Request, response: Response): void {
const urlPrefix = getConfigProperty('reverseProxy.urlPrefix')

export interface TicketsByTicketNumberParameters {
ticketNumber: string
}

export default function handler(
request: Request<TicketsByTicketNumberParameters>,
response: Response
): void {
const ticketNumber = request.params.ticketNumber

const ticketId = getParkingTicketId(ticketNumber)

if (ticketId === undefined) {
response.redirect('/tickets/?error=ticketNotFound')
response.redirect(`${urlPrefix}/tickets/?error=ticketNotFound`)
} else {
response.redirect(`/tickets/${ticketId.toString()}`)
response.redirect(`${urlPrefix}/tickets/${ticketId.toString()}`)
}
}
5 changes: 4 additions & 1 deletion handlers/tickets-get/convictPrint.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
/// <reference types="cookie-parser" />
import type { Request, Response } from 'express';
export default function handler(request: Request, response: Response): void;
export interface TicketsConvictPrintParameters {
batchId: `${number}`;
}
export default function handler(request: Request<TicketsConvictPrintParameters>, response: Response): void;
9 changes: 8 additions & 1 deletion handlers/tickets-get/convictPrint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,14 @@ import type { Request, Response } from 'express'
import getConvictionBatch from '../../database/parkingDB/getConvictionBatch.js'
import markConvictionBatchAsSent from '../../database/parkingDB/markConvictionBatchAsSent.js'

export default function handler(request: Request, response: Response): void {
export interface TicketsConvictPrintParameters {
batchId: `${number}`
}

export default function handler(
request: Request<TicketsConvictPrintParameters>,
response: Response
): void {
const batchId = Number.parseInt(request.params.batchId, 10)

const batch = getConvictionBatch(batchId)
Expand Down
5 changes: 4 additions & 1 deletion handlers/tickets-get/edit.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
/// <reference types="cookie-parser" />
import type { Request, Response } from 'express';
export default function handler(request: Request, response: Response): Promise<void>;
export interface TicketsEditParameters {
ticketId: `${number}`;
}
export default function handler(request: Request<TicketsEditParameters>, response: Response): Promise<void>;
6 changes: 4 additions & 2 deletions handlers/tickets-get/edit.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
import { dateToString } from '@cityssm/utils-datetime';
import getParkingTicket from '../../database/parkingDB/getParkingTicket.js';
import { getRecentParkingTicketVehicleMakeModelValues } from '../../database/parkingDB.js';
import { getConfigProperty } from '../../helpers/functions.config.js';
const urlPrefix = getConfigProperty('reverseProxy.urlPrefix');
export default async function handler(request, response) {
const ticketId = Number.parseInt(request.params.ticketId, 10);
const ticket = await getParkingTicket(ticketId, request.session.user);
if (!ticket) {
response.redirect('/tickets/?error=ticketNotFound');
response.redirect(`${urlPrefix}/tickets/?error=ticketNotFound`);
return;
}
else if (!ticket.canUpdate ||
ticket.resolvedDate ||
ticket.recordDelete_timeMillis) {
response.redirect(`/tickets/${ticketId.toString()}/?error=accessDenied`);
response.redirect(`${urlPrefix}/tickets/${ticketId.toString()}/?error=accessDenied`);
return;
}
const vehicleMakeModelDatalist = getRecentParkingTicketVehicleMakeModelValues();
Expand Down
15 changes: 12 additions & 3 deletions handlers/tickets-get/edit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,16 @@ import type { Request, Response } from 'express'

import getParkingTicket from '../../database/parkingDB/getParkingTicket.js'
import { getRecentParkingTicketVehicleMakeModelValues } from '../../database/parkingDB.js'
import { getConfigProperty } from '../../helpers/functions.config.js'

const urlPrefix = getConfigProperty('reverseProxy.urlPrefix')

export interface TicketsEditParameters {
ticketId: `${number}`
}

export default async function handler(
request: Request,
request: Request<TicketsEditParameters>,
response: Response
): Promise<void> {
const ticketId = Number.parseInt(request.params.ticketId, 10)
Expand All @@ -16,14 +23,16 @@ export default async function handler(
)

if (!ticket) {
response.redirect('/tickets/?error=ticketNotFound')
response.redirect(`${urlPrefix}/tickets/?error=ticketNotFound`)
return
} else if (
!ticket.canUpdate ||
ticket.resolvedDate ||
ticket.recordDelete_timeMillis
) {
response.redirect(`/tickets/${ticketId.toString()}/?error=accessDenied`)
response.redirect(
`${urlPrefix}/tickets/${ticketId.toString()}/?error=accessDenied`
)
return
}

Expand Down
5 changes: 4 additions & 1 deletion handlers/tickets-get/print.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
/// <reference types="cookie-parser" />
import type { Request, Response } from 'express';
export default function handler(request: Request, response: Response): Promise<void>;
export interface TicketsPrintParameters {
ticketId: `${number}`;
}
export default function handler(request: Request<TicketsPrintParameters>, response: Response): Promise<void>;
6 changes: 4 additions & 2 deletions handlers/tickets-get/print.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import getParkingTicket from '../../database/parkingDB/getParkingTicket.js';
import { getConfigProperty } from '../../helpers/functions.config.js';
const urlPrefix = getConfigProperty('reverseProxy.urlPrefix');
export default async function handler(request, response) {
const ticketId = Number.parseInt(request.params.ticketId, 10);
const ticket = await getParkingTicket(ticketId, request.session.user);
if (!ticket) {
response.redirect('/tickets/?error=ticketNotFound');
response.redirect(`${urlPrefix}/tickets/?error=ticketNotFound`);
return;
}
else if (ticket.recordDelete_timeMillis) {
response.redirect('/tickets/?error=accessDenied');
response.redirect(`${urlPrefix}/tickets/?error=accessDenied`);
return;
}
response.render('ticket-print', {
Expand Down
13 changes: 10 additions & 3 deletions handlers/tickets-get/print.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
import type { Request, Response } from 'express'

import getParkingTicket from '../../database/parkingDB/getParkingTicket.js'
import { getConfigProperty } from '../../helpers/functions.config.js'

const urlPrefix = getConfigProperty('reverseProxy.urlPrefix')

export interface TicketsPrintParameters {
ticketId: `${number}`
}

export default async function handler(
request: Request,
request: Request<TicketsPrintParameters>,
response: Response
): Promise<void> {
const ticketId = Number.parseInt(request.params.ticketId, 10)
Expand All @@ -14,10 +21,10 @@ export default async function handler(
)

if (!ticket) {
response.redirect('/tickets/?error=ticketNotFound')
response.redirect(`${urlPrefix}/tickets/?error=ticketNotFound`)
return
} else if (ticket.recordDelete_timeMillis) {
response.redirect('/tickets/?error=accessDenied')
response.redirect(`${urlPrefix}/tickets/?error=accessDenied`)
return
}

Expand Down
5 changes: 4 additions & 1 deletion handlers/tickets-get/view.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
/// <reference types="cookie-parser" />
import type { Request, Response } from 'express';
export default function handler(request: Request, response: Response): Promise<void>;
export interface TicketsViewParameters {
ticketId: `${number}`;
}
export default function handler(request: Request<TicketsViewParameters>, response: Response): Promise<void>;
6 changes: 4 additions & 2 deletions handlers/tickets-get/view.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
import getParkingTicket from '../../database/parkingDB/getParkingTicket.js';
import { getConfigProperty } from '../../helpers/functions.config.js';
const urlPrefix = getConfigProperty('reverseProxy.urlPrefix');
export default async function handler(request, response) {
const ticketId = Number.parseInt(request.params.ticketId, 10);
const ticket = await getParkingTicket(ticketId, request.session.user);
if (!ticket) {
response.redirect('/tickets/?error=ticketNotFound');
response.redirect(`${urlPrefix}/tickets/?error=ticketNotFound`);
return;
}
else if (ticket.recordDelete_timeMillis &&
!(request.session.user.isAdmin ?? false)) {
response.redirect('/tickets/?error=accessDenied');
response.redirect(`${urlPrefix}/tickets/?error=accessDenied`);
return;
}
response.render('ticket-view', {
Expand Down
13 changes: 10 additions & 3 deletions handlers/tickets-get/view.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
import type { Request, Response } from 'express'

import getParkingTicket from '../../database/parkingDB/getParkingTicket.js'
import { getConfigProperty } from '../../helpers/functions.config.js'

const urlPrefix = getConfigProperty('reverseProxy.urlPrefix')

export interface TicketsViewParameters {
ticketId: `${number}`
}

export default async function handler(
request: Request,
request: Request<TicketsViewParameters>,
response: Response
): Promise<void> {
const ticketId = Number.parseInt(request.params.ticketId, 10)
Expand All @@ -14,13 +21,13 @@ export default async function handler(
)

if (!ticket) {
response.redirect('/tickets/?error=ticketNotFound')
response.redirect(`${urlPrefix}/tickets/?error=ticketNotFound`)
return
} else if (
ticket.recordDelete_timeMillis &&
!((request.session.user as PTSUser).isAdmin ?? false)
) {
response.redirect('/tickets/?error=accessDenied')
response.redirect(`${urlPrefix}/tickets/?error=accessDenied`)
return
}

Expand Down
10 changes: 9 additions & 1 deletion handlers/tickets-post/doAddStatus.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
/// <reference types="cookie-parser" />
import type { Request, Response } from 'express';
export default function handler(request: Request, response: Response): void;
export interface DoAddStatusBody {
statusField: string;
statusField2: string;
statusKey: string;
statusNote: string;
ticketId: `${number}`;
resolveTicket?: '1';
}
export default function handler(request: Request<unknown, unknown, DoAddStatusBody>, response: Response): void;
17 changes: 14 additions & 3 deletions handlers/tickets-post/doAddStatus.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,22 @@
import type { Request, Response } from 'express'

import createParkingTicketStatus from '../../database/parkingDB/createParkingTicketStatus.js'
import type { ParkingTicketStatusLog } from '../../types/recordTypes.js'

export default function handler(request: Request, response: Response): void {
export interface DoAddStatusBody {
statusField: string
statusField2: string
statusKey: string
statusNote: string
ticketId: `${number}`
resolveTicket?: '1'
}

export default function handler(
request: Request<unknown, unknown, DoAddStatusBody>,
response: Response
): void {
const result = createParkingTicketStatus(
request.body as Partial<ParkingTicketStatusLog>,
request.body,
request.session.user as PTSUser,
request.body.resolveTicket === '1'
)
Expand Down
11 changes: 10 additions & 1 deletion handlers/tickets-post/doGetTickets.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
/// <reference types="cookie-parser" />
import type { Request, Response } from 'express';
import { type GetParkingTicketsReturn } from '../../database/parkingDB/getParkingTickets.js';
interface DoGetTicketsBody {
isResolved: '' | '0' | '1';
licencePlateNumber: string;
limit: `${number}`;
location: string;
offset: `${number}`;
ticketNumber: string;
}
export type DoGetTicketsResponse = GetParkingTicketsReturn;
export default function handler(request: Request, response: Response): void;
export default function handler(request: Request<unknown, unknown, DoGetTicketsBody>, response: Response<DoGetTicketsResponse>): void;
export {};
Loading

0 comments on commit 3d8483c

Please # to comment.