Skip to content

Commit af1edc7

Browse files
authored
Merge pull request #92 from codeit9-temporary/feature/modalAction
폴더 수정/삭제 모달 기능 구현
2 parents 9d36502 + b3afc78 commit af1edc7

File tree

7 files changed

+68
-103
lines changed

7 files changed

+68
-103
lines changed

components/modal/DeleteFolderModal.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ const DeleteFolderModal = ({
1212
}) => {
1313
const { closeModal } = useModalStore();
1414
const handleSubmit = async () => {
15+
// 폴더 내에 링크 개수 0 일때만 삭제 가능 -> 링크 1개 이상이면 error toast 띄우겠습니다.
1516
try {
1617
await deleteFolder(folderId);
1718
} catch (error) {
18-
console.log(error, "폴더 삭제 에러");
19+
console.log(error, "DeleteFolderModal 폴더 삭제 에러");
1920
} finally {
2021
closeModal();
2122
}

components/modal/EditModal.tsx

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,41 +5,45 @@ import useModalStore from "@/store/useModalStore";
55
import { putFolder } from "@/lib/api/folder";
66
import SubmitButton from "../SubMitButton";
77

8-
const EditModal = ({ folderName }: { folderName: string }) => {
8+
const EditModal = ({
9+
folderName,
10+
folderId,
11+
}: {
12+
folderName: string;
13+
folderId: number;
14+
}) => {
915
const [value, setValue] = useState("");
1016

1117
const { closeModal } = useModalStore();
1218

13-
// 폴더 정보를 먼저 가져와야함
14-
1519
const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
1620
setValue(e.target.value);
1721
};
1822
const handleSubmit = async () => {
1923
const body = {
2024
name: value,
2125
};
22-
// if (value !== "") {
23-
// try {
24-
// const res = await putFolder(folderId, body);
25-
// console.log(res);
26-
// } catch (error) {
27-
// console.log(error);
28-
// }
29-
// }
26+
if (value !== "") {
27+
try {
28+
await putFolder(folderId, body);
29+
console.log("폴더 수정 완료");
30+
} catch (error) {
31+
console.log(error);
32+
}
33+
}
3034
closeModal();
3135
};
3236
return (
3337
<ModalContainer title="폴더 이름 변경">
3438
<ModalInput
35-
placeholder="내용 입력"
39+
placeholder={folderName}
3640
name={folderName}
3741
value={value}
3842
onChange={handleChange}
3943
/>
4044
<SubmitButton
4145
type="button"
42-
// onClick={handleSubmit}
46+
onClick={handleSubmit}
4347
width="w-full"
4448
height="h-[51px]"
4549
color="positive"

components/modal/modalManager/ModalManager.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export const Modal = () => {
4545
return (
4646
<DeleteFolderModal
4747
folderName={props.folderName || "폴더이름"}
48-
folderId={props.folderId || 1}
48+
folderId={Number(props.folderId)}
4949
/>
5050
);
5151
case "DeleteLinkModal":
@@ -56,7 +56,12 @@ export const Modal = () => {
5656
/>
5757
);
5858
case "EditModal":
59-
return <EditModal folderName={props.folderName || "폴더이름"} />;
59+
return (
60+
<EditModal
61+
folderName={props.folderName || "폴더이름"}
62+
folderId={Number(props.folderId)}
63+
/>
64+
);
6065
case "SNSModal":
6166
return <SNSModal folderName={props.folderName || "폴더이름"} />;
6267
case "EditLink":

lib/api/folder.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export const deleteFolder = async (folderId: number) => {
4141
if (res.status >= 200 && res.status < 300) return res.data;
4242
} catch (err) {
4343
console.error("에러 메시지: ", err instanceof Error ? err.message : err);
44+
throw err;
4445
}
4546
};
4647

pages/api/folders/[folderId]/index.ts

Lines changed: 40 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,34 +8,56 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
88
const id = Number(folderId);
99

1010
console.log("Token:", token);
11-
console.log("folderId:", folderId);
1211

1312
if (!token) {
1413
return res.status(401).json({ error: "사용자 정보를 찾을 수 없습니다." });
1514
}
1615

1716
if (isNaN(id)) {
18-
return res.status(400).json({ error: "Invalid folderId" });
17+
return res.status(400).json({ error: "유효하지 않은 폴더 ID 입니다" });
1918
}
2019

21-
if (req.method === "DELETE") {
22-
try {
23-
const response = await axiosInstance.delete(`/folders/${id}`, {
24-
headers: {
25-
Authorization: `Bearer ${token}`,
26-
},
27-
});
20+
switch (req.method) {
21+
case "DELETE":
22+
try {
23+
await axiosInstance.delete(`/folders/${id}`, {
24+
headers: {
25+
Authorization: `Bearer ${token}`,
26+
},
27+
});
28+
return res.status(204).json({ message: "폴더 삭제 성공" });
29+
} catch (error) {
30+
if (axios.isAxiosError(error)) {
31+
console.error("Axios Error:", error); // 여기서 error 객체 전체를 확인
32+
if (error.response) {
33+
const status = error.response.status;
34+
const message =
35+
error.response.data?.message || "알 수 없는 오류 발생";
36+
console.error("Error Response Data:", error.response.data);
37+
return res.status(status).json({ message: message });
38+
}
39+
console.error("Unknown Error:", error); // Axios 오류가 아닌 경우
40+
throw error;
41+
}
42+
return res.status(500).json({ message: "서버 오류 발생" });
43+
}
2844

29-
return res.status(204).json({ message: "폴더 삭제 성공" });
30-
} catch (error) {
31-
if (axios.isAxiosError(error) && error.response) {
32-
const status = error.response.status;
33-
const message = error.response.data?.message || "알 수 없는 오류 발생";
34-
return res.status(status).json({ message });
45+
case "PUT":
46+
try {
47+
await axiosInstance.put(`/folders/${id}`, req.body, {
48+
headers: {
49+
Authorization: `Bearer ${token}`,
50+
},
51+
});
52+
return res.status(204).json({ message: "폴더 수정 성공" });
53+
} catch (error) {
54+
if (axios.isAxiosError(error) && error.response) {
55+
const status = error.response.status;
56+
const message =
57+
error.response.data?.message || "알 수 없는 오류 발생";
58+
return res.status(status).json({ message });
59+
}
3560
}
36-
}
37-
} else {
38-
return res.status(500).json({ error: "서버 오류 발생" });
3961
}
4062
};
4163
export default handler;

pages/api/folders/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
1818
console.error(err);
1919
return res
2020
.status(500)
21-
.json({ message: "모든 폴저 조회에 실패했습니다." });
21+
.json({ message: "모든 폴더 조회에 실패했습니다." });
2222
}
2323

2424
case "POST":

pages/test/index.tsx

Lines changed: 0 additions & 68 deletions
This file was deleted.

0 commit comments

Comments
 (0)