-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
merge(GroupRetrieveAPI) : 그룹 조회 API 구현
[✨ feat] 그룹 조회 API 구현
- Loading branch information
Showing
20 changed files
with
625 additions
and
43 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
7 changes: 7 additions & 0 deletions
7
src/main/java/org/noostak/group/application/GroupRetrieveService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package org.noostak.group.application; | ||
|
||
import org.noostak.group.dto.response.GroupsRetrieveResponse; | ||
|
||
public interface GroupRetrieveService { | ||
GroupsRetrieveResponse findGroups(Long memberId); | ||
} |
58 changes: 58 additions & 0 deletions
58
src/main/java/org/noostak/group/application/GroupRetrieveServiceImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
package org.noostak.group.application; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import org.noostak.group.common.exception.GroupErrorCode; | ||
import org.noostak.group.common.exception.GroupException; | ||
import org.noostak.group.domain.Groups; | ||
import org.noostak.group.dto.response.GroupInternalRetrieveResponse; | ||
import org.noostak.group.dto.response.GroupRetrieveResponse; | ||
import org.noostak.group.dto.response.GroupsRetrieveResponse; | ||
import org.noostak.infra.S3Service; | ||
import org.noostak.membergroup.domain.MemberGroup; | ||
import org.noostak.membergroup.domain.MemberGroupRepository; | ||
import org.noostak.membergroup.domain.MemberGroups; | ||
import org.springframework.stereotype.Service; | ||
|
||
import java.util.List; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class GroupRetrieveServiceImpl implements GroupRetrieveService { | ||
|
||
private final MemberGroupRepository memberGroupRepository; | ||
private final S3Service s3Service; | ||
|
||
@Override | ||
public GroupsRetrieveResponse findGroups(Long memberId) { | ||
MemberGroups memberGroups = getMemberGroups(memberId); | ||
Groups groups = convertToGroups(memberGroups); | ||
return convertToResponse(groups); | ||
} | ||
|
||
private MemberGroups getMemberGroups(Long memberId) { | ||
List<MemberGroup> foundMemberGroups = memberGroupRepository.findByMemberId(memberId); | ||
MemberGroups memberGroups = MemberGroups.of(foundMemberGroups); | ||
|
||
if (memberGroups.isEmpty()) { | ||
throw new GroupException(GroupErrorCode.GROUP_NOT_FOUND); | ||
} | ||
|
||
return memberGroups; | ||
} | ||
|
||
private Groups convertToGroups(MemberGroups memberGroups) { | ||
return Groups.of(memberGroups.toGroups()); | ||
} | ||
|
||
private GroupsRetrieveResponse convertToResponse(Groups groups) { | ||
List<GroupInternalRetrieveResponse> internalResponses = groups.getGroups().stream() | ||
.map(group -> GroupInternalRetrieveResponse.of(group, s3Service.getImageUrl(group.getKey().value()))) | ||
.toList(); | ||
|
||
List<GroupRetrieveResponse> groupResponses = internalResponses.stream() | ||
.map(internal -> GroupRetrieveResponse.of(internal.group(), internal.groupProfileImageUrl())) | ||
.toList(); | ||
|
||
return GroupsRetrieveResponse.of(groupResponses); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package org.noostak.group.domain; | ||
|
||
import java.util.Collections; | ||
import java.util.List; | ||
|
||
public class Groups { | ||
private final List<Group> groups; | ||
|
||
private Groups(List<Group> groups) { | ||
this.groups = groups; | ||
} | ||
|
||
public static Groups of(final List<Group> groups) { | ||
return new Groups(groups); | ||
} | ||
|
||
public List<Group> getGroups() { | ||
return Collections.unmodifiableList(groups); | ||
} | ||
} |
18 changes: 7 additions & 11 deletions
18
src/main/java/org/noostak/group/dto/response/GroupCreateResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,23 +1,19 @@ | ||
package org.noostak.group.dto.response; | ||
|
||
import lombok.Builder; | ||
import org.noostak.group.domain.Group; | ||
|
||
@Builder | ||
public record GroupCreateResponse( | ||
Long groupId, | ||
String groupName, | ||
String groupProfileImageUrl, | ||
String groupInvitationCode | ||
) { | ||
public static GroupCreateResponse of(final Group group, final String groupProfileImageUrl) { | ||
{ | ||
return GroupCreateResponse.builder() | ||
.groupId(group.getGroupId()) | ||
.groupName(group.getName().value()) | ||
.groupProfileImageUrl(groupProfileImageUrl) | ||
.groupInvitationCode(group.getCode().value()) | ||
.build(); | ||
} | ||
return new GroupCreateResponse( | ||
group.getGroupId(), | ||
group.getName().value(), | ||
groupProfileImageUrl, | ||
group.getCode().value() | ||
); | ||
} | ||
} | ||
} |
15 changes: 15 additions & 0 deletions
15
src/main/java/org/noostak/group/dto/response/GroupInternalRetrieveResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package org.noostak.group.dto.response; | ||
|
||
import org.noostak.group.domain.Group; | ||
|
||
public record GroupInternalRetrieveResponse( | ||
Group group, | ||
String groupProfileImageUrl | ||
) { | ||
public static GroupInternalRetrieveResponse of(final Group group, final String groupProfileImageUrl) { | ||
return new GroupInternalRetrieveResponse( | ||
group, | ||
groupProfileImageUrl | ||
); | ||
} | ||
} |
19 changes: 19 additions & 0 deletions
19
src/main/java/org/noostak/group/dto/response/GroupRetrieveResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package org.noostak.group.dto.response; | ||
|
||
import org.noostak.group.domain.Group; | ||
|
||
public record GroupRetrieveResponse( | ||
Long groupId, | ||
String groupName, | ||
Long groupMemberCount, | ||
String groupProfileImageUrl | ||
) { | ||
public static GroupRetrieveResponse of(final Group group, final String groupProfileImageUrl) { | ||
return new GroupRetrieveResponse( | ||
group.getGroupId(), | ||
group.getName().value(), | ||
group.getCount().value(), | ||
groupProfileImageUrl | ||
); | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/java/org/noostak/group/dto/response/GroupsRetrieveResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package org.noostak.group.dto.response; | ||
|
||
import java.util.List; | ||
|
||
public record GroupsRetrieveResponse( | ||
List<GroupRetrieveResponse> groups | ||
) { | ||
public static GroupsRetrieveResponse of(final List<GroupRetrieveResponse> groupResponses) { | ||
return new GroupsRetrieveResponse(groupResponses); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
35 changes: 35 additions & 0 deletions
35
src/main/java/org/noostak/membergroup/domain/MemberGroup.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
package org.noostak.membergroup.domain; | ||
|
||
import jakarta.persistence.*; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import org.noostak.global.entity.BaseTimeEntity; | ||
import org.noostak.group.domain.Group; | ||
import org.noostak.member.domain.Member; | ||
|
||
@Entity | ||
@Getter | ||
@NoArgsConstructor | ||
public class MemberGroup extends BaseTimeEntity { | ||
|
||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
private Long memberGroupId; | ||
|
||
@ManyToOne(fetch = FetchType.LAZY) | ||
@JoinColumn(name = "member_id") | ||
private Member member; | ||
|
||
@ManyToOne(fetch = FetchType.LAZY) | ||
@JoinColumn(name = "group_id") | ||
private Group group; | ||
|
||
private MemberGroup(final Member member, final Group groups) { | ||
this.member = member; | ||
this.group = groups; | ||
} | ||
|
||
public static MemberGroup of(final Member member, final Group group) { | ||
return new MemberGroup(member, group); | ||
} | ||
} |
10 changes: 10 additions & 0 deletions
10
src/main/java/org/noostak/membergroup/domain/MemberGroupRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package org.noostak.membergroup.domain; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
|
||
import java.util.List; | ||
|
||
public interface MemberGroupRepository extends JpaRepository<MemberGroup, Long> { | ||
|
||
List<MemberGroup> findByMemberId(Long memberId); | ||
} |
42 changes: 19 additions & 23 deletions
42
src/main/java/org/noostak/membergroup/domain/MemberGroups.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,35 +1,31 @@ | ||
package org.noostak.membergroup.domain; | ||
|
||
import jakarta.persistence.*; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import org.noostak.global.entity.BaseTimeEntity; | ||
import org.noostak.group.domain.Group; | ||
import org.noostak.member.domain.Member; | ||
import java.util.Collections; | ||
import java.util.List; | ||
|
||
@Entity | ||
@Getter | ||
@NoArgsConstructor | ||
public class MemberGroups extends BaseTimeEntity { | ||
public class MemberGroups { | ||
private final List<MemberGroup> memberGroups; | ||
|
||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
private Long memberGroupId; | ||
private MemberGroups(List<MemberGroup> memberGroups) { | ||
this.memberGroups = memberGroups; | ||
} | ||
|
||
@ManyToOne(fetch = FetchType.LAZY) | ||
@JoinColumn(name = "member_id") | ||
private Member member; | ||
public static MemberGroups of(final List<MemberGroup> memberGroups) { | ||
return new MemberGroups(memberGroups); | ||
} | ||
|
||
@ManyToOne(fetch = FetchType.LAZY) | ||
@JoinColumn(name = "group_id") | ||
private Group group; | ||
public List<MemberGroup> getMemberGroups() { | ||
return Collections.unmodifiableList(memberGroups); | ||
} | ||
|
||
private MemberGroups(final Member member, final Group groups) { | ||
this.member = member; | ||
this.group = groups; | ||
public List<Group> toGroups() { | ||
return memberGroups.stream() | ||
.map(MemberGroup::getGroup) | ||
.toList(); | ||
} | ||
|
||
public static MemberGroups of(final Member member, final Group group) { | ||
return new MemberGroups(member, group); | ||
public boolean isEmpty() { | ||
return memberGroups.isEmpty(); | ||
} | ||
} |
Empty file.
Oops, something went wrong.