diff --git a/src/main/java/flipnote/group/adapter/in/web/GroupController.java b/src/main/java/flipnote/group/adapter/in/web/GroupController.java index 5eabf88..fd56c2f 100644 --- a/src/main/java/flipnote/group/adapter/in/web/GroupController.java +++ b/src/main/java/flipnote/group/adapter/in/web/GroupController.java @@ -1,6 +1,7 @@ package flipnote.group.adapter.in.web; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; @@ -13,10 +14,13 @@ import flipnote.group.api.dto.request.CreateGroupRequestDto; import flipnote.group.api.dto.response.ChangeGroupResponseDto; import flipnote.group.api.dto.response.CreateGroupResponseDto; +import flipnote.group.api.dto.response.FindGroupResponseDto; import flipnote.group.application.port.in.ChangeGroupUseCase; import flipnote.group.application.port.in.CreateGroupUseCase; +import flipnote.group.application.port.in.FindGroupUseCase; import flipnote.group.application.port.in.command.ChangeGroupCommand; import flipnote.group.application.port.in.command.CreateGroupCommand; +import flipnote.group.application.port.in.command.FindGroupCommand; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -27,6 +31,7 @@ public class GroupController { private final CreateGroupUseCase createGroupUseCase; private final ChangeGroupUseCase changeGroupUseCase; + private final FindGroupUseCase findGroupUseCase; /** * 그룹 생성 API @@ -86,4 +91,24 @@ public ResponseEntity changeGroup( return ResponseEntity.ok(res); } + /** + * 그룹 상세 조회 API + * @param userId + * @param groupId + * @return + */ + @GetMapping("/{groupId}") + public ResponseEntity findGroup( + @RequestHeader("X-USER-ID") Long userId, + @PathVariable("groupId") Long groupId) { + + FindGroupCommand cmd = new FindGroupCommand(userId, groupId); + + var result = findGroupUseCase.findGroup(cmd); + + FindGroupResponseDto res = FindGroupResponseDto.from(result); + + return ResponseEntity.ok(res); + } + } diff --git a/src/main/java/flipnote/group/adapter/out/persistence/GroupRepositoryAdapter.java b/src/main/java/flipnote/group/adapter/out/persistence/GroupRepositoryAdapter.java index a9bf8c8..dcba394 100644 --- a/src/main/java/flipnote/group/adapter/out/persistence/GroupRepositoryAdapter.java +++ b/src/main/java/flipnote/group/adapter/out/persistence/GroupRepositoryAdapter.java @@ -35,29 +35,4 @@ public Group findById(Long id) { ); return GroupMapper.toDomain(groupEntity); } - - /** - * 그룹 수정 - * @param group - */ - @Override - public Group update(Group group) { - - GroupEntity groupEntity = groupRepository.findById(group.getId()).orElseThrow( - () -> new IllegalArgumentException("group not Exist") - ); - - groupEntity.change( - group.getName(), - group.getCategory(), - group.getDescription(), - group.getJoinPolicy(), - group.getVisibility(), - group.getMaxMember(), - group.getImageRefId() - ); - - return GroupMapper.toDomain(groupEntity); - } - } diff --git a/src/main/java/flipnote/group/api/dto/response/ChangeGroupResponseDto.java b/src/main/java/flipnote/group/api/dto/response/ChangeGroupResponseDto.java index add99f9..f1c8503 100644 --- a/src/main/java/flipnote/group/api/dto/response/ChangeGroupResponseDto.java +++ b/src/main/java/flipnote/group/api/dto/response/ChangeGroupResponseDto.java @@ -9,6 +9,8 @@ import flipnote.group.domain.model.group.Visibility; public record ChangeGroupResponseDto( + Long groupId, + String name, Category category, @@ -32,6 +34,7 @@ public static ChangeGroupResponseDto from(ChangeGroupResult result) { Group group = result.group(); return new ChangeGroupResponseDto( + group.getId(), group.getName(), group.getCategory(), group.getDescription(), diff --git a/src/main/java/flipnote/group/api/dto/response/FindGroupResponseDto.java b/src/main/java/flipnote/group/api/dto/response/FindGroupResponseDto.java new file mode 100644 index 0000000..4518684 --- /dev/null +++ b/src/main/java/flipnote/group/api/dto/response/FindGroupResponseDto.java @@ -0,0 +1,49 @@ +package flipnote.group.api.dto.response; + +import java.time.LocalDateTime; + +import flipnote.group.application.port.in.result.FindGroupResult; +import flipnote.group.domain.model.group.Category; +import flipnote.group.domain.model.group.Group; +import flipnote.group.domain.model.group.JoinPolicy; +import flipnote.group.domain.model.group.Visibility; + +public record FindGroupResponseDto( + Long groupId, + + String name, + + Category category, + + String description, + + JoinPolicy joinPolicy, + + Visibility visibility, + + Integer maxMember, + + Long imageRefId, + + LocalDateTime createdAt, + + LocalDateTime modifiedAt +) { + public static FindGroupResponseDto from(FindGroupResult result) { + + Group group = result.group(); + + return new FindGroupResponseDto( + group.getId(), + group.getName(), + group.getCategory(), + group.getDescription(), + group.getJoinPolicy(), + group.getVisibility(), + group.getMaxMember(), + group.getImageRefId(), + group.getCreatedAt(), + group.getModifiedAt() + ); + } +} diff --git a/src/main/java/flipnote/group/application/port/in/FindGroupUseCase.java b/src/main/java/flipnote/group/application/port/in/FindGroupUseCase.java new file mode 100644 index 0000000..53f7b18 --- /dev/null +++ b/src/main/java/flipnote/group/application/port/in/FindGroupUseCase.java @@ -0,0 +1,8 @@ +package flipnote.group.application.port.in; + +import flipnote.group.application.port.in.command.FindGroupCommand; +import flipnote.group.application.port.in.result.FindGroupResult; + +public interface FindGroupUseCase { + FindGroupResult findGroup(FindGroupCommand cmd); +} diff --git a/src/main/java/flipnote/group/application/port/in/command/FindGroupCommand.java b/src/main/java/flipnote/group/application/port/in/command/FindGroupCommand.java new file mode 100644 index 0000000..e94cd74 --- /dev/null +++ b/src/main/java/flipnote/group/application/port/in/command/FindGroupCommand.java @@ -0,0 +1,7 @@ +package flipnote.group.application.port.in.command; + +public record FindGroupCommand( + Long userId, + Long groupId +) { +} diff --git a/src/main/java/flipnote/group/application/port/in/result/FindGroupResult.java b/src/main/java/flipnote/group/application/port/in/result/FindGroupResult.java new file mode 100644 index 0000000..d50209c --- /dev/null +++ b/src/main/java/flipnote/group/application/port/in/result/FindGroupResult.java @@ -0,0 +1,7 @@ +package flipnote.group.application.port.in.result; + +import flipnote.group.domain.model.group.Group; + +public record FindGroupResult( + Group group +) { } diff --git a/src/main/java/flipnote/group/application/port/out/GroupRepositoryPort.java b/src/main/java/flipnote/group/application/port/out/GroupRepositoryPort.java index 5bc40cf..cc7ad54 100644 --- a/src/main/java/flipnote/group/application/port/out/GroupRepositoryPort.java +++ b/src/main/java/flipnote/group/application/port/out/GroupRepositoryPort.java @@ -6,6 +6,4 @@ public interface GroupRepositoryPort { Long saveNewGroup(Group group); Group findById(Long id); - - Group update(Group group); } diff --git a/src/main/java/flipnote/group/application/service/ChangeGroupService.java b/src/main/java/flipnote/group/application/service/ChangeGroupService.java index f42fab6..d72fecb 100644 --- a/src/main/java/flipnote/group/application/service/ChangeGroupService.java +++ b/src/main/java/flipnote/group/application/service/ChangeGroupService.java @@ -10,8 +10,6 @@ import flipnote.group.application.port.in.ChangeGroupUseCase; import flipnote.group.application.port.in.command.ChangeGroupCommand; import flipnote.group.application.port.in.result.ChangeGroupResult; -import flipnote.group.application.port.out.GroupRepositoryPort; -import flipnote.group.domain.model.group.Group; import flipnote.group.infrastructure.persistence.jpa.GroupRepository; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/flipnote/group/application/service/FindGroupService.java b/src/main/java/flipnote/group/application/service/FindGroupService.java new file mode 100644 index 0000000..700ec9c --- /dev/null +++ b/src/main/java/flipnote/group/application/service/FindGroupService.java @@ -0,0 +1,34 @@ +package flipnote.group.application.service; + +import java.util.Optional; + +import org.springframework.stereotype.Service; + +import flipnote.group.adapter.out.entity.GroupEntity; +import flipnote.group.adapter.out.persistence.mapper.GroupMapper; +import flipnote.group.application.port.in.FindGroupUseCase; +import flipnote.group.application.port.in.command.FindGroupCommand; +import flipnote.group.application.port.in.result.FindGroupResult; +import flipnote.group.application.port.out.GroupRepositoryPort; +import flipnote.group.domain.model.group.Group; +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class FindGroupService implements FindGroupUseCase { + + private final GroupRepositoryPort groupRepository; + + /** + * 하나의 그룹에 대한 정보 조회 + * @param cmd + * @return + */ + @Override + public FindGroupResult findGroup(FindGroupCommand cmd) { + + Group group = groupRepository.findById(cmd.groupId()); + + return new FindGroupResult(group); + } +}