34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
import fs from "node:fs/promises";
|
|
import { defineEventHandler, setResponseStatus, readBody } from "h3";
|
|
|
|
import { database as db } from "../utils/database";
|
|
import { isFirstRun } from "./firstRun.get";
|
|
import { getPasswordHash } from "./login.post";
|
|
import Snowflake from "~/utils/snowflake";
|
|
|
|
import { createError } from "#imports";
|
|
|
|
export default defineEventHandler(async (e) => {
|
|
if (!isFirstRun()) {
|
|
setResponseStatus(e, 404);
|
|
return "";
|
|
}
|
|
|
|
const body = await readBody(e);
|
|
if (typeof body !== "object") throw createError({ message: "Invalid body", statusCode: 400 });
|
|
const username = body.username;
|
|
if (typeof username !== "string") throw createError({ message: "username is not string", statusCode: 400 });
|
|
const password = body.password;
|
|
if (typeof password !== "string") throw createError({ message: "password is not string", statusCode: 400 });
|
|
const email = body.email;
|
|
if (typeof email !== "string") throw createError({ message: "email is not string", statusCode: 400 });
|
|
|
|
const sql = await fs.readFile("./schemaModel.sql", "utf-8");
|
|
|
|
const database = await db.new({ multipleStatements: true });
|
|
await database.query(sql);
|
|
await database.execute(
|
|
"INSERT INTO `users` (`id`, `username`, `password`, `email`) VALUES (?, ?, ?, ?)",
|
|
[new Snowflake().toString(), username, getPasswordHash(password), email]);
|
|
return "";
|
|
});
|