1
0
cvsa-legacy/packages/backend/src/index.ts

83 lines
2.2 KiB
TypeScript

import { Elysia, ErrorHandler } from "elysia";
import { getBindingInfo, logStartup } from "./startMessage";
import { pingHandler } from "@backend/routes/ping";
import { cors } from "@elysiajs/cors";
import { songHandler } from "@backend/routes/song/info";
import { rootHandler } from "@backend/routes/root";
import { getVideoMetadataHandler } from "@backend/routes/video/metadata";
import { closeMileStoneHandler } from "@backend/routes/song/milestone";
import { authHandler } from "@backend/routes/auth";
import { onAfterHandler } from "./onAfterHandle";
import { searchHandler } from "@backend/routes/search";
import { getVideoSnapshotsHandler } from "@backend/routes/video/snapshots";
import { addSongHandler } from "@backend/routes/song/add";
import { deleteSongHandler } from "@backend/routes/song/delete";
import { songEtaHandler } from "@backend/routes/video/eta";
import "./mq";
import pkg from "../package.json";
import { getUnlabelledVideos, postVideoLabel } from "@backend/routes/video/label";
import { openAPIMiddleware } from "@backend/middlewares/openapi";
const [host, port] = getBindingInfo();
logStartup(host, port);
const errorHandler: ErrorHandler = ({ code, status, error }) => {
if (code === "NOT_FOUND")
return status(404, {
message: "The requested resource was not found."
});
if (code === "VALIDATION") return error.detail(error.message);
return error;
};
const app = new Elysia({
serve: {
hostname: host
}
})
.onError(errorHandler)
.use(onAfterHandler)
.use(cors())
.use(openAPIMiddleware)
.use(rootHandler)
.use(pingHandler)
.use(authHandler)
.use(getVideoMetadataHandler)
.use(songHandler)
.use(closeMileStoneHandler)
.use(searchHandler)
.use(getVideoSnapshotsHandler)
.use(addSongHandler)
.use(deleteSongHandler)
.use(songEtaHandler)
.use(getUnlabelledVideos)
.use(postVideoLabel)
.get(
"/song/:id",
({ redirect, params }) => {
console.log(`/song/${params.id}/info`);
return redirect(`/song/${params.id}/info`, 302);
},
{
detail: {
hide: true
}
}
)
.get(
"/video/:id",
({ redirect, params }) => {
return redirect(`/video/${params.id}/info`, 302);
},
{
detail: {
hide: true
}
}
)
.listen(15412);
export const VERSION = pkg.version;
export type App = typeof app;