Companies are now listing properly
This commit is contained in:
@@ -0,0 +1,15 @@
|
|||||||
|
meta {
|
||||||
|
name: Fetch Company Pages.
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url:
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
||||||
|
|
||||||
|
settings {
|
||||||
|
encodeUrl: true
|
||||||
|
}
|
||||||
Vendored
BIN
Binary file not shown.
@@ -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"] }),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
export { default as fetchAll } from "./fetchAll";
|
||||||
|
//export { default as fetch } from "./fetch";
|
||||||
@@ -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;
|
||||||
@@ -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;
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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"] }),
|
||||||
|
);
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
export { default as fetch } from "./fetch";
|
||||||
|
export { default as update } from "./update";
|
||||||
@@ -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
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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) => ({
|
||||||
|
|||||||
Reference in New Issue
Block a user