From 779015d2fe5ca19b8a642a5c395817e031d04534 Mon Sep 17 00:00:00 2001 From: Tch1b0 Date: Fri, 28 Jun 2024 10:22:01 +0200 Subject: [PATCH] add route to get latest project --- server/api.ts | 13 +++++++++++++ server/classes/projectCollection.ts | 9 +++++++++ utility/datafetching.ts | 9 +++++++++ 3 files changed, 31 insertions(+) diff --git a/server/api.ts b/server/api.ts index 9c3ee86..8422a9c 100644 --- a/server/api.ts +++ b/server/api.ts @@ -8,6 +8,7 @@ import Router, { import { readBody, H3Event } from "h3"; import { User } from "./classes/user"; import ProjectCollection from "./classes/projectCollection"; +import { Project } from "./classes/project"; const app = new Router(); const admin = new User( @@ -19,6 +20,8 @@ export const github = new GitHub(process.env["GH_USERNAME"] || "Tch1b0"); export const projectCollection = new ProjectCollection(); +let latestProject: Project | null; + /** * validate that the user is authenticated * @param req the request object of the request @@ -50,6 +53,15 @@ app.get("/project", (e) => { sendJson(e.res, project.toJSON()); }); +app.get("/project-latest", (e) => { + const project = latestProject ?? projectCollection.getRandomProject(); + if (!project) { + sendError(e.res, "No projects found", 404); + return; + } + sendJson(e.res, project.toJSON()); +}); + app.get("/project-ids", (e) => { sendJson( e.res, @@ -95,6 +107,7 @@ app.post("/article", async (e) => { const project = projectCollection.getProjectById(projectId); project.addArticle(content, images); projectCollection.save(); + latestProject = project; e.res.end("Ok"); }); diff --git a/server/classes/projectCollection.ts b/server/classes/projectCollection.ts index 12dcb03..d91fe23 100644 --- a/server/classes/projectCollection.ts +++ b/server/classes/projectCollection.ts @@ -90,6 +90,15 @@ export default class ProjectCollection { return this.projects.find((project) => project.id === id); } + getRandomProject(): Project { + const projectsWithArticle = this.projects.filter( + (p) => p.article !== null && p.article !== undefined, + ); + return projectsWithArticle[ + Math.floor(Math.random() * projectsWithArticle.length) + ]; + } + /** * checks if there are outdated posts to migrate, and migrates them */ diff --git a/utility/datafetching.ts b/utility/datafetching.ts index 49ff186..d3ce191 100644 --- a/utility/datafetching.ts +++ b/utility/datafetching.ts @@ -27,6 +27,15 @@ export async function getProject(id: number | string): Promise { return project; } +export async function getLatestProjectMeta(): Promise { + const project = await getFromApi( + `project-latest`, + `project-latest`, + ); + + return project; +} + export async function getProjects(): Promise { const projects = await getFromApi("projects", "projects");