Skip to content

Commit 1c67ad9

Browse files
committed
fix: 프로바이더 선택 수정
1 parent 880810b commit 1c67ad9

4 files changed

Lines changed: 37 additions & 12 deletions

File tree

src/components/ui/DashboardHeader.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ const DashboardHeader: React.FC<DashboardHeaderProps> = ({
3434

3535
const handleCreateSubmit = async (name: string, description: string, provider?: any): Promise<void> => {
3636
try {
37-
const newProject = await projectService.createProject(name, description, provider);
37+
// provider는 모달 내부에서 처리하므로 여기서는 name, description만 전달
38+
const newProject = await projectService.createProject(name, description);
3839
// 성공 후 처리 로직
3940
console.log("프로젝트 생성 성공:", newProject);
4041
console.log("선택된 프로바이더:", provider);
@@ -93,8 +94,8 @@ const DashboardHeader: React.FC<DashboardHeaderProps> = ({
9394
onClick={handleLogout}
9495
disabled={isLoggingOut}
9596
className={`inline-flex items-center px-4 py-2 font-medium rounded-lg transition ${isLoggingOut
96-
? "bg-gray-100 text-gray-500 cursor-not-allowed"
97-
: "border border-gray-300 bg-white text-gray-700 hover:bg-gray-50"
97+
? "bg-gray-100 text-gray-500 cursor-not-allowed"
98+
: "border border-gray-300 bg-white text-gray-700 hover:bg-gray-50"
9899
}`}
99100
>
100101
{isLoggingOut ? "로그아웃 중…" : "로그아웃"}

src/components/ui/ProjectCreateModal.tsx

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
// src/components/modal/CreateProjectModal.tsx
22
import React, { useState } from "react";
33
import { createProject } from "../../services/projectService";
4-
import { useNavigate } from "react-router-dom"; // ✅ 추가
5-
import { PROVIDER_INFO, CloudProviderType } from "../../providers";
4+
import { useNavigate } from "react-router-dom";
5+
import { PROVIDER_INFO, CloudProviderType, providerManager } from "../../providers";
6+
import { useProjectStore } from "../../stores/projectStore";
67

78
interface Props {
89
isOpen: boolean;
@@ -23,6 +24,7 @@ const CreateProjectModal: React.FC<Props> = ({
2324
const [loading, setLoading] = useState(false);
2425
const [error, setError] = useState<string | null>(null);
2526
const navigate = useNavigate();
27+
const setCurrentCSP = useProjectStore((state) => state.setCurrentCSP);
2628

2729
if (!isOpen) return null;
2830

@@ -42,7 +44,24 @@ const CreateProjectModal: React.FC<Props> = ({
4244
setLoading(true);
4345
setError(null);
4446
try {
47+
// 1. 프로젝트 생성 (name, description만 전달)
4548
const project = await createProject(name, description);
49+
50+
// 2. 선택한 프로바이더를 프론트엔드 상태에 설정
51+
// CloudProviderType enum을 문자열로 변환
52+
let cspString: "AWS" | "GCP" | "Azure" = "AWS";
53+
if (selectedProvider === CloudProviderType.AWS) {
54+
cspString = "AWS";
55+
} else if (selectedProvider === CloudProviderType.GCP) {
56+
cspString = "GCP";
57+
} else if (selectedProvider === CloudProviderType.AZURE) {
58+
cspString = "Azure";
59+
}
60+
61+
setCurrentCSP(cspString);
62+
providerManager.setCurrentProvider(selectedProvider);
63+
64+
// 3. 프로젝트 에디터 페이지로 이동
4665
navigate(`/project/${project.id}`);
4766
onClose();
4867
} catch (err) {

src/hooks/useProjectManagement.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
import { useCallback } from 'react';
22
import { apiFetch } from '../utils/apiClients';
3-
import { useResetAllStores } from '../stores';
3+
import { useResetAllStores, useConnectionStore, useProjectStore } from '../stores';
44

55
export const useProjectManagement = (projectId: string | undefined, droppedBlocks: any[]) => {
66
const resetAllStores = useResetAllStores();
7+
const connections = useConnectionStore((state) => state.connections);
8+
const currentCSP = useProjectStore((state) => state.currentCSP);
79

810
// 새 프로젝트
911
const handleNewProject = useCallback(() => {
1012
resetAllStores();
1113
console.log('🆕 New project created');
1214
}, [resetAllStores]);
1315

14-
// 프로젝트 저장
16+
// 프로젝트 저장 (서버)
1517
const handleSaveProject = useCallback(async () => {
1618
if (!projectId) {
1719
alert('URL에서 projectId를 찾을 수 없습니다.');
@@ -26,15 +28,19 @@ export const useProjectManagement = (projectId: string | undefined, droppedBlock
2628
try {
2729
await apiFetch(`/api/block/${projectId}`, {
2830
method: 'POST',
29-
body: JSON.stringify({ blocks: droppedBlocks }),
31+
body: JSON.stringify({
32+
blocks: droppedBlocks,
33+
connections: connections,
34+
provider: currentCSP || 'AWS',
35+
}),
3036
});
3137

3238
alert('✅ 프로젝트가 성공적으로 저장되었습니다.');
3339
} catch (err) {
3440
console.error('❌ 저장 실패:', err);
3541
alert('❌ 저장 중 오류가 발생했습니다.');
3642
}
37-
}, [projectId, droppedBlocks]);
43+
}, [projectId, droppedBlocks, connections, currentCSP]);
3844

3945
return {
4046
handleNewProject,

src/services/projectService.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
// src/services/projectService.ts
22
import { useProjectStore } from "../stores/projectStore";
3-
import { CloudProviderType } from "../providers";
43

54
const API_BASE_URL =
65
import.meta.env.VITE_API_BASE_URL || "http://localhost:8080";
76

8-
export async function createProject(name: string, description: string, provider: CloudProviderType = CloudProviderType.AWS) {
7+
export async function createProject(name: string, description: string) {
98
const accessToken = localStorage.getItem("accessToken"); // ✅ 토큰 가져오기
109

1110
const response = await fetch(`${API_BASE_URL}/api/projects`, {
@@ -14,7 +13,7 @@ export async function createProject(name: string, description: string, provider:
1413
"Content-Type": "application/json",
1514
...(accessToken && { Authorization: `Bearer ${accessToken}` }), // ✅ 토큰 헤더 추가
1615
},
17-
body: JSON.stringify({ name, description, provider }),
16+
body: JSON.stringify({ name, description }),
1817
credentials: "include", // refreshToken 쿠키도 함께 보냄
1918
});
2019

0 commit comments

Comments
 (0)