// 3. 스토리지에 이미지 저장하기 + url 반환하기
// (저장한 이미지의 파일명을 알아야 url을 가져올수 있어서 둘을 함께 작성)
export const uploadFilesAndGetUrls = async ({
files,
action_id,
}: FileUpload) => {
try {
const imgUrlsArray = await Promise.all(
// map으로 (파일 스토리지에 업로드 + url 반환) 반복
files.map(async (file) => {
if (file) {
const fileName = crypto.randomUUID();
// 'action_id' 폴더 생성, 파일이름은 uuid
const filePath = `${action_id}/${fileName}`;
const { data: ImgFile, error } = await supabase.storage
// 'green_action' 버켓에 이미지 업로드
.from("green_action")
.upload(filePath, file, {
cacheControl: "3600",
upsert: true,
});
if (error) {
console.error("Error uploading file:", error);
return null;
}
// url 가져오기
const { data: imgUrl, error: imgUrlError } = await supabase.storage
.from("green_action")
.getPublicUrl(`${action_id}/${fileName}`);
if (imgUrlError) {
console.log("error", error);
throw error;
}
return imgUrl.publicUrl;
}
}),
);
return imgUrlsArray.filter((url) => url !== null); // null 값 제거
} catch (error) {
console.error("Error uploading files and getting URLs:", error);
return [];
}
};
// 4. 이미지url들 table에 넣기 - action_id 주의
export const insertImgUrls = async ({
action_id,
imgUrlsArray,
}: InsertImgUrls) => {
try {
const response = await Promise.all(
imgUrlsArray.map(async (url: string) => {
const { data, error } = await supabase
.from("green_action_images")
.insert({
action_id,
img_url: url,
});
if (error) {
throw error;
}
return data;
}),
);
console.log("response", response);
return response;
} catch (error) {
console.log("error", error);
throw error;
}
};
- (원래는 항상 이렇게 zep에서만 모여서 회의 했었다.)
내 코드를 엄청 큰 화면에 띄워서 다같이 보면서 코드리뷰도 하고 수정하면 좋을 내용 피드백도 받았다.
여러 사람들이 동시에 내 코드를 주목하면서 이야기 나누는 경험이 처음이라 초반에는 엄청 민망했다 😂
그래도 하다보니 조금씩 무뎌져서 피드백도 열심히 듣고, 튜터님께서 이건 왜 이렇게 했는지 이유 물으면 대답도 열심히 하고 아주 유익한 경험이었다.
맡은 부분을 일주일 안에 다 못할까봐 주말에 열심히 코드 짜놓은건데, 주말에 열심히 해놓길 잘했다! ㅎㅎ
📝
개인 action 등록
페이지 코드리뷰 피드백
오류메시지 일원화할 것인가?
시맨틱태그로 수정하기
next intl - 다국어로 변환 라이브러리
'오픈카카오톡 링크 입력창' : 카카오링크로 유효성검사