๊ธฐ์กด์๋ ์ฌ์ฉ์๊ฐ ์ง์ ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํด์ ํ๋กํ ์ด๋ฏธ์ง๋ก ๋ฑ๋กํ๋ ๋ฐฉ์์ด์์ง๋ง, ์ด์ ๋ ์๋ฒ์์ ๋ฉ์ธ ์บ๋ฆญํฐ ์ ๋ณด๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ๋ ๊ตฌ์กฐ๋ก ์ ํํ๋ค. ์ด ์ ํ์ ๋จ์ํ ๊ธฐ๋ฅ ๋ณ๊ฒฝ์ด ์๋๋ผ, UX์ ์ ์ง๋ณด์ ๊ด์ ์์๋ ํฐ ์ด์ ์ ๊ฐ์ ธ์๋ค.
์ด๊ธฐ์๋ ์ฌ์ฉ์ ํธ์๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ด๋ฏธ์ง ๋ฑ๋ก์ ๊ตฌํํ์๋ค:
<input type="file">๋ก ํ์ผ ์ ํ
FormData๋ก ๋ฌถ์ด์ PostResourceWing์ผ๋ก ์ด๋ฏธ์ง ์ ๋ก๋
์ ๋ก๋๋ ์ด๋ฏธ์ง ID๋ฅผ PatchProfileWing์ logo_id๋ก ์ค์ ํ์ฌ ํ๋กํ์ ๋ฑ๋ก
const wing = PostResourceWing(formData);
const response = await shootingStar.launch<{ id: string }>(wing);
const uploadedImageId = response.data.id;
const profileUpdateBody: ProfileUpdateBody = {
foreign_ids: {
logo_id: uploadedImageId,
},
};
ํ์ง๋ง ์ด ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ ๋จ์ ์ด ์์๋ค:
์ฌ์ฉ์๊ฐ ๋งค๋ฒ ์ด๋ฏธ์ง๋ฅผ ๊ณจ๋ผ์ผ ํจ (๊ท์ฐฎ์)
์ ๋ก๋ ๊ณผ์ ์ค ์คํจ ๊ฐ๋ฅ์ฑ ์กด์ฌ
์๋ฒ ๋ณด์ ์ด์ ๋ฐ์ ๊ฐ๋ฅ์ฑ
์บ๋ฆญํฐ์ ๊ด๋ จ ์๋ ์ด๋ฏธ์ง ์ฌ์ฉ ๊ฐ๋ฅ์ฑ
์ด์ ๋ ์ฌ์ฉ์๊ฐ ๋ณ๋๋ก ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํ์ง ์์๋, ์๋ฒ์์ ์ ๊ณตํ๋ ๋ฉ์ดํ ๋ฉ์ธ ์บ๋ฆญํฐ์ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋กํ ์ด๋ฏธ์ง๋ฅผ ์ธํ ํ๋ค.
์๋ฒ์์ ์ฌ์ฉ์ ํ๋กํ ์ ์ฒด๋ฅผ ๋ฐ์์ด (GetMyUserWing)
characters ๋ฐฐ์ด ์ค is_main === true์ธ ์บ๋ฆญํฐ๋ฅผ ์ฐพ์
ํด๋น ์บ๋ฆญํฐ์ ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ฅผ ์ ํธ ํจ์ getImagePathFromProfile()๋ฅผ ํตํด ์์ฑ
const mainChar = myProfileResponse.data.characters.find(char => char.is_main);
setMainCharacter(mainChar || null);
setMyProfileImage(getImagePathFromProfile(myProfileResponse.data));
function getImagePathFromProfile(profile: ProfileData) {
if (profile === undefined) {
return ANONYMOUS_LOGO_ID;
}
if (profile.foreign_ids.logo_id) {
return getImagePath(profile.foreign_ids.logo_id);
} else if (profile.characters.length > 0) {
for (const character of profile.characters) {
if (character.is_main) {
return getImagePath(character.logo_id);
}
}
}
return ANONYMOUS_LOGO_ID;
}`;
}
๋ก์ง์ด ์ปดํฌ๋ํธ ์ธ๋ถ์ ๋ถ๋ฆฌ๋์ด ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ ์คํธ ์ฉ์ด์ฑ ํ๋ณด
์ด๋ฏธ์ง ๊ฒฝ๋ก๊ฐ ๋ช ํํ๊ฒ ์ ์๋๋ฏ๋ก img src={...}๋ก ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
โ์ ์ ๊ฐ ์ฌ์ง์ ๊ณ ๋ฅผ ์ ์๋ ์์ ๋ณด๋ค, ์๋ ์ ๊ณต๋๋ ์ผ๊ด์ฑ์ด ๋ ๋์ ์ ์๋ค.โ
์ฒ์์๋ ์ ์ ๊ฐ ์ง์ ์ฌ์ง์ ๊ณ ๋ฅด๊ฒ ํ๋ ๊ฒ ๋น์ฐํ ์ข๋ค๊ณ ์๊ฐํ๋ค. ํ์ง๋ง ์ค์ ์ฌ์ฉ์ฑ ํ ์คํธ์ ํผ๋๋ฐฑ์์๋
๋ฉ์ธ ์บ๋ฆญํฐ ์ฌ์ง์ด ๊ฐ์ฅ โ๊ทธ ์ฌ๋โ์ ์ ๋ํ๋
์๋ฒ ์ผ๊ด์ฑ ์ ์ง๊ฐ ์ฌ์
๊ฒฐ๊ตญ ์๋ํ๋ ๋ฐฉ์์ด ๋ ์ง๊ด์ ์ด๊ณ , ๋ฐ์ดํฐ ์ผ๊ด์ฑ + UX ๊ฐ๊ฒฐ์ฑ ์ธก๋ฉด์์๋ ๋ ๋ซ๋ค๋ ๊ฒฐ๋ก ์ ๋ด๋ ธ๋ค.
์์ผ๋ก๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ๋ ๊ตฌ์กฐ๋ณด๋ค ์๋ฒ๊ฐ ์์์ ์ ๊ณตํ ์ ์๋ ๋ถ๋ถ์ ์ต๋ํ ์๋ํํ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ ํ ๊ณํ์ด๋ค.