44 lines
1.6 KiB
TypeScript
44 lines
1.6 KiB
TypeScript
import { Hono } from "hono/tiny";
|
|
import { createRoute } from "../../modules/api-utils/createRoute";
|
|
import { companies } from "../../managers/companies";
|
|
import { apiResponse } from "../../modules/api-utils/apiResponse";
|
|
import { ContentfulStatusCode } from "hono/utils/http-status";
|
|
import { authMiddleware } from "../middleware/authorization";
|
|
|
|
/* /v1/company/companies */
|
|
export default createRoute(
|
|
"get",
|
|
["/companies"],
|
|
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 search = c.req.query("search") as string;
|
|
|
|
const data = search
|
|
? await companies.search(search, page, rpp)
|
|
: await companies.fetchPages(page, rpp);
|
|
|
|
const companyQty = search
|
|
? (await companies.search(search, 1, 999999)).length
|
|
: await companies.count();
|
|
|
|
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.many"] }),
|
|
);
|