From d2e3e288ccf2b7c551bacb6b7d21d05beec9f053 Mon Sep 17 00:00:00 2001 From: ByungCheol Date: Sun, 12 Jul 2026 00:10:06 +0900 Subject: [PATCH] =?UTF-8?q?feat(admin):=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=86=8C=EC=85=9C=20=E2=86=92=20=EC=95=84=EC=9D=B4=EB=94=94/?= =?UTF-8?q?=EB=B9=84=EB=B0=80=EB=B2=88=ED=98=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LoginPage: 아이디/비밀번호 폼 (구글 GIS·개발자로그인 제거) - auth api/store: /api/admin/auth login·me·logout, Admin 타입 - Member 타입을 api/members로 이전, 회원목록 self-lock(본인 잠금) 제거 — 관리자는 회원 아님 - google-gsi 타입 제거 Co-Authored-By: Claude Opus 4.8 (1M context) --- src/api/auth.ts | 30 +++----- src/api/members.ts | 14 +++- src/layouts/AdminLayout.vue | 2 +- src/pages/LoginPage.vue | 123 ++++++++++---------------------- src/pages/MembersPage.vue | 19 ++--- src/pages/SubscriptionsPage.vue | 2 +- src/router/index.ts | 8 +-- src/stores/auth.ts | 33 ++++----- src/types/google-gsi.d.ts | 32 --------- 9 files changed, 84 insertions(+), 179 deletions(-) delete mode 100644 src/types/google-gsi.d.ts diff --git a/src/api/auth.ts b/src/api/auth.ts index f84c3cc..4e02e61 100644 --- a/src/api/auth.ts +++ b/src/api/auth.ts @@ -1,33 +1,23 @@ import { http } from './http' -export interface Member { +/** 관리자 계정 (아이디/비밀번호 로그인). 회원(users)과 분리. */ +export interface Admin { id: number - email: string - nickname: string - role: 'USER' | 'ADMIN' - provider: 'GOOGLE' | 'APPLE' - subscriptionTier: 'FREE' | 'AD_FREE' | 'PREMIUM' - status: 'ACTIVE' | 'DORMANT' | 'BANNED' - profileImage: string | null - createdAt: string + username: string + name: string } -export interface LoginResponse { +export interface AdminLoginResponse { token: string expiresInSeconds: number - member: Member + admin: Admin } export const authApi = { - googleClientId: () => http.get<{ clientId: string }>('/api/auth/google-client-id'), + login: (username: string, password: string) => + http.post('/api/admin/auth/login', { username, password }), - googleLogin: (idToken: string, rememberMe = true) => - http.post('/api/auth/google', { idToken, rememberMe }), + me: () => http.get('/api/admin/auth/me'), - me: () => http.get('/api/auth/me'), - - logout: () => http.post('/api/auth/logout'), - - /** 개발자 로그인 — local 백엔드 전용(구글 없이 이메일로 세션 발급). */ - devLogin: (email: string) => http.post('/api/auth/dev-login', { email }), + logout: () => http.post('/api/admin/auth/logout'), } diff --git a/src/api/members.ts b/src/api/members.ts index e37c77b..c415d44 100644 --- a/src/api/members.ts +++ b/src/api/members.ts @@ -1,5 +1,17 @@ import { http } from './http' -import type { Member } from './auth' + +/** 앱 회원(users) — 소셜 로그인. 관리자(Admin)와 별개. */ +export interface Member { + id: number + email: string + nickname: string + role: 'USER' | 'ADMIN' + provider: 'GOOGLE' | 'APPLE' + subscriptionTier: 'FREE' | 'AD_FREE' | 'PREMIUM' + status: 'ACTIVE' | 'DORMANT' | 'BANNED' + profileImage: string | null + createdAt: string +} export type MemberStatus = 'ACTIVE' | 'DORMANT' | 'BANNED' export type MemberTier = 'FREE' | 'AD_FREE' | 'PREMIUM' diff --git a/src/layouts/AdminLayout.vue b/src/layouts/AdminLayout.vue index 723d97b..c45861b 100644 --- a/src/layouts/AdminLayout.vue +++ b/src/layouts/AdminLayout.vue @@ -9,7 +9,7 @@ - {{ auth.member?.nickname ?? '관리자' }} + {{ auth.admin?.name ?? '관리자' }} diff --git a/src/pages/LoginPage.vue b/src/pages/LoginPage.vue index 9a897cc..00d8572 100644 --- a/src/pages/LoginPage.vue +++ b/src/pages/LoginPage.vue @@ -9,34 +9,43 @@
관리자 계정으로 로그인하세요
-
-
-
+ + + + + + + + + + + {{ error }} + -
- -
개발용 (local 백엔드)
-
- - - - - - {{ error }} - - -
- 구글 로그인이 설정되지 않았습니다. (서버 GOOGLE_CLIENT_ID 확인) -
+
@@ -44,82 +53,24 @@