diff --git a/README.md b/README.md index 2eaeab0..c041158 100755 --- a/README.md +++ b/README.md @@ -68,6 +68,8 @@ pnpm i # 起動 # (バックエンド/フロントエンドどちらもwatchします) +# http://localhost:5173 (デフォルトのフロントエンド)にアクセスしてください +# 開発環境のhttp://localhost:3300 (デフォルトのバックエンド)にはフロントエンド機能がありません pnpm run dev ``` diff --git a/packages/backend/src/modules/repositories/User.ts b/packages/backend/src/modules/repositories/User.ts index 6496ee8..de28426 100644 --- a/packages/backend/src/modules/repositories/User.ts +++ b/packages/backend/src/modules/repositories/User.ts @@ -20,8 +20,11 @@ export class UserRepository extends EntityRepository { async createUser(data: Pick, "userid" | "email" | "password" | "isAdmin"> & { invitationCode?: string; }) { + const isThisAdmin = (await this.em.count(UserEntity)) === 0 + ? true + : false; const requiredInvitationCode = await this.em.getRepository(ConfigEntity).get("requiredInvitationCode", "true") as string; - if (requiredInvitationCode && !data.invitationCode) { + if (requiredInvitationCode && !data.invitationCode && !isThisAdmin) { return ErrorBase({ bad: "client", code: "invitation_code_invalid", diff --git a/packages/backend/src/routes/setup/create-admin.ts b/packages/backend/src/routes/setup/create-admin.ts index ecf10b7..8af3650 100755 --- a/packages/backend/src/routes/setup/create-admin.ts +++ b/packages/backend/src/routes/setup/create-admin.ts @@ -3,7 +3,6 @@ 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 SetupCreateAdmin(fastify: FastifyInstance) { const logger = new Logger("Endpoint | setup/create-admin"); @@ -27,8 +26,8 @@ export default function SetupCreateAdmin(fastify: FastifyInstance) { if (userCount > 0) { return res.code(409).send(ErrorBase({ bad: "client", - code: "first_admin_already_exists", - message: "最初の管理者ユーザーは既に存在します。", + code: "admin_already_exists", + message: "管理者ユーザーは既に存在します。", })); } } catch (err) { @@ -38,12 +37,16 @@ export default function SetupCreateAdmin(fastify: FastifyInstance) { } try { - await fastify.orm.em.getRepository(UserEntity).createUser({ + const error = await fastify.orm.em.getRepository(UserEntity).createUser({ ...result.data, isAdmin: true, }); - logger.warn("First administrator account has been created."); + if (error) { + return res.code(400).send(error); + } + + logger.warn("Administrator account has been created."); return res.code(200).send({ success: true, diff --git a/packages/frontend/src/components/Textarea.vue b/packages/frontend/src/components/Textarea.vue index 61af609..2764c13 100644 --- a/packages/frontend/src/components/Textarea.vue +++ b/packages/frontend/src/components/Textarea.vue @@ -34,6 +34,10 @@ color: var(--text-color); font-size: 1rem; border: 1px solid transparent; + width: 100%; + max-height: 20rem; + box-sizing: border-box; + resize: none; outline: none; padding: 0.6rem; border-radius: 0.25rem;