Skip to content

Commit f329b36

Browse files
authored
Merge pull request #144 from prgrms-fe-devcourse/fix/Member
member 오류 해결
2 parents b088114 + 939bcae commit f329b36

2 files changed

Lines changed: 61 additions & 9 deletions

File tree

src/components/MemberCard.tsx

Lines changed: 60 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export default function MemberCard({
2020
userId,
2121
onUnfollow,
2222
}: MemberCardProps) {
23-
const { followStatus, followedUserFnc, unFollowUserFnc } = useMemberStore();
23+
const { followStatus } = useMemberStore();
2424
const { currentUserId } = useProfileStore();
2525
const { createRoom, isLoading: isCreatingRoom } = useCreateChatRoom();
2626
const navigate = useNavigate();
@@ -48,20 +48,72 @@ export default function MemberCard({
4848
document.removeEventListener("mousedown", handleClickOutside);
4949
}, []);
5050

51-
const handleFollow = () => {
52-
if (!friend.users?.auth_id) return;
51+
useEffect(() => {
52+
const fetchFollowStatus = async () => {
53+
if (!currentUserId) return;
54+
55+
try {
56+
// 서버에서 로그인한 사용자가 팔로우한 목록 가져오기
57+
const friends = await useMemberStore
58+
.getState()
59+
.fetchUserFollowings(currentUserId);
60+
61+
// followStatus 맵 세팅
62+
friends.forEach((friend) => {
63+
if (friend.users?.auth_id) {
64+
useMemberStore
65+
.getState()
66+
.setFollowStatus(friend.users.auth_id, true);
67+
}
68+
});
69+
} catch (err) {
70+
console.error("팔로우 상태 초기화 실패:", err);
71+
}
72+
};
73+
74+
fetchFollowStatus();
75+
}, [currentUserId]);
76+
77+
const handleFollow = async () => {
78+
if (!friend.users?.auth_id || !currentUserId) return;
79+
80+
// 1️⃣ 화면에서 바로 팔로우 상태 변경 (Optimistic Update)
81+
useMemberStore.getState().setFollowStatus(friend.users.auth_id, true);
5382

54-
if (!isFollowing) {
55-
followedUserFnc(currentUserId!, friend.users.auth_id);
83+
try {
84+
// 2️⃣ 서버에 팔로우 요청
85+
await useMemberStore
86+
.getState()
87+
.followedUserFnc(currentUserId, friend.users.auth_id);
88+
} catch (err) {
89+
// 실패 시 상태 롤백
90+
useMemberStore
91+
.getState()
92+
.setFollowStatus(friend.users.auth_id, false);
93+
alert("팔로우에 실패했습니다. 다시 시도해주세요.");
5694
}
95+
5796
setOpenId(null);
5897
};
5998

6099
const handleUnfollowClick = async () => {
61100
if (!friend.users?.auth_id || !currentUserId) return;
62101

63-
await unFollowUserFnc(currentUserId, friend.users.auth_id);
64-
onUnfollow?.(friend.users.auth_id);
102+
useMemberStore.getState().setFollowStatus(friend.users.auth_id, false);
103+
104+
try {
105+
await useMemberStore
106+
.getState()
107+
.unFollowUserFnc(currentUserId, friend.users.auth_id);
108+
onUnfollow?.(friend.users.auth_id);
109+
} catch (err) {
110+
useMemberStore
111+
.getState()
112+
.setFollowStatus(friend.users.auth_id, true);
113+
alert("팔로우 취소에 실패했습니다. 다시 시도해주세요.");
114+
}
115+
116+
setOpenId(null);
65117
};
66118

67119
const handleSendMessage = async () => {
@@ -71,7 +123,7 @@ export default function MemberCard({
71123
const room = await createRoom(friend.users.auth_id);
72124
if (room) {
73125
navigate(`/msg/${room.id}`);
74-
setOpenId(null); // 드롭다운 닫기
126+
setOpenId(null);
75127
}
76128
} catch (error) {
77129
console.error("채팅방 생성 실패:", error);

src/pages/post/PostDetailPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ export default function PostDetailPage() {
111111
if (id) {
112112
updateLike(id, currentUserId);
113113
alert("좋아요 완료");
114-
location.reload();
114+
window.location.reload();
115115
}
116116
};
117117

0 commit comments

Comments
 (0)