From 99ef2cb9e7f183b5513443cf8d602f0a1bb8af58 Mon Sep 17 00:00:00 2001 From: powermaker450 Date: Wed, 21 Aug 2024 02:59:17 -0400 Subject: [PATCH] Add basic message querying --- src/main.ts | 5 ++++- src/routes/messages.ts | 30 ++++++++++++++++++++++++++++++ src/routes/post.ts | 8 +++----- src/utils/ReviewData.ts | 12 ++++++------ src/utils/index.ts | 1 + 5 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 src/routes/messages.ts diff --git a/src/main.ts b/src/main.ts index 8b330f5..0eeedbb 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,16 +3,19 @@ import express from "express"; import dotenv from "dotenv"; import { checkFile, emp, Logger } from "./utils"; import { ReviewData } from "./utils/ReviewData"; +import { MessagesResponder } from "./routes/messages"; dotenv.config(); const app = express(); const logger = new Logger("Main"); const data = new ReviewData(checkFile("data.json", "utf8")); -const post = new PostListener(app, data); +const post = new PostListener(app); +const query = new MessagesResponder(app); const port = +process.env.PORT || 8080; post.start(); +query.start(); app.listen(port, () => { logger.log(`Server started on ${emp(`http://localhost:${port}`)}`); diff --git a/src/routes/messages.ts b/src/routes/messages.ts new file mode 100644 index 0000000..79bc570 --- /dev/null +++ b/src/routes/messages.ts @@ -0,0 +1,30 @@ +import { Express, Request, Response } from "express"; +import { Logger, data } from "../utils"; +import { typeJson } from "../types"; + +export class MessagesResponder { + private server: Express; + private readonly logger = new Logger("Query"); + + constructor(server: Express) { + this.server = server; + } + + public async start(): Promise { + this.server.get("/messages", (req: Request, res: Response) => { + const result = data.getReviews(); + + res.writeHead(result.toString() ? 200 : 204, typeJson); + res.write(JSON.stringify(result)); + res.end(); + }); + + this.server.get("/messages/:id", (req: Request, res: Response) => { + const result = data.getReviewById(req.params.id); + + res.writeHead(result.toString() ? 200 : 204, typeJson); + res.write(JSON.stringify(result)); + res.end(); + }) + } +} diff --git a/src/routes/post.ts b/src/routes/post.ts index 85a1288..04ad5fe 100644 --- a/src/routes/post.ts +++ b/src/routes/post.ts @@ -1,16 +1,14 @@ import { userReviewSchema, typeJson } from "../types"; -import { bold, emp, Logger, responder } from "../utils"; +import { bold, emp, Logger, responder, data } from "../utils"; import { Express, Request, Response } from "express"; import { ReviewData } from "../utils/ReviewData"; export class PostListener { private server: Express; - private data: ReviewData; private readonly logger = new Logger("Post Listener"); - constructor(server: Express, data: ReviewData) { + constructor(server: Express) { this.server = server; - this.data = data; } public async start(): Promise { @@ -41,7 +39,7 @@ export class PostListener { this.logger.log(`${sender} ~>`, validUserReview); try { - this.data.appendReview(validUserReview); + data.appendReview(validUserReview); res.writeHead(201, typeJson); res.write(responder.success("review was sent")); diff --git a/src/utils/ReviewData.ts b/src/utils/ReviewData.ts index 13939b1..53b943d 100644 --- a/src/utils/ReviewData.ts +++ b/src/utils/ReviewData.ts @@ -5,7 +5,7 @@ import { userRating, UserSideReview, } from "../types"; -import { appendId } from "./functions"; +import { appendId, checkFile } from "./functions"; export class ReviewData { public data: ServerSideReview[]; @@ -31,13 +31,11 @@ export class ReviewData { }); } - public getReviews(maxCount = Infinity): ServerSideReview[] { + public getReviews(): ServerSideReview[] { let final: ServerSideReview[] = []; - while (final.length < maxCount) { - for (const review of this.data) { - final.push(review); - } + for (const review of this.data) { + final.push(review); } return final; @@ -101,3 +99,5 @@ export class ReviewData { return final; } } + +export const data = new ReviewData(checkFile("data.json", "utf8")); diff --git a/src/utils/index.ts b/src/utils/index.ts index 5b9a3cf..fdf92b5 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,3 +1,4 @@ export * from "./functions"; export * from "./logger"; export * from "./responder"; +export * from "./ReviewData";