Feat: server-infoエンドポイント / Fix: logger.tsを追跡対象に / Feat: lynqchat-jsを利用可能に / Fix: lynqchat-jsに不足していたエンドポイントを追加

This commit is contained in:
2026-03-19 15:12:26 +09:00
parent bb0bfc1dfd
commit 9e106c14f5
24 changed files with 544 additions and 94 deletions
+1
View File
@@ -1,5 +1,6 @@
{
"name": "backend",
"private": true,
"main": "dist/index.js",
"type": "module",
"scripts": {
+34
View File
@@ -0,0 +1,34 @@
import { appendFileSync } from "node:fs";
import { EOL } from "node:os";
const createLog = (
nativeLogger: (...args: any[]) => void,
type: string,
...args: any[]
) => {
if (args[0] instanceof Array) {
args = args[0];
}
const content = `${new Date().toLocaleString()} [${type}] ${args.join("\n").replaceAll("\n", "\n ")}`;
nativeLogger(content);
try {
appendFileSync(
`${import.meta.dirname}/../../../../.log/system.log`,
`${content.toString().replace(/\x1B\[[0-9;]*m/g, '')}${EOL}`
);
} catch (err) {
console.error(`${new Date().toLocaleString()} Logger: Failed to write to file.`);
}
}
const logger = {
log: (...args: any[]) => createLog(console.log, "LOG", args),
info: (...args: any[]) => createLog(console.info, "INFO", args),
error: (...args: any[]) => createLog(console.error, "ERROR", args),
warn: (...args: any[]) => createLog(console.warn, "WARN", args),
}
export default logger;
+5
View File
@@ -2,6 +2,7 @@ import type { FastifyInstance } from "fastify";
import Setup from "./setup";
import Primary from "./primary";
import Me from "./me";
import ServerInfo from "./server-info";
export default async function Routes(fastify: FastifyInstance) {
await fastify.register(Setup, {
@@ -12,6 +13,10 @@ export default async function Routes(fastify: FastifyInstance) {
prefix: "/primary",
});
await fastify.register(ServerInfo, {
prefix: "/server-info",
});
await fastify.register(Me, {
prefix: "/me",
});
@@ -0,0 +1,26 @@
import { DatabaseError } from "@/errors";
import logger from "@/lib/logger";
import { ConfigEntity } from "@/modules/entities/Config";
import { UserEntity } from "@/modules/entities/User";
import type { FastifyInstance } from "fastify";
export default async function ServerInfo(fastify: FastifyInstance) {
fastify.post("/", async (req, res) => {
try {
const config = fastify.orm.em.getRepository(ConfigEntity);
const user = fastify.orm.em.getRepository(UserEntity);
const configCount = await config.count();
const userCount = await user.count();
return res.send({
isInitialized: configCount > 0,
isFirstAdminExists: userCount > 0,
userCount,
});
} catch (err) {
logger.error("Database error:", err);
return res.code(500).send(DatabaseError());
}
});
}
-18
View File
@@ -1,18 +0,0 @@
import { ConfigEntity } from "@/modules/entities/Config";
import { UserEntity } from "@/modules/entities/User";
import type { FastifyInstance } from "fastify";
export default async function ServerInfo(fastify: FastifyInstance) {
fastify.post("/", async (req, res) => {
const config = fastify.orm.em.getRepository(ConfigEntity);
const user = fastify.orm.em.getRepository(UserEntity);
const configCount = await config.count();
const userCount = await user.count();
return res.send({
isInitialized: configCount > 0,
isFirstAdminExists: userCount > 0,
userCount,
});
});
}