Compare commits

..

No commits in common. "550d862e0926b47c2b08a99e2a5efa35581d3961" and "9843459d22d6ea5592fdafacc609b4b4735f2072" have entirely different histories.

5 changed files with 34 additions and 86 deletions

View file

@ -1,6 +1,6 @@
import { Express, Response } from "express";
import { Express, Request, Response } from "express";
import { Logger, Responder, data } from "../utils";
import { IdRequest, ReviewRequest, typeJson } from "../types";
import { IdRequest, typeJson } from "../types";
import ApiRoute from "../utils/ApiRoute";
export class MessagesResponder extends ApiRoute {
@ -10,34 +10,9 @@ export class MessagesResponder extends ApiRoute {
}
public async start(): Promise<void> {
this.server.get(this.routeName, (req: ReviewRequest, res: Response) => {
// This is a mouthful. :sigh:
// If the request parameter "max" is present and it isn't a number
if ((req.query.max && !+req.query.max) || +req.query.max < 1) {
res.writeHead(400, typeJson);
res.write(
Responder.requestError(
"max parameter must be a positive non-zero number or undefined",
),
);
res.end();
return;
}
// Same check as the above one, but for skip
if ((req.query.skip && !+req.query.skip) || +req.query.skip < 1) {
res.writeHead(400, typeJson);
res.write(
Responder.requestError(
"skip parameter must be a number or undefined",
),
);
res.end();
return;
}
this.server.get(this.routeName, (req: Request, res: Response) => {
const receiver = req.headers["user-agent"];
const result = data.getReviews(+req.query.max, +req.query.skip);
const result = data.getReviews();
res.writeHead(200, typeJson);
res.write(JSON.stringify(result));
@ -46,40 +21,35 @@ export class MessagesResponder extends ApiRoute {
this.logger.log(`${Logger.emp(receiver)} <~ "${req.path}"`);
});
this.server.get(
`${this.routeName}/:id`,
(req: IdRequest, res: Response) => {
// "req.params.id" is the review ID that was receieved
// "result" is the review that is identified by that ID, if any
this.server.get(`${this.routeName}/:id`, (req: IdRequest, res: Response) => {
// "req.params.id" is the review ID that was receieved
// "result" is the review that is identified by that ID, if any
const receiver = req.headers["user-agent"];
const result = data.getReviewById(req.params.id);
let err = false;
const receiver = req.headers["user-agent"];
const result = data.getReviewById(req.params.id);
let err = false;
if (req.params.id.length === 6) {
if (Object.keys(result).length) {
res.writeHead(200, typeJson);
res.write(JSON.stringify(result));
res.end();
} else {
res.writeHead(404, typeJson);
res.write(Responder.notFoundError("review not found"));
res.end();
err = true;
}
if (req.params.id.length === 6) {
if (Object.keys(result).length) {
res.writeHead(200, typeJson);
res.write(JSON.stringify(result));
res.end();
} else {
res.writeHead(400, typeJson);
res.write(Responder.requestError("review id must be 6 characters"));
res.writeHead(404, typeJson);
res.write(Responder.notFoundError("review not found"));
res.end();
err = true;
}
} else {
res.writeHead(400, typeJson);
res.write(Responder.requestError("review id must be 6 characters"));
res.end();
err = true;
}
// If an error was returned to the client, mark their user agent red in the logs
this.logger.log(
`${err ? Logger.err(receiver) : Logger.emp(receiver)} <~ "${req.path}"`,
);
},
);
// If an error was returned to the client, mark their user agent red in the logs
this.logger.log(`${err ? Logger.err(receiver) : Logger.emp(receiver)} <~ "${req.path}"`);
});
this.complete();
}

View file

@ -11,10 +11,7 @@ const rating = number()
)
.required();
export const typeJson = {
"Access-Control-Allow-Origin": "*",
"Content-Type": "application/json",
};
export const typeJson = { "Access-Control-Allow-Origin": "*", "Content-Type": "application/json" };
export const userReviewSchema = object({
username: string().min(2).max(30).required(),
@ -37,10 +34,3 @@ export interface IdRequest extends Request {
id: string;
};
}
export interface ReviewRequest extends Request {
query: {
max: string;
skip: string;
};
}

View file

@ -7,7 +7,7 @@ export default class ApiRoute {
public readonly server: Express;
public readonly routeName: string;
public readonly logger = new Logger("API");
constructor(server: Express, route: string) {
// API Routes are a list of routes, the beginning route should be first
const mainRoute = `/api${route}`;
@ -33,6 +33,6 @@ export default class ApiRoute {
res.writeHead(400, typeJson);
res.write(Responder.success("ok"));
res.end();
});
})
}
}

View file

@ -6,7 +6,6 @@ import {
UserSideReview,
} from "../types";
import { toServerReview, checkFile, stripId } from "./functions";
import { Logger } from "./logger";
export class ReviewData {
public data: ServerSideReview[];
@ -32,22 +31,11 @@ export class ReviewData {
});
}
public getReviews(max?: number, skip?: number): ServerSideReview[] {
public getReviews(): ServerSideReview[] {
let final: ServerSideReview[] = [];
// If "max" isn't provided, is Infinity, or is greater than the amount of reviews
const sendAllReviews = !max || max === Infinity || max > this.data.length;
const useList = skip ? this.data.slice(skip, this.data.length) : this.data;
if (sendAllReviews) {
for (const review of useList) {
final.push(review);
}
} else {
for (const review of useList) {
while (final.length !== max) {
final.push(review);
}
}
for (const review of this.data) {
final.push(review);
}
return final;

View file

@ -47,8 +47,8 @@ export class Responder {
return JSON.stringify({
error: {
type: "notFoundError",
message: errorMessage,
},
message: errorMessage
}
});
}
}