Add basic message querying

This commit is contained in:
powermaker450 2024-08-21 02:59:17 -04:00
parent a2de4f12d8
commit 99ef2cb9e7
5 changed files with 44 additions and 12 deletions

View file

@ -3,16 +3,19 @@ import express from "express";
import dotenv from "dotenv"; import dotenv from "dotenv";
import { checkFile, emp, Logger } from "./utils"; import { checkFile, emp, Logger } from "./utils";
import { ReviewData } from "./utils/ReviewData"; import { ReviewData } from "./utils/ReviewData";
import { MessagesResponder } from "./routes/messages";
dotenv.config(); dotenv.config();
const app = express(); const app = express();
const logger = new Logger("Main"); const logger = new Logger("Main");
const data = new ReviewData(checkFile("data.json", "utf8")); 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; const port = +process.env.PORT || 8080;
post.start(); post.start();
query.start();
app.listen(port, () => { app.listen(port, () => {
logger.log(`Server started on ${emp(`http://localhost:${port}`)}`); logger.log(`Server started on ${emp(`http://localhost:${port}`)}`);

30
src/routes/messages.ts Normal file
View file

@ -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<void> {
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();
})
}
}

View file

@ -1,16 +1,14 @@
import { userReviewSchema, typeJson } from "../types"; 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 { Express, Request, Response } from "express";
import { ReviewData } from "../utils/ReviewData"; import { ReviewData } from "../utils/ReviewData";
export class PostListener { export class PostListener {
private server: Express; private server: Express;
private data: ReviewData;
private readonly logger = new Logger("Post Listener"); private readonly logger = new Logger("Post Listener");
constructor(server: Express, data: ReviewData) { constructor(server: Express) {
this.server = server; this.server = server;
this.data = data;
} }
public async start(): Promise<void> { public async start(): Promise<void> {
@ -41,7 +39,7 @@ export class PostListener {
this.logger.log(`${sender} ~>`, validUserReview); this.logger.log(`${sender} ~>`, validUserReview);
try { try {
this.data.appendReview(validUserReview); data.appendReview(validUserReview);
res.writeHead(201, typeJson); res.writeHead(201, typeJson);
res.write(responder.success("review was sent")); res.write(responder.success("review was sent"));

View file

@ -5,7 +5,7 @@ import {
userRating, userRating,
UserSideReview, UserSideReview,
} from "../types"; } from "../types";
import { appendId } from "./functions"; import { appendId, checkFile } from "./functions";
export class ReviewData { export class ReviewData {
public data: ServerSideReview[]; public data: ServerSideReview[];
@ -31,14 +31,12 @@ export class ReviewData {
}); });
} }
public getReviews(maxCount = Infinity): ServerSideReview[] { public getReviews(): ServerSideReview[] {
let final: ServerSideReview[] = []; let final: ServerSideReview[] = [];
while (final.length < maxCount) {
for (const review of this.data) { for (const review of this.data) {
final.push(review); final.push(review);
} }
}
return final; return final;
} }
@ -101,3 +99,5 @@ export class ReviewData {
return final; return final;
} }
} }
export const data = new ReviewData(checkFile("data.json", "utf8"));

View file

@ -1,3 +1,4 @@
export * from "./functions"; export * from "./functions";
export * from "./logger"; export * from "./logger";
export * from "./responder"; export * from "./responder";
export * from "./ReviewData";