Skip to content

Commit efa7e86

Browse files
authored
feat : 파티 멤버 칭호/아이템 정보 조인 (#157)
1 parent 6ab7920 commit efa7e86

File tree

3 files changed

+60
-5
lines changed

3 files changed

+60
-5
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.back.domain.party.party.dto;
2+
3+
import com.back.domain.item.entity.Item;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
import lombok.Setter;
7+
8+
@Getter
9+
@Setter
10+
@NoArgsConstructor
11+
public class ItemDecorationDto {
12+
private Integer id;
13+
private String name;
14+
private String iconUrl; // Item.img 필드를 iconUrl로 매핑
15+
16+
public ItemDecorationDto(Item item) {
17+
if (item != null) {
18+
this.id = item.getId();
19+
this.name = item.getName();
20+
// Item Entity의 img 필드가 아이콘 URL 경로를 담고 있다고 가정
21+
this.iconUrl = item.getImg();
22+
}
23+
}
24+
}

backend/src/main/java/com/back/domain/party/party/dto/PartyMemberDto.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.back.domain.party.party.dto;
22

33
import com.back.domain.member.entity.Member;
4+
import com.back.domain.title.entity.Title;
45
import lombok.Getter;
56
import lombok.NoArgsConstructor;
67
import lombok.Setter;
@@ -14,16 +15,36 @@ public class PartyMemberDto {
1415
private String name;
1516
private String status;
1617

18+
private String title;
19+
private ItemDecorationDto item;
20+
1721
public PartyMemberDto(Member member, String missionStatus) {
1822
this.id = member.getId();
1923
this.email = member.getEmail();
2024
this.name = member.getName();
2125
this.status = missionStatus;
26+
27+
// Member Entity에서 장착된 칭호 정보를 가져와 매핑
28+
Title equippedTitle = member.getTitle(); // Member.title (장착된 칭호)
29+
this.title = (equippedTitle != null) ? equippedTitle.getContent() : null;
30+
31+
this.item = (member.getItem() != null)
32+
? new ItemDecorationDto(member.getItem())
33+
: null;
2234
}
2335

2436
public PartyMemberDto(Member member) {
2537
this.id = member.getId();
2638
this.email = member.getEmail();
2739
this.name = member.getName();
40+
this.status = null;
41+
42+
// Member Entity에서 장착된 칭호 정보를 가져와 매핑
43+
Title equippedTitle = member.getTitle();
44+
this.title = (equippedTitle != null) ? equippedTitle.getContent() : null;
45+
46+
this.item = (member.getItem() != null)
47+
? new ItemDecorationDto(member.getItem())
48+
: null;
2849
}
2950
}

backend/src/main/java/com/back/domain/party/party/repository/PartyRepository.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.springframework.data.jpa.repository.EntityGraph;
77
import org.springframework.data.jpa.repository.JpaRepository;
88
import org.springframework.data.jpa.repository.Query;
9+
import org.springframework.data.repository.query.Param;
910
import org.springframework.stereotype.Repository;
1011

1112
import java.util.Optional;
@@ -14,13 +15,20 @@
1415
public interface PartyRepository extends JpaRepository<Party, Integer> {
1516

1617
@Override
17-
@EntityGraph(attributePaths = {"leader", "partyMembers.member"})
18+
@EntityGraph(attributePaths = {
19+
"leader",
20+
"partyMembers.member",
21+
"partyMembers.member.title",
22+
"partyMembers.member.item"
23+
})
1824
Optional<Party> findById(Integer partyId);
1925

2026
@Query(value = "SELECT DISTINCT p FROM Party p " +
2127
"LEFT JOIN FETCH p.leader l " +
2228
"LEFT JOIN FETCH p.partyMembers pm " +
2329
"LEFT JOIN FETCH pm.member mbm " +
30+
"LEFT JOIN FETCH mbm.title t " +
31+
"LEFT JOIN FETCH mbm.item i " +
2432
"LEFT JOIN Mission m ON m.party = p " +
2533
"WHERE p.isPublic = true",
2634
countQuery = "SELECT COUNT(p) FROM Party p WHERE p.isPublic = true")
@@ -30,11 +38,13 @@ public interface PartyRepository extends JpaRepository<Party, Integer> {
3038
"LEFT JOIN FETCH p.leader l " +
3139
"LEFT JOIN FETCH p.partyMembers pm " +
3240
"LEFT JOIN FETCH pm.member mbm " +
33-
"WHERE p.leader.id = :memberId " + // 리더인 경우
34-
"OR EXISTS (SELECT pm2 FROM PartyMember pm2 WHERE pm2.party = p AND pm2.member.id = :memberId)" + // 멤버인 경우
35-
"GROUP BY p.id, l.id, mbm.id, pm.status, pm.joinedAt",
41+
"LEFT JOIN FETCH mbm.title t " +
42+
"LEFT JOIN FETCH mbm.item i " +
43+
"WHERE p.leader.id = :memberId " +
44+
"OR EXISTS (SELECT pm2 FROM PartyMember pm2 WHERE pm2.party = p AND pm2.member.id = :memberId)" +
45+
"GROUP BY p.id, l.id, mbm.id, pm.status, pm.joinedAt, t.id, i.id",
3646
countQuery = "SELECT COUNT(DISTINCT p) FROM Party p " +
3747
"LEFT JOIN PartyMember pm ON pm.party = p " +
3848
"WHERE p.leader.id = :memberId OR pm.member.id = :memberId")
39-
Page<Party> findMyPartiesWithMissionAndMembers(Integer memberId, Pageable pageable);
49+
Page<Party> findMyPartiesWithMissionAndMembers(@Param("memberId") Integer memberId, Pageable pageable);
4050
}

0 commit comments

Comments
 (0)