From 6fe1081911eeaaa55a4b770fd574942804dedeac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9D=EB=B2=94?= Date: Wed, 4 Feb 2026 22:29:42 +0900 Subject: [PATCH 1/8] =?UTF-8?q?Refactor:=20cmd=EC=97=90=20userId=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group/adapter/in/web/GroupController.java | 31 ++++++++++++++++++- .../port/in/CreateGroupUseCase.java | 2 +- .../port/in/command/CreateGroupCommand.java | 1 + .../service/CreateGroupService.java | 5 ++- 4 files changed, 34 insertions(+), 5 deletions(-) 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 4972362..63ad85f 100644 --- a/src/main/java/flipnote/group/adapter/in/web/GroupController.java +++ b/src/main/java/flipnote/group/adapter/in/web/GroupController.java @@ -1,15 +1,21 @@ package flipnote.group.adapter.in.web; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import flipnote.group.api.dto.request.ChangeGroupRequestDto; import flipnote.group.api.dto.request.CreateGroupRequestDto; +import flipnote.group.api.dto.response.ChangeGroupResponseDto; import flipnote.group.api.dto.response.CreateGroupResponseDto; +import flipnote.group.application.port.in.ChangeGroupUseCase; import flipnote.group.application.port.in.CreateGroupUseCase; +import flipnote.group.application.port.in.command.ChangeGroupCommand; import flipnote.group.application.port.in.command.CreateGroupCommand; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -20,6 +26,7 @@ public class GroupController { private final CreateGroupUseCase createGroupUseCase; + private final ChangeGroupUseCase changeGroupUseCase; /** * 그룹 생성 API @@ -33,6 +40,7 @@ public ResponseEntity createGroup( @RequestBody @Valid CreateGroupRequestDto req) { CreateGroupCommand cmd = new CreateGroupCommand( + userId, req.name(), req.category(), req.description(), @@ -42,9 +50,30 @@ public ResponseEntity createGroup( req.imageRefId() ); - var result = createGroupUseCase.create(cmd, userId); + var result = createGroupUseCase.create(cmd); CreateGroupResponseDto res = CreateGroupResponseDto.from(result.groupId()); return ResponseEntity.ok(res); } + @PutMapping("/{groupId}") + public ResponseEntity changeGroup( + @RequestHeader("X-USER-ID") Long userId, + @PathVariable Long groupId, + @RequestBody @Valid ChangeGroupRequestDto req) { + + ChangeGroupCommand cmd = new ChangeGroupCommand( + groupId, + userId, + req.name(), + req.category(), + req.description(), + req.joinPolicy(), + req.visibility(), + req.maxMember(), + req.imageRefId() + ); + + var result = changeGroupUseCase.change(cmd); + } + } diff --git a/src/main/java/flipnote/group/application/port/in/CreateGroupUseCase.java b/src/main/java/flipnote/group/application/port/in/CreateGroupUseCase.java index d58a135..c670d61 100644 --- a/src/main/java/flipnote/group/application/port/in/CreateGroupUseCase.java +++ b/src/main/java/flipnote/group/application/port/in/CreateGroupUseCase.java @@ -4,5 +4,5 @@ import flipnote.group.application.port.in.result.CreateGroupResult; public interface CreateGroupUseCase { - CreateGroupResult create(CreateGroupCommand cmd, Long userId); + CreateGroupResult create(CreateGroupCommand cmd); } diff --git a/src/main/java/flipnote/group/application/port/in/command/CreateGroupCommand.java b/src/main/java/flipnote/group/application/port/in/command/CreateGroupCommand.java index 40a2f58..f12640f 100644 --- a/src/main/java/flipnote/group/application/port/in/command/CreateGroupCommand.java +++ b/src/main/java/flipnote/group/application/port/in/command/CreateGroupCommand.java @@ -5,6 +5,7 @@ import flipnote.group.domain.model.group.Visibility; public record CreateGroupCommand( + Long userId, String name, Category category, String description, diff --git a/src/main/java/flipnote/group/application/service/CreateGroupService.java b/src/main/java/flipnote/group/application/service/CreateGroupService.java index 83b66ea..a465769 100644 --- a/src/main/java/flipnote/group/application/service/CreateGroupService.java +++ b/src/main/java/flipnote/group/application/service/CreateGroupService.java @@ -22,12 +22,11 @@ public class CreateGroupService implements CreateGroupUseCase { /** * 그룹 생성 * @param cmd - * @param userId * @return */ @Override @Transactional - public CreateGroupResult create(CreateGroupCommand cmd, Long userId) { + public CreateGroupResult create(CreateGroupCommand cmd) { //도메인 생성 및 검증 var domainGroup = Group.create(cmd); @@ -36,7 +35,7 @@ public CreateGroupResult create(CreateGroupCommand cmd, Long userId) { Long groupId = groupRepository.saveNewGroup(GroupMapper.createNewEntity(domainGroup)); //그룹 멤버 저장 - groupMemberRepository.saveOwner(groupId, userId); + groupMemberRepository.saveOwner(groupId, cmd.userId()); return new CreateGroupResult(groupId); } From 941d05fcaeddac66fd84477f53a6220aa04e72db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9D=EB=B2=94?= Date: Wed, 4 Feb 2026 23:29:47 +0900 Subject: [PATCH 2/8] =?UTF-8?q?Feat:=20=EA=B7=B8=EB=A3=B9=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group/adapter/in/web/GroupController.java | 3 ++ .../group/adapter/out/entity/GroupEntity.java | 26 +++++++++++ .../persistence/GroupRepositoryAdapter.java | 35 ++++++++++++++ .../out/persistence/mapper/GroupMapper.java | 21 +++++++++ .../dto/request/ChangeGroupRequestDto.java | 20 ++++++++ .../dto/response/ChangeGroupResponseDto.java | 46 +++++++++++++++++++ .../port/in/ChangeGroupUseCase.java | 8 ++++ .../port/in/command/ChangeGroupCommand.java | 19 ++++++++ .../port/in/result/ChangeGroupResult.java | 8 ++++ .../port/out/GroupRepositoryPort.java | 8 +++- .../service/ChangeGroupService.java | 42 +++++++++++++++++ .../group/domain/model/group/Group.java | 14 ++++-- 12 files changed, 246 insertions(+), 4 deletions(-) create mode 100644 src/main/java/flipnote/group/api/dto/request/ChangeGroupRequestDto.java create mode 100644 src/main/java/flipnote/group/api/dto/response/ChangeGroupResponseDto.java create mode 100644 src/main/java/flipnote/group/application/port/in/ChangeGroupUseCase.java create mode 100644 src/main/java/flipnote/group/application/port/in/command/ChangeGroupCommand.java create mode 100644 src/main/java/flipnote/group/application/port/in/result/ChangeGroupResult.java create mode 100644 src/main/java/flipnote/group/application/service/ChangeGroupService.java 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 63ad85f..a2ba76e 100644 --- a/src/main/java/flipnote/group/adapter/in/web/GroupController.java +++ b/src/main/java/flipnote/group/adapter/in/web/GroupController.java @@ -74,6 +74,9 @@ public ResponseEntity changeGroup( ); var result = changeGroupUseCase.change(cmd); + + ChangeGroupResponseDto res = ChangeGroupResponseDto.from(result); + return ResponseEntity.ok(res); } } diff --git a/src/main/java/flipnote/group/adapter/out/entity/GroupEntity.java b/src/main/java/flipnote/group/adapter/out/entity/GroupEntity.java index c3e9968..8a26c3d 100644 --- a/src/main/java/flipnote/group/adapter/out/entity/GroupEntity.java +++ b/src/main/java/flipnote/group/adapter/out/entity/GroupEntity.java @@ -66,4 +66,30 @@ private GroupEntity(String name, Category category, String description, JoinPoli this.imageRefId = imageRefId; this.memberCount = memberCount; } + + /** + * 업데이트 + * @param name + * @param category + * @param description + * @param joinPolicy + * @param visibility + * @param maxMember + * @param imageRefId + * @param memberCount + */ + public void change( + String name, Category category, String description, + JoinPolicy joinPolicy, Visibility visibility, + Integer maxMember, Long imageRefId, Integer memberCount + ) { + this.name = name; + this.category = category; + this.description = description; + this.joinPolicy = joinPolicy; + this.visibility = visibility; + this.maxMember = maxMember; + this.imageRefId = imageRefId; + this.memberCount = memberCount; + } } 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 875bc6e..e9622a0 100644 --- a/src/main/java/flipnote/group/adapter/out/persistence/GroupRepositoryAdapter.java +++ b/src/main/java/flipnote/group/adapter/out/persistence/GroupRepositoryAdapter.java @@ -1,9 +1,13 @@ package flipnote.group.adapter.out.persistence; +import java.util.Optional; + import org.springframework.stereotype.Repository; import flipnote.group.adapter.out.entity.GroupEntity; +import flipnote.group.adapter.out.persistence.mapper.GroupMapper; import flipnote.group.application.port.out.GroupRepositoryPort; +import flipnote.group.domain.model.group.Group; import flipnote.group.infrastructure.persistence.jpa.GroupRepository; import lombok.RequiredArgsConstructor; @@ -13,6 +17,11 @@ public class GroupRepositoryAdapter implements GroupRepositoryPort { private final GroupRepository groupRepository; + /** + * 그룹 저장 + * @param groupEntity + * @return + */ @Override public Long saveNewGroup(GroupEntity groupEntity) { @@ -20,4 +29,30 @@ public Long saveNewGroup(GroupEntity groupEntity) { return group.getId(); } + + @Override + public Optional findById(Long id) { + return groupRepository.findById(id); + } + + /** + * 그룹 수정 + * @param group + */ + @Override + public Group update(Group group, GroupEntity groupEntity) { + groupEntity.change( + group.getName(), + group.getCategory(), + group.getDescription(), + group.getJoinPolicy(), + group.getVisibility(), + group.getMaxMember(), + group.getImageRefId(), + group.getMemberCount() + ); + + return GroupMapper.toDomain(groupEntity); + } + } diff --git a/src/main/java/flipnote/group/adapter/out/persistence/mapper/GroupMapper.java b/src/main/java/flipnote/group/adapter/out/persistence/mapper/GroupMapper.java index c89f7f0..77d472e 100644 --- a/src/main/java/flipnote/group/adapter/out/persistence/mapper/GroupMapper.java +++ b/src/main/java/flipnote/group/adapter/out/persistence/mapper/GroupMapper.java @@ -28,4 +28,25 @@ public static GroupEntity createNewEntity(Group domain) { .memberCount(domain.getMemberCount()) .build(); } + + /** + * 엔티티 -> 도메인 + * @param e + * @return + */ + public static Group toDomain(GroupEntity e) { + return Group.restore( + e.getId(), + e.getName(), + e.getCategory(), + e.getDescription(), + e.getJoinPolicy(), + e.getVisibility(), + e.getMaxMember(), + e.getImageRefId(), + e.getMemberCount(), + e.getCreatedAt(), + e.getModifiedAt() + ); + } } diff --git a/src/main/java/flipnote/group/api/dto/request/ChangeGroupRequestDto.java b/src/main/java/flipnote/group/api/dto/request/ChangeGroupRequestDto.java new file mode 100644 index 0000000..c95c330 --- /dev/null +++ b/src/main/java/flipnote/group/api/dto/request/ChangeGroupRequestDto.java @@ -0,0 +1,20 @@ +package flipnote.group.api.dto.request; + +import flipnote.group.domain.model.group.Category; +import flipnote.group.domain.model.group.JoinPolicy; +import flipnote.group.domain.model.group.Visibility; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; + +public record ChangeGroupRequestDto( + @NotBlank String name, + @NotNull Category category, + @NotBlank String description, + @NotNull JoinPolicy joinPolicy, + @NotNull Visibility visibility, + @NotNull @Min(1) @Max(100) Integer maxMember, + Long imageRefId +) { +} diff --git a/src/main/java/flipnote/group/api/dto/response/ChangeGroupResponseDto.java b/src/main/java/flipnote/group/api/dto/response/ChangeGroupResponseDto.java new file mode 100644 index 0000000..add99f9 --- /dev/null +++ b/src/main/java/flipnote/group/api/dto/response/ChangeGroupResponseDto.java @@ -0,0 +1,46 @@ +package flipnote.group.api.dto.response; + +import java.time.LocalDateTime; + +import flipnote.group.application.port.in.result.ChangeGroupResult; +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 ChangeGroupResponseDto( + String name, + + Category category, + + String description, + + JoinPolicy joinPolicy, + + Visibility visibility, + + Integer maxMember, + + Long imageRefId, + + LocalDateTime createdAt, + + LocalDateTime modifiedAt +) { + public static ChangeGroupResponseDto from(ChangeGroupResult result) { + + Group group = result.group(); + + return new ChangeGroupResponseDto( + 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/ChangeGroupUseCase.java b/src/main/java/flipnote/group/application/port/in/ChangeGroupUseCase.java new file mode 100644 index 0000000..fc6f38f --- /dev/null +++ b/src/main/java/flipnote/group/application/port/in/ChangeGroupUseCase.java @@ -0,0 +1,8 @@ +package flipnote.group.application.port.in; + +import flipnote.group.application.port.in.command.ChangeGroupCommand; +import flipnote.group.application.port.in.result.ChangeGroupResult; + +public interface ChangeGroupUseCase { + ChangeGroupResult change(ChangeGroupCommand cmd); +} diff --git a/src/main/java/flipnote/group/application/port/in/command/ChangeGroupCommand.java b/src/main/java/flipnote/group/application/port/in/command/ChangeGroupCommand.java new file mode 100644 index 0000000..c7cc7ba --- /dev/null +++ b/src/main/java/flipnote/group/application/port/in/command/ChangeGroupCommand.java @@ -0,0 +1,19 @@ +package flipnote.group.application.port.in.command; + +import flipnote.group.domain.model.group.Category; +import flipnote.group.domain.model.group.JoinPolicy; +import flipnote.group.domain.model.group.Visibility; + +public record ChangeGroupCommand( + Long groupId, + Long userId, + String name, + Category category, + String description, + JoinPolicy joinPolicy, + Visibility visibility, + int maxMember, + Long imageRefId +) { + +} diff --git a/src/main/java/flipnote/group/application/port/in/result/ChangeGroupResult.java b/src/main/java/flipnote/group/application/port/in/result/ChangeGroupResult.java new file mode 100644 index 0000000..32b2499 --- /dev/null +++ b/src/main/java/flipnote/group/application/port/in/result/ChangeGroupResult.java @@ -0,0 +1,8 @@ +package flipnote.group.application.port.in.result; + +import flipnote.group.domain.model.group.Group; + +public record ChangeGroupResult( + 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 bc00f90..2774d74 100644 --- a/src/main/java/flipnote/group/application/port/out/GroupRepositoryPort.java +++ b/src/main/java/flipnote/group/application/port/out/GroupRepositoryPort.java @@ -1,8 +1,14 @@ package flipnote.group.application.port.out; +import java.util.Optional; + import flipnote.group.adapter.out.entity.GroupEntity; -import flipnote.group.application.port.in.command.CreateGroupCommand; +import flipnote.group.domain.model.group.Group; public interface GroupRepositoryPort { Long saveNewGroup(GroupEntity groupEntity); + + Optional findById(Long id); + + Group update(Group group, GroupEntity groupEntity); } diff --git a/src/main/java/flipnote/group/application/service/ChangeGroupService.java b/src/main/java/flipnote/group/application/service/ChangeGroupService.java new file mode 100644 index 0000000..8d5ccee --- /dev/null +++ b/src/main/java/flipnote/group/application/service/ChangeGroupService.java @@ -0,0 +1,42 @@ +package flipnote.group.application.service; + +import java.util.Optional; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import flipnote.group.adapter.out.entity.GroupEntity; +import flipnote.group.adapter.out.persistence.mapper.GroupMapper; +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 lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class ChangeGroupService implements ChangeGroupUseCase { + + private final GroupRepositoryPort groupRepository; + + /** + * 그룹 수정 + * @param cmd + * @return + */ + @Override + @Transactional + public ChangeGroupResult change(ChangeGroupCommand cmd) { + + GroupEntity groupEntity = groupRepository.findById(cmd.groupId()).orElseThrow( + () -> new IllegalArgumentException("group not exists") + ); + + Group domainGroup = GroupMapper.toDomain(groupEntity); + + Group group = groupRepository.update(domainGroup, groupEntity); + + return new ChangeGroupResult(group); + } +} diff --git a/src/main/java/flipnote/group/domain/model/group/Group.java b/src/main/java/flipnote/group/domain/model/group/Group.java index eb44fc8..eca6bb8 100644 --- a/src/main/java/flipnote/group/domain/model/group/Group.java +++ b/src/main/java/flipnote/group/domain/model/group/Group.java @@ -1,5 +1,7 @@ package flipnote.group.domain.model.group; +import java.time.LocalDateTime; + import flipnote.group.application.port.in.command.CreateGroupCommand; import lombok.AccessLevel; import lombok.Builder; @@ -8,7 +10,6 @@ import lombok.Setter; @Getter -@Setter @NoArgsConstructor(access = AccessLevel.PRIVATE) public class Group { @@ -24,6 +25,9 @@ public class Group { private Long imageRefId; private int memberCount; + private LocalDateTime createdAt; + private LocalDateTime modifiedAt; + /** * 신규로 그룹 생성 * @param cmd @@ -59,7 +63,7 @@ public static Group create(CreateGroupCommand cmd) { * @param memberCount * @return */ - public static Group getGroup( + public static Group restore( Long id, String name, Category category, @@ -68,7 +72,9 @@ public static Group getGroup( Visibility visibility, int maxMember, Long imageRefId, - int memberCount + int memberCount, + LocalDateTime createdAt, + LocalDateTime modifiedAt ) { Group g = new Group(); g.id = id; @@ -80,6 +86,8 @@ public static Group getGroup( g.maxMember = maxMember; g.imageRefId = imageRefId; g.memberCount = memberCount; + g.createdAt = createdAt; + g.modifiedAt = modifiedAt; return g; } From 779a63114addaa548eb1f532d071c42447655aac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9D=EB=B2=94?= Date: Sun, 8 Feb 2026 00:10:55 +0900 Subject: [PATCH 3/8] =?UTF-8?q?Chore:=20=EC=A3=BC=EC=84=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flipnote/group/adapter/in/web/GroupController.java | 7 +++++++ 1 file changed, 7 insertions(+) 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 a2ba76e..5eabf88 100644 --- a/src/main/java/flipnote/group/adapter/in/web/GroupController.java +++ b/src/main/java/flipnote/group/adapter/in/web/GroupController.java @@ -55,6 +55,13 @@ public ResponseEntity createGroup( return ResponseEntity.ok(res); } + /** + * 그룹 수정 API + * @param userId + * @param groupId + * @param req + * @return + */ @PutMapping("/{groupId}") public ResponseEntity changeGroup( @RequestHeader("X-USER-ID") Long userId, From b6112b412502c350dd0b2ed5e35d9bebb9563d17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9D=EB=B2=94?= Date: Wed, 11 Feb 2026 22:39:24 +0900 Subject: [PATCH 4/8] =?UTF-8?q?Feat:=20=EA=B7=B8=EB=A3=B9=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=EC=8B=9C=20=EC=9C=A0=EC=A0=80=20=EC=B9=B4=EC=9A=B4?= =?UTF-8?q?=ED=8A=B8=20=EB=B3=80=EA=B2=BD=20=EC=95=88=ED=95=98=EA=B2=8C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/flipnote/group/adapter/out/entity/GroupEntity.java | 4 +--- .../group/adapter/out/persistence/GroupRepositoryAdapter.java | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/flipnote/group/adapter/out/entity/GroupEntity.java b/src/main/java/flipnote/group/adapter/out/entity/GroupEntity.java index 8a26c3d..2284702 100644 --- a/src/main/java/flipnote/group/adapter/out/entity/GroupEntity.java +++ b/src/main/java/flipnote/group/adapter/out/entity/GroupEntity.java @@ -76,12 +76,11 @@ private GroupEntity(String name, Category category, String description, JoinPoli * @param visibility * @param maxMember * @param imageRefId - * @param memberCount */ public void change( String name, Category category, String description, JoinPolicy joinPolicy, Visibility visibility, - Integer maxMember, Long imageRefId, Integer memberCount + Integer maxMember, Long imageRefId ) { this.name = name; this.category = category; @@ -90,6 +89,5 @@ public void change( this.visibility = visibility; this.maxMember = maxMember; this.imageRefId = imageRefId; - this.memberCount = memberCount; } } 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 e9622a0..b357a42 100644 --- a/src/main/java/flipnote/group/adapter/out/persistence/GroupRepositoryAdapter.java +++ b/src/main/java/flipnote/group/adapter/out/persistence/GroupRepositoryAdapter.java @@ -48,8 +48,7 @@ public Group update(Group group, GroupEntity groupEntity) { group.getJoinPolicy(), group.getVisibility(), group.getMaxMember(), - group.getImageRefId(), - group.getMemberCount() + group.getImageRefId() ); return GroupMapper.toDomain(groupEntity); From fad7f36b6b104ceb9665103d7c22fdb27cf1bbbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9D=EB=B2=94?= Date: Wed, 11 Feb 2026 22:43:56 +0900 Subject: [PATCH 5/8] =?UTF-8?q?Merge:=20=EB=B3=91=ED=95=A9=20=EC=B6=A9?= =?UTF-8?q?=EB=8F=8C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group/application/port/out/GroupRepositoryPort.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 410d8ae..4d04a9b 100644 --- a/src/main/java/flipnote/group/application/port/out/GroupRepositoryPort.java +++ b/src/main/java/flipnote/group/application/port/out/GroupRepositoryPort.java @@ -8,7 +8,7 @@ public interface GroupRepositoryPort { Long saveNewGroup(Group group); - Optional findById(Long id); + Optional findById(Long id); - Group update(Group group, GroupEntity groupEntity); + Group update(Group group); } From 56b46bbedc1a3c437262bfc17510e22c24c8b42e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9D=EB=B2=94?= Date: Wed, 11 Feb 2026 22:52:03 +0900 Subject: [PATCH 6/8] =?UTF-8?q?Fix:=20=ED=97=A5=EC=82=AC=EA=B3=A0=EB=82=A0?= =?UTF-8?q?=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/persistence/GroupRepositoryAdapter.java | 14 +++++++++++--- .../application/port/out/GroupRepositoryPort.java | 5 +---- .../application/service/ChangeGroupService.java | 8 +++----- .../flipnote/group/domain/model/group/Group.java | 12 ++++++++++++ 4 files changed, 27 insertions(+), 12 deletions(-) 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 c782fd5..a9bf8c8 100644 --- a/src/main/java/flipnote/group/adapter/out/persistence/GroupRepositoryAdapter.java +++ b/src/main/java/flipnote/group/adapter/out/persistence/GroupRepositoryAdapter.java @@ -29,8 +29,11 @@ public Long saveNewGroup(Group group) { } @Override - public Optional findById(Long id) { - return groupRepository.findById(id); + public Group findById(Long id) { + GroupEntity groupEntity = groupRepository.findById(id).orElseThrow( + () -> new IllegalArgumentException("Group not Exist") + ); + return GroupMapper.toDomain(groupEntity); } /** @@ -38,7 +41,12 @@ public Optional findById(Long id) { * @param group */ @Override - public Group update(Group group, GroupEntity groupEntity) { + public Group update(Group group) { + + GroupEntity groupEntity = groupRepository.findById(group.getId()).orElseThrow( + () -> new IllegalArgumentException("group not Exist") + ); + groupEntity.change( group.getName(), group.getCategory(), 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 4d04a9b..5bc40cf 100644 --- a/src/main/java/flipnote/group/application/port/out/GroupRepositoryPort.java +++ b/src/main/java/flipnote/group/application/port/out/GroupRepositoryPort.java @@ -1,14 +1,11 @@ package flipnote.group.application.port.out; -import java.util.Optional; - -import flipnote.group.adapter.out.entity.GroupEntity; import flipnote.group.domain.model.group.Group; public interface GroupRepositoryPort { Long saveNewGroup(Group group); - Optional findById(Long id); + 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 8d5ccee..e045325 100644 --- a/src/main/java/flipnote/group/application/service/ChangeGroupService.java +++ b/src/main/java/flipnote/group/application/service/ChangeGroupService.java @@ -29,13 +29,11 @@ public class ChangeGroupService implements ChangeGroupUseCase { @Transactional public ChangeGroupResult change(ChangeGroupCommand cmd) { - GroupEntity groupEntity = groupRepository.findById(cmd.groupId()).orElseThrow( - () -> new IllegalArgumentException("group not exists") - ); + Group findGroup = groupRepository.findById(cmd.groupId()); - Group domainGroup = GroupMapper.toDomain(groupEntity); + findGroup.change(cmd); - Group group = groupRepository.update(domainGroup, groupEntity); + Group group = groupRepository.update(findGroup); return new ChangeGroupResult(group); } diff --git a/src/main/java/flipnote/group/domain/model/group/Group.java b/src/main/java/flipnote/group/domain/model/group/Group.java index c7bcc03..e49d245 100644 --- a/src/main/java/flipnote/group/domain/model/group/Group.java +++ b/src/main/java/flipnote/group/domain/model/group/Group.java @@ -2,6 +2,7 @@ import java.time.LocalDateTime; +import flipnote.group.application.port.in.command.ChangeGroupCommand; import flipnote.group.application.port.in.command.CreateGroupCommand; import lombok.AccessLevel; import lombok.Builder; @@ -118,4 +119,15 @@ private static void validate(CreateGroupCommand cmd) { throw new IllegalArgumentException("name too long"); } } + + public void change(ChangeGroupCommand cmd) { + // 권한 검증 등 비즈니스 로직 추가 가능 + this.name = cmd.name(); + this.category = cmd.category(); + this.description = cmd.description(); + this.joinPolicy = cmd.joinPolicy(); + this.visibility = cmd.visibility(); + this.maxMember = cmd.maxMember(); + this.imageRefId = cmd.imageRefId(); + } } From c6d50034322678f1d5543c6d7851e7334b115d8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9D=EB=B2=94?= Date: Wed, 11 Feb 2026 22:56:51 +0900 Subject: [PATCH 7/8] =?UTF-8?q?Merge:=20=EC=B6=A9=EB=8F=8C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group/application/port/out/GroupRepositoryPort.java | 4 ---- 1 file changed, 4 deletions(-) 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..b1a2f7c 100644 --- a/src/main/java/flipnote/group/application/port/out/GroupRepositoryPort.java +++ b/src/main/java/flipnote/group/application/port/out/GroupRepositoryPort.java @@ -4,8 +4,4 @@ public interface GroupRepositoryPort { Long saveNewGroup(Group group); - - Group findById(Long id); - - Group update(Group group); } From b6d825672c691c67796847425a199918dcb982fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9D=EB=B2=94?= Date: Wed, 11 Feb 2026 23:09:04 +0900 Subject: [PATCH 8/8] =?UTF-8?q?Fix:=20=EA=B7=B8=EB=A3=B9=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=202=EB=B2=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group/adapter/out/entity/GroupEntity.java | 27 +++++++------------ .../port/out/GroupMemberRepositoryPort.java | 2 -- .../service/ChangeGroupService.java | 13 ++++----- .../group/domain/model/group/Group.java | 11 -------- 4 files changed, 17 insertions(+), 36 deletions(-) diff --git a/src/main/java/flipnote/group/adapter/out/entity/GroupEntity.java b/src/main/java/flipnote/group/adapter/out/entity/GroupEntity.java index 2284702..e2650d7 100644 --- a/src/main/java/flipnote/group/adapter/out/entity/GroupEntity.java +++ b/src/main/java/flipnote/group/adapter/out/entity/GroupEntity.java @@ -1,5 +1,6 @@ package flipnote.group.adapter.out.entity; +import flipnote.group.application.port.in.command.ChangeGroupCommand; import flipnote.group.application.port.in.command.CreateGroupCommand; import flipnote.group.domain.model.BaseEntity; import flipnote.group.domain.model.group.Category; @@ -69,25 +70,17 @@ private GroupEntity(String name, Category category, String description, JoinPoli /** * 업데이트 - * @param name - * @param category - * @param description - * @param joinPolicy - * @param visibility - * @param maxMember - * @param imageRefId + * @param cmd */ public void change( - String name, Category category, String description, - JoinPolicy joinPolicy, Visibility visibility, - Integer maxMember, Long imageRefId + ChangeGroupCommand cmd ) { - this.name = name; - this.category = category; - this.description = description; - this.joinPolicy = joinPolicy; - this.visibility = visibility; - this.maxMember = maxMember; - this.imageRefId = imageRefId; + this.name = cmd.name(); + this.category = cmd.category(); + this.description = cmd.description(); + this.joinPolicy = cmd.joinPolicy(); + this.visibility = cmd.visibility(); + this.maxMember = cmd.maxMember(); + this.imageRefId = cmd.imageRefId(); } } diff --git a/src/main/java/flipnote/group/application/port/out/GroupMemberRepositoryPort.java b/src/main/java/flipnote/group/application/port/out/GroupMemberRepositoryPort.java index 8622b41..5858851 100644 --- a/src/main/java/flipnote/group/application/port/out/GroupMemberRepositoryPort.java +++ b/src/main/java/flipnote/group/application/port/out/GroupMemberRepositoryPort.java @@ -1,7 +1,5 @@ package flipnote.group.application.port.out; -import flipnote.group.domain.model.member.GroupMemberRole; - public interface GroupMemberRepositoryPort { void saveOwner(Long groupId, Long userId); } diff --git a/src/main/java/flipnote/group/application/service/ChangeGroupService.java b/src/main/java/flipnote/group/application/service/ChangeGroupService.java index e045325..f42fab6 100644 --- a/src/main/java/flipnote/group/application/service/ChangeGroupService.java +++ b/src/main/java/flipnote/group/application/service/ChangeGroupService.java @@ -12,13 +12,14 @@ 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; @Service @RequiredArgsConstructor public class ChangeGroupService implements ChangeGroupUseCase { - private final GroupRepositoryPort groupRepository; + private final GroupRepository jpaGroupRepository; /** * 그룹 수정 @@ -29,12 +30,12 @@ public class ChangeGroupService implements ChangeGroupUseCase { @Transactional public ChangeGroupResult change(ChangeGroupCommand cmd) { - Group findGroup = groupRepository.findById(cmd.groupId()); + GroupEntity entity = jpaGroupRepository.findById(cmd.groupId()).orElseThrow( + () -> new IllegalArgumentException("group not Exists") + ); - findGroup.change(cmd); + entity.change(cmd); - Group group = groupRepository.update(findGroup); - - return new ChangeGroupResult(group); + return new ChangeGroupResult(GroupMapper.toDomain(entity)); } } diff --git a/src/main/java/flipnote/group/domain/model/group/Group.java b/src/main/java/flipnote/group/domain/model/group/Group.java index e49d245..04dc07a 100644 --- a/src/main/java/flipnote/group/domain/model/group/Group.java +++ b/src/main/java/flipnote/group/domain/model/group/Group.java @@ -119,15 +119,4 @@ private static void validate(CreateGroupCommand cmd) { throw new IllegalArgumentException("name too long"); } } - - public void change(ChangeGroupCommand cmd) { - // 권한 검증 등 비즈니스 로직 추가 가능 - this.name = cmd.name(); - this.category = cmd.category(); - this.description = cmd.description(); - this.joinPolicy = cmd.joinPolicy(); - this.visibility = cmd.visibility(); - this.maxMember = cmd.maxMember(); - this.imageRefId = cmd.imageRefId(); - } }