62 lines
1.5 KiB
TypeScript
62 lines
1.5 KiB
TypeScript
import { getSingerForBirthday, pickSinger, pickSpecialSinger, Singer } from "@elysia/lib/singers";
|
|
import { VERSION } from "@elysia/src";
|
|
import { Elysia, t } from "elysia";
|
|
|
|
const SingerObj = t.Object({
|
|
name: t.String(),
|
|
color: t.Optional(t.String()),
|
|
birthday: t.Optional(t.String()),
|
|
message: t.Optional(t.String())
|
|
});
|
|
|
|
export const rootHandler = new Elysia().get(
|
|
"/",
|
|
async () => {
|
|
let singer: Singer | Singer[];
|
|
const shouldShowSpecialSinger = Math.random() < 0.016;
|
|
if (getSingerForBirthday().length !== 0) {
|
|
singer = JSON.parse(JSON.stringify(getSingerForBirthday())) as Singer[];
|
|
for (const s of singer) {
|
|
delete s.birthday;
|
|
s.message = `祝${s.name}生日快乐~`;
|
|
}
|
|
} else if (shouldShowSpecialSinger) {
|
|
singer = pickSpecialSinger();
|
|
} else {
|
|
singer = pickSinger();
|
|
}
|
|
return {
|
|
project: {
|
|
name: "中V档案馆",
|
|
mascot: "知夏",
|
|
quote: "星河知海夏生光"
|
|
},
|
|
status: 200,
|
|
version: VERSION,
|
|
time: Date.now(),
|
|
singer: singer
|
|
};
|
|
},
|
|
{
|
|
response: {
|
|
200: t.Object({
|
|
project: t.Object({
|
|
name: t.String(),
|
|
mascot: t.String(),
|
|
quote: t.String()
|
|
}),
|
|
status: t.Number(),
|
|
version: t.String(),
|
|
time: t.Number(),
|
|
singer: t.Union([SingerObj, t.Array(SingerObj)])
|
|
})
|
|
},
|
|
detail: {
|
|
summary: "Root route",
|
|
description:
|
|
"The root path. It returns a JSON object containing a random virtual singer, \
|
|
backend version, current server time and other miscellaneous information."
|
|
}
|
|
}
|
|
);
|