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",
["/companies"],
async (c) => {
/**
*
*
* @TODO MAKE THIS WORK
*
*
*
*/
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();
const company = await companies.fetch(c.req.param("identifier"));
const data = await companies.fetchPages(page, rpp);
const response = apiResponse.successful(
"Company Fetched Successfully!",
company,
let response = apiResponse.successful(
"Companies Fetched Successfully!",
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);
},
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("/auth", require("./routers/authRouter").default);
v1.route("/user", require("./routers/user").default);
v1.route("/company", require("./routers/companyRouter").default);
app.route("/v1", v1);
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
await refreshCompanies();
setInterval(() => refreshCompanies, 60 * 1000);
setInterval(() => {
return refreshCompanies();
}, 60 * 1000);
Bun.serve({
port: PORT,
+27
View File
@@ -17,4 +17,31 @@ export const companies = {
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
*/
export const apiResponse = {
successful: (message: string, data?: any) => ({
successful: (message: string, data?: any, meta?: {}) => ({
status: 200,
message,
data,
successful: true,
meta: {
timestamp: Date.now(),
...meta,
},
}),
created: (message: string, data?: any) => ({