untested WIP
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
node_modules
|
||||
# Keep environment variables out of version control
|
||||
.env
|
||||
|
||||
/generated/prisma
|
||||
@@ -0,0 +1,12 @@
|
||||
// This file was generated by Prisma, and assumes you run Prisma commands using `bun --bun run prisma [command]`.
|
||||
import { defineConfig, env } from "prisma/config";
|
||||
|
||||
export default defineConfig({
|
||||
schema: "prisma/schema.prisma",
|
||||
migrations: {
|
||||
path: "prisma/migrations",
|
||||
},
|
||||
datasource: {
|
||||
url: env("DATABASE_URL"),
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,53 @@
|
||||
import { Hono } from "hono";
|
||||
import { apiResponse } from "../modules/api-utils/apiResponse";
|
||||
import { ZodError } from "zod";
|
||||
import { cors } from "hono/cors";
|
||||
import GenericError from "../Errors/GenericError";
|
||||
import teapot from "./teapot";
|
||||
|
||||
const app = new Hono();
|
||||
const v1 = new Hono();
|
||||
|
||||
app.onError((err, ctx) => {
|
||||
const errClassName = err.constructor.name;
|
||||
|
||||
if (
|
||||
errClassName.toLowerCase().includes("prisma") ||
|
||||
err.message.toLowerCase().includes("prisma") ||
|
||||
err.name.toLowerCase().includes("prisma")
|
||||
) {
|
||||
console.trace(err);
|
||||
return ctx.json(apiResponse.internalError(), 500);
|
||||
}
|
||||
|
||||
if (err instanceof ZodError) {
|
||||
return ctx.json(
|
||||
apiResponse.zodError(err),
|
||||
//@ts-ignore
|
||||
apiResponse.zodError(err).status
|
||||
);
|
||||
}
|
||||
|
||||
const response = apiResponse.error(err);
|
||||
return ctx.json(response, response.status);
|
||||
});
|
||||
|
||||
app.use("*", cors());
|
||||
|
||||
app.notFound((c) => {
|
||||
const response = apiResponse.error(
|
||||
new GenericError({
|
||||
name: "NotFound",
|
||||
message: `Cannot ${c.req.method.toUpperCase()} ${c.req.path}`,
|
||||
status: 404,
|
||||
cause: "Unknown",
|
||||
})
|
||||
);
|
||||
return c.json(response, response.status);
|
||||
});
|
||||
|
||||
v1.route("/teapot", teapot);
|
||||
|
||||
app.route("/v1", v1);
|
||||
|
||||
export default app;
|
||||
@@ -0,0 +1,12 @@
|
||||
import { Hono } from "hono/tiny";
|
||||
import { createRoute } from "../modules/api-utils/createRoute";
|
||||
|
||||
/* /v1/teapot */
|
||||
export default createRoute("get", ["/"], (c) => {
|
||||
c.status(418);
|
||||
return c.json({
|
||||
status: 418,
|
||||
message: "I'm not a teapot",
|
||||
successful: true,
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user