@@ -72,13 +72,47 @@ const useMutateSendData = (fileProps: UseMutateSendDataProps) => {
72
72
throw new Error ( 'presigned url put 준비 과정에 에러가 발생함.' ) ;
73
73
}
74
74
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
+ ) {
76
83
alert (
77
- '이미지가 정상적으로 올라가지 않았어요.\n이미지를 다시 첨부하고 재배포해주세요.' ,
84
+ '필수 이미지가 정상적으로 올라가지 않았어요.\n이미지를 다시 첨부하고 재배포해주세요.' ,
78
85
) ;
79
86
return ;
80
87
}
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 = [
82
116
sendPresignedURL ( headerImageURL , headerImageFile ) . catch ( ( err ) => {
83
117
console . error ( '소개 헤더 이미지 업로드 실패: ' , err ) ;
84
118
throw err ;
@@ -101,85 +135,43 @@ const useMutateSendData = (fileProps: UseMutateSendDataProps) => {
101
135
throw err ;
102
136
} ,
103
137
) ,
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
- ) ,
176
138
sendPresignedURL ( recruitHeaderImageURL , recruitHeaderImageFile ) . catch (
177
139
( err ) => {
178
140
console . error ( '지원하기 헤더 이미지 업로드 실패: ' , err ) ;
179
141
throw err ;
180
142
} ,
181
143
) ,
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 ) ;
183
175
184
176
const finalResponse = await sendDataConfirm ( { generation } ) ;
185
177
0 commit comments