Companies are now listing properly

This commit is contained in:
2026-02-13 17:02:03 -06:00
parent 24d0c066fd
commit 628dc35dea
13 changed files with 123 additions and 15 deletions
+15
View File
@@ -0,0 +1,15 @@
meta {
name: Fetch Company Pages.
type: http
seq: 2
}
get {
url:
body: none
auth: inherit
}
settings {
encodeUrl: true
}
BIN
View File
Binary file not shown.
+19 -13
View File
@@ -10,22 +10,28 @@ export default createRoute(
"get", "get",
["/companies"], ["/companies"],
async (c) => { async (c) => {
/** const page = new Number(c.req.query("page") ?? 1) as number;
* const rpp = new Number(c.req.query("rpp") ?? 30) as number; // Records Per Page
* const companyQty = await companies.count();
* @TODO MAKE THIS WORK
*
*
*
*/
const company = await companies.fetch(c.req.param("identifier")); const data = await companies.fetchPages(page, rpp);
const response = apiResponse.successful( let response = apiResponse.successful(
"Company Fetched Successfully!", "Companies Fetched Successfully!",
company, data,
{
pagination: {
previousPage: page == 1 ? null : page - 1, // Previous Page
currentPage: page, // Current Page
nextPage: page >= companyQty / rpp ? null : page + 1, // Next Page
totalPages: Math.ceil(companyQty / rpp), // Total Number of Pages
totalRecords: companyQty, // Total Number of Records
listedRecords: rpp, // Total Number of Records being recieved at time of request.
},
},
); );
return c.json(response, response.status as ContentfulStatusCode); return c.json(response, response.status as ContentfulStatusCode);
}, },
authMiddleware({ permissions: ["company.fetch"] }), authMiddleware({ permissions: ["company.fetch.many"] }),
); );
+2
View File
@@ -0,0 +1,2 @@
export { default as fetchAll } from "./fetchAll";
//export { default as fetch } from "./fetch";
+7
View File
@@ -0,0 +1,7 @@
import { Hono } from "hono";
import * as companyRoutes from "../companies";
const companyRouter = new Hono();
Object.values(companyRoutes).map((r) => companyRouter.route("/", r));
export default companyRouter;
+7
View File
@@ -0,0 +1,7 @@
import { Hono } from "hono";
import * as userRoutes from "../user/@me";
const authRouter = new Hono();
Object.values(userRoutes).map((r) => authRouter.route("/", r));
export default authRouter;
+2
View File
@@ -48,6 +48,8 @@ app.notFound((c) => {
v1.route("/teapot", teapot); v1.route("/teapot", teapot);
v1.route("/auth", require("./routers/authRouter").default); v1.route("/auth", require("./routers/authRouter").default);
v1.route("/user", require("./routers/user").default);
v1.route("/company", require("./routers/companyRouter").default);
app.route("/v1", v1); app.route("/v1", v1);
export default app; export default app;
+18
View File
@@ -0,0 +1,18 @@
import { ContentfulStatusCode } from "hono/utils/http-status";
import { apiResponse } from "../../../modules/api-utils/apiResponse";
import { createRoute } from "../../../modules/api-utils/createRoute";
import { authMiddleware } from "../../middleware/authorization";
// /v1/user/@me
export default createRoute(
"get",
["/@me"],
(c) => {
const response = apiResponse.successful(
"Fetched user.",
c.get("user")?.toJson(),
);
return c.json(response, response.status as ContentfulStatusCode);
},
authMiddleware({ scopes: ["user.read"] }),
);
+2
View File
@@ -0,0 +1,2 @@
export { default as fetch } from "./fetch";
export { default as update } from "./update";
+19
View File
@@ -0,0 +1,19 @@
import { ContentfulStatusCode } from "hono/utils/http-status";
import { apiResponse } from "../../../modules/api-utils/apiResponse";
import { createRoute } from "../../../modules/api-utils/createRoute";
import { authMiddleware } from "../../middleware/authorization";
export default createRoute(
"patch",
["/@me"],
async (c) => {
const updatedUser = await c.get("user")?.update(await c.req.json());
const response = apiResponse.successful(
"Successfully updated user.",
updatedUser?.toJson(),
);
return c.json(response, response.status as ContentfulStatusCode);
},
authMiddleware({ scopes: ["user.write"] }),
);
+3 -1
View File
@@ -9,7 +9,9 @@ if (Bun.env.NODE_ENV == "development") setupEventDebugger();
// Refresh the internal list of companies every minute // Refresh the internal list of companies every minute
await refreshCompanies(); await refreshCompanies();
setInterval(() => refreshCompanies, 60 * 1000); setInterval(() => {
return refreshCompanies();
}, 60 * 1000);
Bun.serve({ Bun.serve({
port: PORT, port: PORT,
+27
View File
@@ -17,4 +17,31 @@ export const companies = {
return new CompanyController(search); return new CompanyController(search);
}, },
async count() {
return await prisma.company.count();
},
/**
* Fetch Company Pages
*
* This is a method to be used to fetch pages of companies used for pagination.
*
* @param page - Page number
* @param rpp - Records Per Page
*/
async fetchPages(page: number, rpp: number) {
page = page.valueOf();
rpp = rpp.valueOf();
const skip = (page > 1 ? page : 0) * rpp;
const take = rpp ?? 30;
const data = prisma.company.findMany({
skip,
take,
});
return data;
},
}; };
+2 -1
View File
@@ -4,13 +4,14 @@ import { ZodError } from "zod";
* @ignore * @ignore
*/ */
export const apiResponse = { export const apiResponse = {
successful: (message: string, data?: any) => ({ successful: (message: string, data?: any, meta?: {}) => ({
status: 200, status: 200,
message, message,
data, data,
successful: true, successful: true,
meta: { meta: {
timestamp: Date.now(), timestamp: Date.now(),
...meta,
}, },
}), }),
created: (message: string, data?: any) => ({ created: (message: string, data?: any) => ({