From cdc16c72b266331309bff1b2d48108ded1cae919 Mon Sep 17 00:00:00 2001 From: zenn Date: Mon, 11 May 2026 18:34:23 +0900 Subject: [PATCH] =?UTF-8?q?=ED=83=9C=EA=B7=B8=EB=A5=BC=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=EC=9A=A9/=EC=9D=BC=EB=B0=98=EC=9A=A9=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=84=EB=A6=AC=ED=95=98=EA=B3=A0=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=EC=9E=90=20=EB=93=9C=EB=9E=98=EA=B7=B8=20=EC=A0=95?= =?UTF-8?q?=EB=A0=AC=EC=9D=84=20=EC=B6=94=EA=B0=80.=20=EB=8C=93=EA=B8=80/?= =?UTF-8?q?=ED=9A=8C=EC=9B=90/=EA=B4=80=EB=A6=AC=EC=9E=90=20=EC=9D=B8?= =?UTF-8?q?=EC=A6=9D=C2=B7=ED=94=84=EB=A1=9C=ED=95=84=20=ED=9D=90=EB=A6=84?= =?UTF-8?q?=20=EB=B3=B4=EC=99=84=EA=B3=BC=20=EA=B4=80=EB=A0=A8=20=EB=A7=88?= =?UTF-8?q?=EC=9D=B4=EA=B7=B8=EB=A0=88=EC=9D=B4=EC=85=98=20=EB=B0=8F=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=EB=A5=BC=20=ED=95=A8=EA=BB=98=20=EB=B0=98?= =?UTF-8?q?=EC=98=81=ED=95=B4=20=EC=9A=B4=EC=98=81=20=EB=8F=99=EC=84=A0?= =?UTF-8?q?=EC=9D=84=20=EC=95=88=EC=A0=95=ED=99=94.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- components/admin/AdminTagForm.vue | 23 +- components/comments/PostComments.vue | 317 ++++++++++++++-- components/site/LeftSidebar.vue | 4 +- db/migrations/012_add_comment_likes.sql | 9 + db/migrations/013_add_user_admin_role.sql | 12 + db/migrations/014_add_user_role_levels.sql | 27 ++ .../015_add_tag_type_and_reorder_support.sql | 13 + docs/history.md | 21 ++ docs/map.md | 14 +- docs/spec.md | 45 ++- docs/update.md | 32 ++ layouts/default.vue | 2 +- layouts/post.vue | 2 +- package.json | 2 +- pages/admin/login.vue | 16 + pages/admin/members/index.vue | 97 ++++- pages/admin/settings/index.vue | 341 ++++++++++++++++++ pages/admin/tags/index.vue | 203 ++++++++++- pages/signup.vue | 39 +- server/api/auth/bootstrap-status.get.js | 7 + server/api/auth/signup.post.js | 12 +- server/api/posts/[slug]/comments.get.js | 4 +- .../[slug]/comments/[commentId]/like.post.js | 28 ++ server/api/tags.get.js | 2 +- server/repositories/comment-repository.js | 173 +++++++-- server/repositories/content-repository.js | 74 +++- server/repositories/member-repository.js | 208 ++++++++++- server/routes/admin/api/auth/login.post.js | 29 +- server/routes/admin/api/auth/logout.post.js | 2 + server/routes/admin/api/auth/me.get.js | 2 +- .../routes/admin/api/members/[id]/role.put.js | 39 ++ server/routes/admin/api/tags.get.js | 4 +- server/routes/admin/api/tags/reorder.put.js | 27 ++ server/utils/admin-auth.js | 26 +- server/utils/admin-tag-input.js | 3 +- 35 files changed, 1721 insertions(+), 138 deletions(-) create mode 100644 db/migrations/012_add_comment_likes.sql create mode 100644 db/migrations/013_add_user_admin_role.sql create mode 100644 db/migrations/014_add_user_role_levels.sql create mode 100644 db/migrations/015_add_tag_type_and_reorder_support.sql create mode 100644 server/api/auth/bootstrap-status.get.js create mode 100644 server/api/posts/[slug]/comments/[commentId]/like.post.js create mode 100644 server/routes/admin/api/members/[id]/role.put.js create mode 100644 server/routes/admin/api/tags/reorder.put.js diff --git a/components/admin/AdminTagForm.vue b/components/admin/AdminTagForm.vue index 241044c..ca5808e 100644 --- a/components/admin/AdminTagForm.vue +++ b/components/admin/AdminTagForm.vue @@ -23,7 +23,8 @@ const form = reactive({ slug: props.initialTag.slug || '', description: props.initialTag.description || '', sortOrder: props.initialTag.sortOrder ?? 0, - color: props.initialTag.color || '#15171a' + color: props.initialTag.color || '#15171a', + tagType: props.initialTag.tagType || 'managed' }) /** @@ -63,8 +64,9 @@ const submitTag = () => { name: form.name.trim(), slug: toSlug(form.slug || form.name), description: form.description.trim(), - sortOrder: Number(form.sortOrder) || 0, - color: form.color + sortOrder: form.tagType === 'managed' ? Number(form.sortOrder) || 0 : 0, + color: form.color, + tagType: form.tagType }) } @@ -102,6 +104,17 @@ const submitTag = () => { /> + +