64 lines
1.3 KiB
TypeScript
64 lines
1.3 KiB
TypeScript
import { cors } from "@elysiajs/cors";
|
|
import { swagger } from "@elysiajs/swagger";
|
|
import Elysia, { t } from "elysia";
|
|
import { apiMiddleware } from "../middleware/apiMiddleware";
|
|
import { auth } from "../utils/auth";
|
|
import { apikey } from "./apikey";
|
|
import { complaint } from "./complaint";
|
|
import { dashboard } from "./dashboard";
|
|
import { division } from "./division";
|
|
import { event } from "./event";
|
|
import { noc } from "./noc";
|
|
import { profile } from "./profile";
|
|
import { resident } from "./resident";
|
|
|
|
const isProduction = process.env.NODE_ENV === "production";
|
|
|
|
const api = new Elysia({
|
|
prefix: "/api",
|
|
})
|
|
.use(cors())
|
|
.get("/health", () => ({ ok: true }), {
|
|
response: {
|
|
200: t.Object({ ok: t.Boolean() }),
|
|
},
|
|
})
|
|
.all("/auth/*", ({ request }) => auth.handler(request))
|
|
.get(
|
|
"/session",
|
|
async ({ request }) => {
|
|
const data = await auth.api.getSession({ headers: request.headers });
|
|
return { data };
|
|
},
|
|
{
|
|
response: {
|
|
200: t.Object({ data: t.Any() }),
|
|
},
|
|
},
|
|
)
|
|
.use(apiMiddleware)
|
|
.use(noc)
|
|
.use(apikey)
|
|
.use(profile)
|
|
.use(division)
|
|
.use(complaint)
|
|
.use(resident)
|
|
.use(event)
|
|
.use(dashboard);
|
|
|
|
if (!isProduction) {
|
|
api.use(
|
|
swagger({
|
|
path: "/docs",
|
|
documentation: {
|
|
info: {
|
|
title: "Bun + React API",
|
|
version: "1.0.0",
|
|
},
|
|
},
|
|
}),
|
|
);
|
|
}
|
|
|
|
export default api;
|