- 일시 {formatEventDate(schedule.startAt)}
+ 일시 {formatEventDate(schedule.start_at)}
장소 {schedule.location || '미정'}
@@ -44,12 +40,12 @@ export default function EventDetailContent({
{/* 2. 신청 현황 버튼 */}
diff --git a/src/components/ProfileButton.tsx b/src/components/ProfileButton.tsx
index de2f3f7..9632e6e 100644
--- a/src/components/ProfileButton.tsx
+++ b/src/components/ProfileButton.tsx
@@ -8,7 +8,7 @@ import {
DropdownMenuSeparator,
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu';
-import type { User } from '@/types/schemas';
+import type { User } from '@/types/auth';
interface ProfileButtonProps {
user: User;
diff --git a/src/hooks/useAuth.ts b/src/hooks/useAuth.ts
index 1a967be..d55a543 100644
--- a/src/hooks/useAuth.ts
+++ b/src/hooks/useAuth.ts
@@ -1,15 +1,14 @@
-import loginApi from '@/api/auth/login';
-import logoutApi from '@/api/auth/logout';
-import signupApi from '@/api/auth/signup';
-import socialApi from '@/api/auth/social';
-import getMeApi from '@/api/users/me';
-import useAuthStore from '@/hooks/useAuthStore';
+import { useNavigate } from 'react-router';
+import loginApi from '../api/auth/login';
+import getMeApi from '../api/auth/me';
+import signupApi from '../api/auth/signup';
+import socialApi from '../api/auth/social';
import type {
LoginRequest,
SignUpRequest,
SocialLoginRequest,
-} from '@/types/auth';
-import { useNavigate } from 'react-router';
+} from '../types/auth';
+import useAuthStore from './useAuthStore';
export default function useAuth() {
const navigate = useNavigate();
@@ -21,8 +20,7 @@ export default function useAuth() {
// 1. 이메일 로그인 로직
const handleLogin = async (data: LoginRequest) => {
try {
- const { token } = await loginApi(data);
- const user = await getMeApi();
+ const { user, token } = await loginApi(data);
login(user, token); // Zustand 스토어 업데이트
navigate('/'); // 메인 페이지로 이동
} catch (error) {
@@ -34,8 +32,9 @@ export default function useAuth() {
// 2. 이메일 회원가입 로직
const handleSignUp = async (data: SignUpRequest) => {
try {
- await signupApi(data);
- navigate('/login');
+ const { user, token } = await signupApi(data);
+ login(user, token);
+ navigate('/');
} catch (error) {
console.error('Signup failed:', error);
alert('회원가입 중 오류가 발생했습니다.');
@@ -45,7 +44,7 @@ export default function useAuth() {
// 3. 소셜 로그인 로직
const handleSocialLogin = async (data: SocialLoginRequest) => {
try {
- const { token, user } = await socialApi(data);
+ const { user, token } = await socialApi(data);
login(user, token);
navigate('/');
} catch (error) {
@@ -69,12 +68,16 @@ export default function useAuth() {
};
// 5. 로그아웃 로직
- const handleLogout = async () => {
- await logoutApi();
+ const handleLogout = () => {
logout(); // Zustand 상태 초기화
navigate('/login');
};
+ // 6. 관리자 확인
+ const isAdmin = (ownerId: number | undefined) => {
+ return isLoggedIn && user?.id === ownerId;
+ };
+
return {
user,
isLoggedIn,
@@ -83,5 +86,6 @@ export default function useAuth() {
handleSocialLogin,
refreshUser,
handleLogout,
+ isAdmin,
};
}
diff --git a/src/hooks/useAuthStore.ts b/src/hooks/useAuthStore.ts
index 11aebb1..05d00db 100644
--- a/src/hooks/useAuthStore.ts
+++ b/src/hooks/useAuthStore.ts
@@ -1,6 +1,6 @@
-import type { User } from '@/types/schemas';
import { create } from 'zustand';
import { persist } from 'zustand/middleware';
+import type { User } from '../types/auth';
interface AuthState {
user: User | null;
diff --git a/src/hooks/useEventDetail.ts b/src/hooks/useEventDetail.ts
deleted file mode 100644
index b353cfc..0000000
--- a/src/hooks/useEventDetail.ts
+++ /dev/null
@@ -1,98 +0,0 @@
-import type { JoinEventRequest } from '@/types/events';
-import type { Event, Guest } from '@/types/schemas';
-import { isAxiosError } from 'axios';
-import { useCallback, useState } from 'react';
-import { toast } from 'sonner';
-import { getEventDetail, getRegistrations, registerEvent } from '../api/event';
-
-type EventFetchStatus =
- | 'GUEST'
- | 'ADMIN'
- | 'REGISTERED'
- | 'NOT_FOUND'
- | 'ERROR';
-
-export default function useEventDetail() {
- const [loading, setLoading] = useState