Chg: トークンの入力形式をBearerに変更 / Feat: ユニークなIDを生成する関数を作成 / Feat: userテーブルにプロフィールを作成 / Chg: ユーザー作成でのユーザー名を任意に変更 / Fix: meエンドポイントで成功時にもsuccessをレスポンスに含める / Fix: signupエンドポイントで入力が重複したときにデータベースエラーではなく入力エラーとしてレスポンス / Fix: setup/initializationエンドポイントでデータベースエラーが出る問題を修正 / Fix: L.jsの型を実際の値に更新
This commit is contained in:
@@ -6,6 +6,9 @@ export default async function Me(fastify: FastifyInstance) {
|
||||
return res.code(400).send(req.token);
|
||||
|
||||
const { password, email, ...safeUser } = req.token.user;
|
||||
return res.send(safeUser);
|
||||
return res.send({
|
||||
...safeUser,
|
||||
success: true,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -10,19 +10,42 @@ export default function SignUp(fastify: FastifyInstance) {
|
||||
fastify.post("/", async (req, res) => {
|
||||
res.header("Content-Type", "application/json");
|
||||
|
||||
const result = UserRepository.schema.safeParse(req.body);
|
||||
const result = UserRepository.schema.pick({
|
||||
userid: true,
|
||||
email: true,
|
||||
password: true,
|
||||
}).safeParse(req.body);
|
||||
|
||||
if (!result.success) {
|
||||
console.log(result.error.issues)
|
||||
return res.code(400).send(InputError(result.error.issues));
|
||||
}
|
||||
|
||||
try {
|
||||
await fastify.orm.em.getRepository(UserEntity).createUser(result.data);
|
||||
await fastify.orm.em.getRepository(UserEntity).createUser({
|
||||
...result.data,
|
||||
isAdmin: false,
|
||||
});
|
||||
|
||||
return res.code(200).send({
|
||||
success: true,
|
||||
});
|
||||
} catch (err) {
|
||||
} catch (err: any) {
|
||||
if (err.name === "UniqueConstraintViolationException") {
|
||||
const duplicate = err.constraint.replace("user_", "").replace("_unique", "");
|
||||
|
||||
if (duplicate !== "id") {
|
||||
return res.code(400).send(InputError([
|
||||
{
|
||||
validation: "regex",
|
||||
code: "invalid_string",
|
||||
message: "Duplicate",
|
||||
path: [duplicate]
|
||||
}
|
||||
]))
|
||||
}
|
||||
}
|
||||
|
||||
logger.error("Database Error: User create failed.", err);
|
||||
|
||||
return res.code(500).send(DatabaseError());
|
||||
|
||||
@@ -3,6 +3,7 @@ import Logger from "@/lib/logger";
|
||||
import type { FastifyInstance } from "fastify";
|
||||
import { UserRepository } from "@/modules/repositories/User";
|
||||
import { DatabaseError, ErrorBase, InputError } from "@/errors";
|
||||
import { UniqueConstraintViolationException } from "@mikro-orm/core";
|
||||
|
||||
export default function CreateAdmin(fastify: FastifyInstance) {
|
||||
const logger = new Logger("Endpoint | setup/create-admin");
|
||||
@@ -10,7 +11,11 @@ export default function CreateAdmin(fastify: FastifyInstance) {
|
||||
fastify.post("/", async (req, res) => {
|
||||
res.header("Content-Type", "application/json");
|
||||
|
||||
const result = UserRepository.schema.omit({ isAdmin: true }).safeParse(req.body);
|
||||
const result = UserRepository.schema.pick({
|
||||
userid: true,
|
||||
email: true,
|
||||
password: true,
|
||||
}).safeParse(req.body);
|
||||
|
||||
if (!result.success) {
|
||||
return res.code(400).send(InputError(result.error.issues));
|
||||
@@ -38,7 +43,7 @@ export default function CreateAdmin(fastify: FastifyInstance) {
|
||||
isAdmin: true,
|
||||
});
|
||||
|
||||
logger.warn("First administrator account has been created.")
|
||||
logger.warn("First administrator account has been created.");
|
||||
|
||||
return res.code(200).send({
|
||||
success: true,
|
||||
|
||||
@@ -48,7 +48,7 @@ export default function Initialization(fastify: FastifyInstance) {
|
||||
const entries = Object.entries(result.data).filter(([key]) => key !== "force");
|
||||
|
||||
for (const [key, value] of entries) {
|
||||
const entity = fastify.orm.em.getRepository(ConfigEntity).set(
|
||||
const entity = await fastify.orm.em.getRepository(ConfigEntity).set(
|
||||
key,
|
||||
typeof value === "string"
|
||||
? value
|
||||
|
||||
Reference in New Issue
Block a user