Skip to content

Commit fde6e16

Browse files
committed
hotfix: 임원진 이미지 필수 조건 제외 처리
1 parent 7d7c4f3 commit fde6e16

File tree

2 files changed

+75
-81
lines changed

2 files changed

+75
-81
lines changed

src/components/org/OrgAdmin/hooks.ts

Lines changed: 68 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,47 @@ const useMutateSendData = (fileProps: UseMutateSendDataProps) => {
7272
throw new Error('presigned url put 준비 과정에 에러가 발생함.');
7373
}
7474
try {
75-
if (Object.values(fileProps).some((file) => !(file instanceof File))) {
75+
// 필수 이미지 체크
76+
if (
77+
!(headerImageFile instanceof File) ||
78+
!(coreValueImageFile1 instanceof File) ||
79+
!(coreValueImageFile2 instanceof File) ||
80+
!(coreValueImageFile3 instanceof File) ||
81+
!(recruitHeaderImageFile instanceof File)
82+
) {
7683
alert(
77-
'이미지가 정상적으로 올라가지 않았어요.\n이미지를 다시 첨부하고 재배포해주세요.',
84+
'필수 이미지가 정상적으로 올라가지 않았어요.\n이미지를 다시 첨부하고 재배포해주세요.',
7885
);
7986
return;
8087
}
81-
await Promise.all([
88+
89+
// 멤버 이미지 중 최소 하나라도 있는지 체크
90+
const memberFiles = [
91+
memberImageFile1,
92+
memberImageFile2,
93+
memberImageFile3,
94+
memberImageFile4,
95+
memberImageFile5,
96+
memberImageFile6,
97+
memberImageFile7,
98+
memberImageFile8,
99+
memberImageFile9,
100+
memberImageFile10,
101+
memberImageFile11,
102+
memberImageFile12,
103+
];
104+
105+
const hasAtLeastOneMember = memberFiles.some(file => file instanceof File);
106+
107+
if (!hasAtLeastOneMember) {
108+
alert(
109+
'최소 한 명 이상의 멤버 정보를 입력해주세요.',
110+
);
111+
return;
112+
}
113+
114+
// 필수 이미지 업로드
115+
const uploadPromises = [
82116
sendPresignedURL(headerImageURL, headerImageFile).catch((err) => {
83117
console.error('소개 헤더 이미지 업로드 실패: ', err);
84118
throw err;
@@ -101,85 +135,43 @@ const useMutateSendData = (fileProps: UseMutateSendDataProps) => {
101135
throw err;
102136
},
103137
),
104-
sendPresignedURL(members[0].profileImage, memberImageFile1).catch(
105-
(err) => {
106-
console.error('회장 이미지 업로드 실패: ', err);
107-
throw err;
108-
},
109-
),
110-
sendPresignedURL(members[1].profileImage, memberImageFile2).catch(
111-
(err) => {
112-
console.error('부회장 이미지 업로드 실패: ', err);
113-
throw err;
114-
},
115-
),
116-
sendPresignedURL(members[2].profileImage, memberImageFile3).catch(
117-
(err) => {
118-
console.error('총무 이미지 업로드 실패: ', err);
119-
throw err;
120-
},
121-
),
122-
sendPresignedURL(members[3].profileImage, memberImageFile4).catch(
123-
(err) => {
124-
console.error('운영 팀장 이미지 업로드 실패: ', err);
125-
throw err;
126-
},
127-
),
128-
sendPresignedURL(members[4].profileImage, memberImageFile5).catch(
129-
(err) => {
130-
console.error('미디어 팀장 이미지 업로드 실패: ', err);
131-
throw err;
132-
},
133-
),
134-
sendPresignedURL(members[5].profileImage, memberImageFile6).catch(
135-
(err) => {
136-
console.error('메이커스 팀장 이미지 업로드 실패: ', err);
137-
throw err;
138-
},
139-
),
140-
sendPresignedURL(members[6].profileImage, memberImageFile7).catch(
141-
(err) => {
142-
console.error('기획 파트장 이미지 업로드 실패: ', err);
143-
throw err;
144-
},
145-
),
146-
sendPresignedURL(members[7].profileImage, memberImageFile8).catch(
147-
(err) => {
148-
console.error('디자인 파트장 이미지 업로드 실패: ', err);
149-
throw err;
150-
},
151-
),
152-
sendPresignedURL(members[8].profileImage, memberImageFile9).catch(
153-
(err) => {
154-
console.error('안드로이드 파트장 이미지 업로드 실패: ', err);
155-
throw err;
156-
},
157-
),
158-
sendPresignedURL(members[9].profileImage, memberImageFile10).catch(
159-
(err) => {
160-
console.error('iOS 파트장 이미지 업로드 실패: ', err);
161-
throw err;
162-
},
163-
),
164-
sendPresignedURL(members[10].profileImage, memberImageFile11).catch(
165-
(err) => {
166-
console.error('웹 파트장 이미지 업로드 실패: ', err);
167-
throw err;
168-
},
169-
),
170-
sendPresignedURL(members[11].profileImage, memberImageFile12).catch(
171-
(err) => {
172-
console.error('서버 파트장 이미지 업로드 실패: ', err);
173-
throw err;
174-
},
175-
),
176138
sendPresignedURL(recruitHeaderImageURL, recruitHeaderImageFile).catch(
177139
(err) => {
178140
console.error('지원하기 헤더 이미지 업로드 실패: ', err);
179141
throw err;
180142
},
181143
),
182-
]);
144+
];
145+
146+
// 멤버 이미지는 있는 경우에만 업로드
147+
const memberImageFiles = [
148+
{ url: members[0]?.profileImage, file: memberImageFile1, name: '회장' },
149+
{ url: members[1]?.profileImage, file: memberImageFile2, name: '부회장' },
150+
{ url: members[2]?.profileImage, file: memberImageFile3, name: '총무' },
151+
{ url: members[3]?.profileImage, file: memberImageFile4, name: '운영 팀장' },
152+
{ url: members[4]?.profileImage, file: memberImageFile5, name: '미디어 팀장' },
153+
{ url: members[5]?.profileImage, file: memberImageFile6, name: '메이커스 팀장' },
154+
{ url: members[6]?.profileImage, file: memberImageFile7, name: '기획 파트장' },
155+
{ url: members[7]?.profileImage, file: memberImageFile8, name: '디자인 파트장' },
156+
{ url: members[8]?.profileImage, file: memberImageFile9, name: '안드로이드 파트장' },
157+
{ url: members[9]?.profileImage, file: memberImageFile10, name: 'iOS 파트장' },
158+
{ url: members[10]?.profileImage, file: memberImageFile11, name: '웹 파트장' },
159+
{ url: members[11]?.profileImage, file: memberImageFile12, name: '서버 파트장' },
160+
];
161+
162+
// 파일이 있는 멤버만 업로드 프로미스 추가
163+
memberImageFiles.forEach(({ url, file, name }) => {
164+
if (url && file instanceof File) {
165+
uploadPromises.push(
166+
sendPresignedURL(url, file).catch((err) => {
167+
console.error(`${name} 이미지 업로드 실패: `, err);
168+
throw err;
169+
})
170+
);
171+
}
172+
});
173+
174+
await Promise.all(uploadPromises);
183175

184176
const finalResponse = await sendDataConfirm({ generation });
185177

src/components/org/OrgAdmin/index.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -247,11 +247,13 @@ function OrgAdmin() {
247247
part,
248248
curriculums: partCurriculum[part],
249249
})),
250-
member: [...임원진_LIST, ...PART_LIST].map((exec) => ({
251-
role: exec,
252-
...member[exec],
253-
profileImageFileName: member[exec].profileImageFileName.fileName,
254-
})),
250+
member: [...임원진_LIST, ...PART_LIST]
251+
.filter((exec) => member && member[exec] && member[exec].profileImageFileName)
252+
.map((exec) => ({
253+
role: exec,
254+
...member[exec],
255+
profileImageFileName: member[exec].profileImageFileName.fileName,
256+
})),
255257
recruitHeaderImageFileName: recruitHeaderImage.fileName,
256258
recruitPartCurriculum: PART_LIST.map((part) => ({
257259
part,

0 commit comments

Comments
 (0)