From 033099bc65274ab91549f03c20dcb2888059fcdc Mon Sep 17 00:00:00 2001 From: EunjiShin Date: Wed, 17 Jul 2024 23:05:49 +0900 Subject: [PATCH 1/5] =?UTF-8?q?refactor:=20team=EA=B3=BC=20hometeam=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../team/CreateBaseballTeamController.java | 14 +++++++ .../BaseballTeamRepositoryImpl.java | 31 -------------- .../hometeam/HomeTeamRepositoryImpl.java | 42 +++++++++++++++++++ .../StadiumHomeTeamCustomRepository.java | 2 +- .../port/in/team/CreateHomeTeamUsecase.java | 8 ++++ .../port/out/team/BaseballTeamRepository.java | 8 ---- .../port/out/team/HomeTeamRepository.java | 14 +++++++ .../service/team/CreateHomeTeamService.java | 19 +++++++++ .../team/ReadStadiumHomeTeamService.java | 8 ++-- .../fake/FakeBaseballTeamRepository.java | 34 --------------- .../service/fake/FakeHomeTeamRepository.java | 33 +++++++++++++++ 11 files changed, 135 insertions(+), 78 deletions(-) create mode 100644 infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/hometeam/HomeTeamRepositoryImpl.java rename infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/{ => hometeam}/StadiumHomeTeamCustomRepository.java (96%) create mode 100644 usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/CreateHomeTeamUsecase.java create mode 100644 usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/HomeTeamRepository.java create mode 100644 usecase/src/main/java/org/depromeet/spot/usecase/service/team/CreateHomeTeamService.java create mode 100644 usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeHomeTeamRepository.java diff --git a/application/src/main/java/org/depromeet/spot/application/team/CreateBaseballTeamController.java b/application/src/main/java/org/depromeet/spot/application/team/CreateBaseballTeamController.java index b5ccdeb2..78688527 100644 --- a/application/src/main/java/org/depromeet/spot/application/team/CreateBaseballTeamController.java +++ b/application/src/main/java/org/depromeet/spot/application/team/CreateBaseballTeamController.java @@ -4,11 +4,15 @@ import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; import org.depromeet.spot.application.team.dto.request.CreateBaseballTeamReq; import org.depromeet.spot.domain.team.BaseballTeam; import org.depromeet.spot.usecase.port.in.team.CreateBaseballTeamUsecase; +import org.depromeet.spot.usecase.port.in.team.CreateHomeTeamUsecase; import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -26,6 +30,7 @@ public class CreateBaseballTeamController { private final CreateBaseballTeamUsecase createBaseballTeamUsecase; + private final CreateHomeTeamUsecase createHomeTeamUsecase; @PostMapping("/baseball-teams") @ResponseStatus(HttpStatus.CREATED) @@ -34,4 +39,13 @@ public void create(@RequestBody @Valid @NotEmpty List req List teams = requests.stream().map(CreateBaseballTeamReq::toDomain).toList(); createBaseballTeamUsecase.saveAll(teams); } + + @PostMapping("/stadiums/{stadiumId}/baseball-teams") + @ResponseStatus(HttpStatus.CREATED) + @Operation(summary = "특정 경기장에 홈 팀을 등록한다.") + public void createHomeTeam( + @PathVariable @Positive @NotNull final Long stadiumId, + @RequestBody @NotEmpty List<@Positive @NotNull Long> teamIds) { + createHomeTeamUsecase.createHomeTeam(stadiumId, teamIds); + } } diff --git a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamRepositoryImpl.java b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamRepositoryImpl.java index 13cb6db4..edc3319f 100644 --- a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamRepositoryImpl.java +++ b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamRepositoryImpl.java @@ -1,13 +1,9 @@ package org.depromeet.spot.jpa.team.repository; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; import org.depromeet.spot.common.exception.team.TeamException.BaseballTeamNotFoundException; -import org.depromeet.spot.domain.stadium.Stadium; import org.depromeet.spot.domain.team.BaseballTeam; -import org.depromeet.spot.jpa.stadium.entity.StadiumEntity; import org.depromeet.spot.jpa.team.entity.BaseballTeamEntity; import org.depromeet.spot.usecase.port.out.team.BaseballTeamRepository; import org.springframework.stereotype.Repository; @@ -18,7 +14,6 @@ @RequiredArgsConstructor public class BaseballTeamRepositoryImpl implements BaseballTeamRepository { - private final StadiumHomeTeamCustomRepository stadiumHomeTeamCustomRepository; private final BaseballTeamJpaRepository baseballTeamJpaRepository; private final BaseballTeamJdbcRepository baseballTeamJdbcRepository; @@ -37,37 +32,11 @@ public List findAll() { return entities.stream().map(BaseballTeamEntity::toDomain).toList(); } - @Override - public List findAllHomeTeamByStadium(final Long stadiumId) { - List homeTeamEntities = - stadiumHomeTeamCustomRepository.findAllHomeTeamByStadium(stadiumId); - return homeTeamEntities.stream().map(BaseballTeamEntity::toDomain).toList(); - } - - @Override - public Map> findAllStadiumHomeTeam() { - Map> stadiumHomeTeamMap = - stadiumHomeTeamCustomRepository.findAllStadiumHomeTeam(); - return stadiumHomeTeamMap.entrySet().stream() - .collect( - Collectors.toMap( - entry -> entry.getKey().toDomain(), - entry -> - entry.getValue().stream() - .map(BaseballTeamEntity::toDomain) - .toList())); - } - @Override public void saveAll(List teams) { baseballTeamJdbcRepository.createBaseballTeams(teams); } - @Override - public void createHomeTeam(Long stadiumId, List teamIds) { - // TODO: 홈 팀 등록할 때 구현 예정 - } - @Override public boolean existsByNameIn(List names) { return baseballTeamJpaRepository.existsByNameIn(names); diff --git a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/hometeam/HomeTeamRepositoryImpl.java b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/hometeam/HomeTeamRepositoryImpl.java new file mode 100644 index 00000000..4c21877c --- /dev/null +++ b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/hometeam/HomeTeamRepositoryImpl.java @@ -0,0 +1,42 @@ +package org.depromeet.spot.jpa.team.repository.hometeam; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.depromeet.spot.domain.stadium.Stadium; +import org.depromeet.spot.domain.team.BaseballTeam; +import org.depromeet.spot.jpa.stadium.entity.StadiumEntity; +import org.depromeet.spot.jpa.team.entity.BaseballTeamEntity; +import org.depromeet.spot.usecase.port.out.team.HomeTeamRepository; +import org.springframework.stereotype.Repository; + +import lombok.RequiredArgsConstructor; + +@Repository +@RequiredArgsConstructor +public class HomeTeamRepositoryImpl implements HomeTeamRepository { + + private final StadiumHomeTeamCustomRepository stadiumHomeTeamCustomRepository; + + @Override + public List findAllHomeTeamByStadium(final Long stadiumId) { + List homeTeamEntities = + stadiumHomeTeamCustomRepository.findAllHomeTeamByStadium(stadiumId); + return homeTeamEntities.stream().map(BaseballTeamEntity::toDomain).toList(); + } + + @Override + public Map> findAllStadiumHomeTeam() { + Map> stadiumHomeTeamMap = + stadiumHomeTeamCustomRepository.findAllStadiumHomeTeam(); + return stadiumHomeTeamMap.entrySet().stream() + .collect( + Collectors.toMap( + entry -> entry.getKey().toDomain(), + entry -> + entry.getValue().stream() + .map(BaseballTeamEntity::toDomain) + .toList())); + } +} diff --git a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/StadiumHomeTeamCustomRepository.java b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/hometeam/StadiumHomeTeamCustomRepository.java similarity index 96% rename from infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/StadiumHomeTeamCustomRepository.java rename to infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/hometeam/StadiumHomeTeamCustomRepository.java index de841ed5..5fa61daf 100644 --- a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/StadiumHomeTeamCustomRepository.java +++ b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/hometeam/StadiumHomeTeamCustomRepository.java @@ -1,4 +1,4 @@ -package org.depromeet.spot.jpa.team.repository; +package org.depromeet.spot.jpa.team.repository.hometeam; import static com.querydsl.core.group.GroupBy.groupBy; import static com.querydsl.core.group.GroupBy.list; diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/CreateHomeTeamUsecase.java b/usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/CreateHomeTeamUsecase.java new file mode 100644 index 00000000..2c3e5ae3 --- /dev/null +++ b/usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/CreateHomeTeamUsecase.java @@ -0,0 +1,8 @@ +package org.depromeet.spot.usecase.port.in.team; + +import java.util.List; + +public interface CreateHomeTeamUsecase { + + void createHomeTeam(Long stadiumId, List teamIds); +} diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/BaseballTeamRepository.java b/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/BaseballTeamRepository.java index f578e032..a3b6e644 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/BaseballTeamRepository.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/BaseballTeamRepository.java @@ -1,9 +1,7 @@ package org.depromeet.spot.usecase.port.out.team; import java.util.List; -import java.util.Map; -import org.depromeet.spot.domain.stadium.Stadium; import org.depromeet.spot.domain.team.BaseballTeam; public interface BaseballTeamRepository { @@ -11,13 +9,7 @@ public interface BaseballTeamRepository { List findAll(); - List findAllHomeTeamByStadium(Long stadiumId); - - Map> findAllStadiumHomeTeam(); - void saveAll(List teams); - void createHomeTeam(Long stadiumId, List teamIds); - boolean existsByNameIn(List names); } diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/HomeTeamRepository.java b/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/HomeTeamRepository.java new file mode 100644 index 00000000..bb721f59 --- /dev/null +++ b/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/HomeTeamRepository.java @@ -0,0 +1,14 @@ +package org.depromeet.spot.usecase.port.out.team; + +import java.util.List; +import java.util.Map; + +import org.depromeet.spot.domain.stadium.Stadium; +import org.depromeet.spot.domain.team.BaseballTeam; + +public interface HomeTeamRepository { + + List findAllHomeTeamByStadium(Long stadiumId); + + Map> findAllStadiumHomeTeam(); +} diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/service/team/CreateHomeTeamService.java b/usecase/src/main/java/org/depromeet/spot/usecase/service/team/CreateHomeTeamService.java new file mode 100644 index 00000000..c499b29e --- /dev/null +++ b/usecase/src/main/java/org/depromeet/spot/usecase/service/team/CreateHomeTeamService.java @@ -0,0 +1,19 @@ +package org.depromeet.spot.usecase.service.team; + +import java.util.List; + +import org.depromeet.spot.usecase.port.in.team.CreateHomeTeamUsecase; +import org.depromeet.spot.usecase.port.out.team.HomeTeamRepository; +import org.springframework.stereotype.Service; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class CreateHomeTeamService implements CreateHomeTeamUsecase { + + private final HomeTeamRepository homeTeamRepository; + + @Override + public void createHomeTeam(Long stadiumId, List teamIds) {} +} diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/service/team/ReadStadiumHomeTeamService.java b/usecase/src/main/java/org/depromeet/spot/usecase/service/team/ReadStadiumHomeTeamService.java index 1ad2dbc4..da12d596 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/service/team/ReadStadiumHomeTeamService.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/service/team/ReadStadiumHomeTeamService.java @@ -6,7 +6,7 @@ import org.depromeet.spot.domain.stadium.Stadium; import org.depromeet.spot.domain.team.BaseballTeam; import org.depromeet.spot.usecase.port.in.team.ReadStadiumHomeTeamUsecase; -import org.depromeet.spot.usecase.port.out.team.BaseballTeamRepository; +import org.depromeet.spot.usecase.port.out.team.HomeTeamRepository; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; @@ -15,11 +15,11 @@ @RequiredArgsConstructor public class ReadStadiumHomeTeamService implements ReadStadiumHomeTeamUsecase { - private final BaseballTeamRepository baseballTeamRepository; + private final HomeTeamRepository homeTeamRepository; @Override public List findByStadium(final Long stadiumId) { - List teams = baseballTeamRepository.findAllHomeTeamByStadium(stadiumId); + List teams = homeTeamRepository.findAllHomeTeamByStadium(stadiumId); return teams.stream() .map(t -> new HomeTeamInfo(t.getId(), t.getAlias(), t.getLabelRgbCode())) .toList(); @@ -27,6 +27,6 @@ public List findByStadium(final Long stadiumId) { @Override public Map> findAllStadiumHomeTeam() { - return baseballTeamRepository.findAllStadiumHomeTeam(); + return homeTeamRepository.findAllStadiumHomeTeam(); } } diff --git a/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeBaseballTeamRepository.java b/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeBaseballTeamRepository.java index 5db0b739..a79df35b 100644 --- a/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeBaseballTeamRepository.java +++ b/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeBaseballTeamRepository.java @@ -2,16 +2,12 @@ import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.concurrent.atomic.AtomicLong; -import java.util.stream.Collectors; import org.depromeet.spot.common.exception.team.TeamException.BaseballTeamNotFoundException; -import org.depromeet.spot.domain.stadium.Stadium; import org.depromeet.spot.domain.team.BaseballTeam; import org.depromeet.spot.usecase.port.out.team.BaseballTeamRepository; @@ -19,8 +15,6 @@ public class FakeBaseballTeamRepository implements BaseballTeamRepository { private final AtomicLong autoGeneratedId = new AtomicLong(0); private final List data = Collections.synchronizedList(new ArrayList<>()); - private final Map> homeTeamMap = - Collections.synchronizedMap(new HashMap<>()); @Override public BaseballTeam findById(Long id) { @@ -36,19 +30,6 @@ public List findAll() { return data; } - @Override - public List findAllHomeTeamByStadium(Long stadiumId) { - return homeTeamMap.entrySet().stream() - .filter(entry -> stadiumId.equals(entry.getKey().getId())) - .flatMap(entry -> entry.getValue().stream()) - .collect(Collectors.toList()); - } - - @Override - public Map> findAllStadiumHomeTeam() { - return homeTeamMap; - } - public BaseballTeam save(BaseballTeam team) { if (team.getId() == null || team.getId() == 0) { BaseballTeam newTeam = @@ -73,21 +54,6 @@ public void saveAll(List teams) { teams.forEach(this::save); } - @Override - public void createHomeTeam(Long stadiumId, List teamIds) { - Stadium stadium = Stadium.builder().id(stadiumId).build(); - List newTeams = - teamIds.stream().map(t -> BaseballTeam.builder().id(t).build()).toList(); - - homeTeamMap.merge( - stadium, - newTeams, - (existingTeams, teams) -> { - existingTeams.addAll(teams); - return existingTeams; - }); - } - @Override public boolean existsByNameIn(List names) { return data.stream().map(BaseballTeam::getName).anyMatch(names::contains); diff --git a/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeHomeTeamRepository.java b/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeHomeTeamRepository.java new file mode 100644 index 00000000..ef891edb --- /dev/null +++ b/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeHomeTeamRepository.java @@ -0,0 +1,33 @@ +package org.depromeet.spot.usecase.service.fake; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.Collectors; + +import org.depromeet.spot.domain.stadium.Stadium; +import org.depromeet.spot.domain.team.BaseballTeam; +import org.depromeet.spot.usecase.port.out.team.HomeTeamRepository; + +public class FakeHomeTeamRepository implements HomeTeamRepository { + + private final AtomicLong autoGeneratedId = new AtomicLong(0); + + private final Map> homeTeamMap = + Collections.synchronizedMap(new HashMap<>()); + + @Override + public List findAllHomeTeamByStadium(Long stadiumId) { + return homeTeamMap.entrySet().stream() + .filter(entry -> stadiumId.equals(entry.getKey().getId())) + .flatMap(entry -> entry.getValue().stream()) + .collect(Collectors.toList()); + } + + @Override + public Map> findAllStadiumHomeTeam() { + return homeTeamMap; + } +} From b3c118da152a3dee3dc6cc1727ef16d6987a046f Mon Sep 17 00:00:00 2001 From: EunjiShin Date: Thu, 18 Jul 2024 00:32:12 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20=ED=99=88=20=ED=8C=80=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../team/CreateBaseballTeamController.java | 5 ++-- .../spot/domain/team/StadiumHomeTeam.java | 2 ++ .../repository/BaseballTeamJpaRepository.java | 3 +++ .../BaseballTeamRepositoryImpl.java | 6 +++++ .../hometeam/HomeTeamJpaRepository.java | 6 +++++ .../hometeam/HomeTeamRepositoryImpl.java | 10 +++++++ .../port/in/team/CreateHomeTeamUsecase.java | 4 +-- .../port/in/team/ReadBaseballTeamUsecase.java | 5 ++++ .../port/out/team/BaseballTeamRepository.java | 3 +++ .../port/out/team/HomeTeamRepository.java | 3 +++ .../service/team/CreateHomeTeamService.java | 21 ++++++++++++++- .../service/team/ReadBaseballTeamService.java | 14 ++++++++++ .../service/fake/FakeHomeTeamRepository.java | 26 +++++++++++++++++++ 13 files changed, 103 insertions(+), 5 deletions(-) create mode 100644 infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/hometeam/HomeTeamJpaRepository.java diff --git a/application/src/main/java/org/depromeet/spot/application/team/CreateBaseballTeamController.java b/application/src/main/java/org/depromeet/spot/application/team/CreateBaseballTeamController.java index 78688527..b14a5e22 100644 --- a/application/src/main/java/org/depromeet/spot/application/team/CreateBaseballTeamController.java +++ b/application/src/main/java/org/depromeet/spot/application/team/CreateBaseballTeamController.java @@ -1,6 +1,7 @@ package org.depromeet.spot.application.team; import java.util.List; +import java.util.Set; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; @@ -45,7 +46,7 @@ public void create(@RequestBody @Valid @NotEmpty List req @Operation(summary = "특정 경기장에 홈 팀을 등록한다.") public void createHomeTeam( @PathVariable @Positive @NotNull final Long stadiumId, - @RequestBody @NotEmpty List<@Positive @NotNull Long> teamIds) { - createHomeTeamUsecase.createHomeTeam(stadiumId, teamIds); + @RequestBody @NotEmpty Set<@Positive @NotNull Long> teamIds) { + createHomeTeamUsecase.createHomeTeams(stadiumId, teamIds); } } diff --git a/domain/src/main/java/org/depromeet/spot/domain/team/StadiumHomeTeam.java b/domain/src/main/java/org/depromeet/spot/domain/team/StadiumHomeTeam.java index 885de611..637f6069 100644 --- a/domain/src/main/java/org/depromeet/spot/domain/team/StadiumHomeTeam.java +++ b/domain/src/main/java/org/depromeet/spot/domain/team/StadiumHomeTeam.java @@ -1,9 +1,11 @@ package org.depromeet.spot.domain.team; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; @Getter +@Builder @AllArgsConstructor public class StadiumHomeTeam { diff --git a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamJpaRepository.java b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamJpaRepository.java index 242c3837..90550903 100644 --- a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamJpaRepository.java +++ b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamJpaRepository.java @@ -1,10 +1,13 @@ package org.depromeet.spot.jpa.team.repository; import java.util.List; +import java.util.Set; import org.depromeet.spot.jpa.team.entity.BaseballTeamEntity; import org.springframework.data.jpa.repository.JpaRepository; public interface BaseballTeamJpaRepository extends JpaRepository { boolean existsByNameIn(List names); + + boolean existsByIdIn(Set ids); } diff --git a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamRepositoryImpl.java b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamRepositoryImpl.java index edc3319f..ded63328 100644 --- a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamRepositoryImpl.java +++ b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamRepositoryImpl.java @@ -1,6 +1,7 @@ package org.depromeet.spot.jpa.team.repository; import java.util.List; +import java.util.Set; import org.depromeet.spot.common.exception.team.TeamException.BaseballTeamNotFoundException; import org.depromeet.spot.domain.team.BaseballTeam; @@ -41,4 +42,9 @@ public void saveAll(List teams) { public boolean existsByNameIn(List names) { return baseballTeamJpaRepository.existsByNameIn(names); } + + @Override + public boolean existsByIdIn(Set ids) { + return baseballTeamJpaRepository.existsByIdIn(ids); + } } diff --git a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/hometeam/HomeTeamJpaRepository.java b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/hometeam/HomeTeamJpaRepository.java new file mode 100644 index 00000000..5bb24b61 --- /dev/null +++ b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/hometeam/HomeTeamJpaRepository.java @@ -0,0 +1,6 @@ +package org.depromeet.spot.jpa.team.repository.hometeam; + +import org.depromeet.spot.jpa.team.entity.StadiumHomeTeamEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface HomeTeamJpaRepository extends JpaRepository {} diff --git a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/hometeam/HomeTeamRepositoryImpl.java b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/hometeam/HomeTeamRepositoryImpl.java index 4c21877c..d874e85b 100644 --- a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/hometeam/HomeTeamRepositoryImpl.java +++ b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/hometeam/HomeTeamRepositoryImpl.java @@ -6,8 +6,10 @@ import org.depromeet.spot.domain.stadium.Stadium; import org.depromeet.spot.domain.team.BaseballTeam; +import org.depromeet.spot.domain.team.StadiumHomeTeam; import org.depromeet.spot.jpa.stadium.entity.StadiumEntity; import org.depromeet.spot.jpa.team.entity.BaseballTeamEntity; +import org.depromeet.spot.jpa.team.entity.StadiumHomeTeamEntity; import org.depromeet.spot.usecase.port.out.team.HomeTeamRepository; import org.springframework.stereotype.Repository; @@ -18,6 +20,7 @@ public class HomeTeamRepositoryImpl implements HomeTeamRepository { private final StadiumHomeTeamCustomRepository stadiumHomeTeamCustomRepository; + private final HomeTeamJpaRepository homeTeamJpaRepository; @Override public List findAllHomeTeamByStadium(final Long stadiumId) { @@ -39,4 +42,11 @@ public Map> findAllStadiumHomeTeam() { .map(BaseballTeamEntity::toDomain) .toList())); } + + @Override + public void saveAll(List homeTeams) { + List entities = + homeTeams.stream().map(StadiumHomeTeamEntity::from).toList(); + homeTeamJpaRepository.saveAll(entities); + } } diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/CreateHomeTeamUsecase.java b/usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/CreateHomeTeamUsecase.java index 2c3e5ae3..c813db08 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/CreateHomeTeamUsecase.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/CreateHomeTeamUsecase.java @@ -1,8 +1,8 @@ package org.depromeet.spot.usecase.port.in.team; -import java.util.List; +import java.util.Set; public interface CreateHomeTeamUsecase { - void createHomeTeam(Long stadiumId, List teamIds); + void createHomeTeams(Long stadiumId, Set teamIds); } diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/ReadBaseballTeamUsecase.java b/usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/ReadBaseballTeamUsecase.java index 700045de..2f84b490 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/ReadBaseballTeamUsecase.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/ReadBaseballTeamUsecase.java @@ -1,10 +1,15 @@ package org.depromeet.spot.usecase.port.in.team; import java.util.List; +import java.util.Set; import org.depromeet.spot.domain.team.BaseballTeam; public interface ReadBaseballTeamUsecase { + BaseballTeam findById(Long id); + List findAll(); + + void checkExistsBy(Set teamIds); } diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/BaseballTeamRepository.java b/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/BaseballTeamRepository.java index a3b6e644..ed2416a4 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/BaseballTeamRepository.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/BaseballTeamRepository.java @@ -1,6 +1,7 @@ package org.depromeet.spot.usecase.port.out.team; import java.util.List; +import java.util.Set; import org.depromeet.spot.domain.team.BaseballTeam; @@ -12,4 +13,6 @@ public interface BaseballTeamRepository { void saveAll(List teams); boolean existsByNameIn(List names); + + boolean existsByIdIn(Set ids); } diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/HomeTeamRepository.java b/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/HomeTeamRepository.java index bb721f59..9ea81ecc 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/HomeTeamRepository.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/HomeTeamRepository.java @@ -5,10 +5,13 @@ import org.depromeet.spot.domain.stadium.Stadium; import org.depromeet.spot.domain.team.BaseballTeam; +import org.depromeet.spot.domain.team.StadiumHomeTeam; public interface HomeTeamRepository { List findAllHomeTeamByStadium(Long stadiumId); Map> findAllStadiumHomeTeam(); + + void saveAll(List homeTeams); } diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/service/team/CreateHomeTeamService.java b/usecase/src/main/java/org/depromeet/spot/usecase/service/team/CreateHomeTeamService.java index c499b29e..4c77e328 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/service/team/CreateHomeTeamService.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/service/team/CreateHomeTeamService.java @@ -1,8 +1,13 @@ package org.depromeet.spot.usecase.service.team; +import java.util.ArrayList; import java.util.List; +import java.util.Set; +import org.depromeet.spot.domain.team.StadiumHomeTeam; +import org.depromeet.spot.usecase.port.in.stadium.StadiumReadUsecase; import org.depromeet.spot.usecase.port.in.team.CreateHomeTeamUsecase; +import org.depromeet.spot.usecase.port.in.team.ReadBaseballTeamUsecase; import org.depromeet.spot.usecase.port.out.team.HomeTeamRepository; import org.springframework.stereotype.Service; @@ -13,7 +18,21 @@ public class CreateHomeTeamService implements CreateHomeTeamUsecase { private final HomeTeamRepository homeTeamRepository; + private final StadiumReadUsecase stadiumReadUsecase; + private final ReadBaseballTeamUsecase readBaseballTeamUsecase; @Override - public void createHomeTeam(Long stadiumId, List teamIds) {} + public void createHomeTeams(final Long stadiumId, Set teamIds) { + stadiumReadUsecase.checkIsExistsBy(stadiumId); + readBaseballTeamUsecase.checkExistsBy(teamIds); + List homeTeams = new ArrayList<>(); + teamIds.forEach( + teamId -> + homeTeams.add( + StadiumHomeTeam.builder() + .stadiumId(stadiumId) + .teamId(teamId) + .build())); + homeTeamRepository.saveAll(homeTeams); + } } diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/service/team/ReadBaseballTeamService.java b/usecase/src/main/java/org/depromeet/spot/usecase/service/team/ReadBaseballTeamService.java index c7e69932..5ffd77b2 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/service/team/ReadBaseballTeamService.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/service/team/ReadBaseballTeamService.java @@ -1,7 +1,9 @@ package org.depromeet.spot.usecase.service.team; import java.util.List; +import java.util.Set; +import org.depromeet.spot.common.exception.team.TeamException.BaseballTeamNotFoundException; import org.depromeet.spot.domain.team.BaseballTeam; import org.depromeet.spot.usecase.port.in.team.ReadBaseballTeamUsecase; import org.depromeet.spot.usecase.port.out.team.BaseballTeamRepository; @@ -17,8 +19,20 @@ public class ReadBaseballTeamService implements ReadBaseballTeamUsecase { private final BaseballTeamRepository baseballTeamRepository; + @Override + public BaseballTeam findById(final Long id) { + return baseballTeamRepository.findById(id); + } + @Override public List findAll() { return baseballTeamRepository.findAll(); } + + @Override + public void checkExistsBy(Set teamIds) { + if (!baseballTeamRepository.existsByIdIn(teamIds)) { + throw new BaseballTeamNotFoundException(); + } + } } diff --git a/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeHomeTeamRepository.java b/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeHomeTeamRepository.java index ef891edb..4e331a95 100644 --- a/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeHomeTeamRepository.java +++ b/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeHomeTeamRepository.java @@ -1,19 +1,23 @@ package org.depromeet.spot.usecase.service.fake; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Collectors; import org.depromeet.spot.domain.stadium.Stadium; import org.depromeet.spot.domain.team.BaseballTeam; +import org.depromeet.spot.domain.team.StadiumHomeTeam; import org.depromeet.spot.usecase.port.out.team.HomeTeamRepository; public class FakeHomeTeamRepository implements HomeTeamRepository { private final AtomicLong autoGeneratedId = new AtomicLong(0); + private final List data = Collections.synchronizedList(new ArrayList<>()); private final Map> homeTeamMap = Collections.synchronizedMap(new HashMap<>()); @@ -30,4 +34,26 @@ public List findAllHomeTeamByStadium(Long stadiumId) { public Map> findAllStadiumHomeTeam() { return homeTeamMap; } + + @Override + public void saveAll(List homeTeams) { + homeTeams.forEach(this::save); + } + + private StadiumHomeTeam save(StadiumHomeTeam homeTeam) { + if (homeTeam.getId() == null || homeTeam.getId() == 0) { + StadiumHomeTeam newHomeTeam = + StadiumHomeTeam.builder() + .id(autoGeneratedId.incrementAndGet()) + .stadiumId(homeTeam.getStadiumId()) + .teamId(homeTeam.getTeamId()) + .build(); + data.add(newHomeTeam); + return newHomeTeam; + } else { + data.removeIf(item -> Objects.equals(item.getId(), homeTeam.getId())); + data.add(homeTeam); + return homeTeam; + } + } } From 130c340827e378c3afe8e7528543037ef69fd53b Mon Sep 17 00:00:00 2001 From: EunjiShin Date: Thu, 18 Jul 2024 00:33:45 +0900 Subject: [PATCH 3/5] =?UTF-8?q?fix:=20=EA=B9=A8=EC=A7=84=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../usecase/service/fake/FakeBaseballTeamRepository.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeBaseballTeamRepository.java b/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeBaseballTeamRepository.java index a79df35b..e23d7e40 100644 --- a/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeBaseballTeamRepository.java +++ b/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeBaseballTeamRepository.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.Set; import java.util.concurrent.atomic.AtomicLong; import org.depromeet.spot.common.exception.team.TeamException.BaseballTeamNotFoundException; @@ -58,4 +59,9 @@ public void saveAll(List teams) { public boolean existsByNameIn(List names) { return data.stream().map(BaseballTeam::getName).anyMatch(names::contains); } + + @Override + public boolean existsByIdIn(Set ids) { + return data.stream().map(BaseballTeam::getId).anyMatch(ids::contains); + } } From 83855f7f2089a0697bedaf924745859a76384662 Mon Sep 17 00:00:00 2001 From: EunjiShin Date: Thu, 18 Jul 2024 00:42:50 +0900 Subject: [PATCH 4/5] =?UTF-8?q?fix:=20request=20body=20class=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/team/CreateBaseballTeamController.java | 6 +++--- .../application/team/dto/request/CreateHomeTeamReq.java | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 application/src/main/java/org/depromeet/spot/application/team/dto/request/CreateHomeTeamReq.java diff --git a/application/src/main/java/org/depromeet/spot/application/team/CreateBaseballTeamController.java b/application/src/main/java/org/depromeet/spot/application/team/CreateBaseballTeamController.java index b14a5e22..b6029092 100644 --- a/application/src/main/java/org/depromeet/spot/application/team/CreateBaseballTeamController.java +++ b/application/src/main/java/org/depromeet/spot/application/team/CreateBaseballTeamController.java @@ -1,7 +1,6 @@ package org.depromeet.spot.application.team; import java.util.List; -import java.util.Set; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; @@ -9,6 +8,7 @@ import jakarta.validation.constraints.Positive; import org.depromeet.spot.application.team.dto.request.CreateBaseballTeamReq; +import org.depromeet.spot.application.team.dto.request.CreateHomeTeamReq; import org.depromeet.spot.domain.team.BaseballTeam; import org.depromeet.spot.usecase.port.in.team.CreateBaseballTeamUsecase; import org.depromeet.spot.usecase.port.in.team.CreateHomeTeamUsecase; @@ -46,7 +46,7 @@ public void create(@RequestBody @Valid @NotEmpty List req @Operation(summary = "특정 경기장에 홈 팀을 등록한다.") public void createHomeTeam( @PathVariable @Positive @NotNull final Long stadiumId, - @RequestBody @NotEmpty Set<@Positive @NotNull Long> teamIds) { - createHomeTeamUsecase.createHomeTeams(stadiumId, teamIds); + @RequestBody @Valid CreateHomeTeamReq req) { + createHomeTeamUsecase.createHomeTeams(stadiumId, req.teamIds()); } } diff --git a/application/src/main/java/org/depromeet/spot/application/team/dto/request/CreateHomeTeamReq.java b/application/src/main/java/org/depromeet/spot/application/team/dto/request/CreateHomeTeamReq.java new file mode 100644 index 00000000..5fa1c8b4 --- /dev/null +++ b/application/src/main/java/org/depromeet/spot/application/team/dto/request/CreateHomeTeamReq.java @@ -0,0 +1,9 @@ +package org.depromeet.spot.application.team.dto.request; + +import java.util.Set; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; + +public record CreateHomeTeamReq(@NotEmpty @NotNull Set<@Positive @NotNull Long> teamIds) {} From a173f5c826bdcedda7b46e65b9780737ade8360b Mon Sep 17 00:00:00 2001 From: EunjiShin Date: Thu, 18 Jul 2024 00:59:23 +0900 Subject: [PATCH 5/5] =?UTF-8?q?fix:=20=ED=8C=80=20=EC=A1=B4=EC=9E=AC=20?= =?UTF-8?q?=EC=97=AC=EB=B6=80=20=ED=99=95=EC=9D=B8=20=EC=BF=BC=EB=A6=AC=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 --- .../spot/common/exception/team/TeamException.java | 4 ++++ .../jpa/team/repository/BaseballTeamJpaRepository.java | 3 +-- .../jpa/team/repository/BaseballTeamRepositoryImpl.java | 5 ++--- .../usecase/port/in/team/ReadBaseballTeamUsecase.java | 2 +- .../usecase/port/out/team/BaseballTeamRepository.java | 3 +-- .../spot/usecase/service/team/CreateHomeTeamService.java | 2 +- .../usecase/service/team/ReadBaseballTeamService.java | 8 +++++--- .../usecase/service/fake/FakeBaseballTeamRepository.java | 5 ++--- 8 files changed, 17 insertions(+), 15 deletions(-) diff --git a/common/src/main/java/org/depromeet/spot/common/exception/team/TeamException.java b/common/src/main/java/org/depromeet/spot/common/exception/team/TeamException.java index b217581e..8944a31e 100644 --- a/common/src/main/java/org/depromeet/spot/common/exception/team/TeamException.java +++ b/common/src/main/java/org/depromeet/spot/common/exception/team/TeamException.java @@ -12,6 +12,10 @@ public static class BaseballTeamNotFoundException extends TeamException { public BaseballTeamNotFoundException() { super(TeamErrorCode.BASEBALL_TEAM_NOT_FOUND); } + + public BaseballTeamNotFoundException(Long id) { + super(TeamErrorCode.BASEBALL_TEAM_NOT_FOUND.appended(" : " + id)); + } } public static class InvalidBaseballTeamNameException extends TeamException { diff --git a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamJpaRepository.java b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamJpaRepository.java index 90550903..1a1f2cb1 100644 --- a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamJpaRepository.java +++ b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamJpaRepository.java @@ -1,7 +1,6 @@ package org.depromeet.spot.jpa.team.repository; import java.util.List; -import java.util.Set; import org.depromeet.spot.jpa.team.entity.BaseballTeamEntity; import org.springframework.data.jpa.repository.JpaRepository; @@ -9,5 +8,5 @@ public interface BaseballTeamJpaRepository extends JpaRepository { boolean existsByNameIn(List names); - boolean existsByIdIn(Set ids); + boolean existsById(Long teamId); } diff --git a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamRepositoryImpl.java b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamRepositoryImpl.java index ded63328..e323c7ea 100644 --- a/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamRepositoryImpl.java +++ b/infrastructure/jpa/src/main/java/org/depromeet/spot/jpa/team/repository/BaseballTeamRepositoryImpl.java @@ -1,7 +1,6 @@ package org.depromeet.spot.jpa.team.repository; import java.util.List; -import java.util.Set; import org.depromeet.spot.common.exception.team.TeamException.BaseballTeamNotFoundException; import org.depromeet.spot.domain.team.BaseballTeam; @@ -44,7 +43,7 @@ public boolean existsByNameIn(List names) { } @Override - public boolean existsByIdIn(Set ids) { - return baseballTeamJpaRepository.existsByIdIn(ids); + public boolean existsById(Long id) { + return baseballTeamJpaRepository.existsById(id); } } diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/ReadBaseballTeamUsecase.java b/usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/ReadBaseballTeamUsecase.java index 2f84b490..ffa2cbaf 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/ReadBaseballTeamUsecase.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/port/in/team/ReadBaseballTeamUsecase.java @@ -11,5 +11,5 @@ public interface ReadBaseballTeamUsecase { List findAll(); - void checkExistsBy(Set teamIds); + void areAllTeamIdsExist(Set teamIds); } diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/BaseballTeamRepository.java b/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/BaseballTeamRepository.java index ed2416a4..318f93d7 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/BaseballTeamRepository.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/port/out/team/BaseballTeamRepository.java @@ -1,7 +1,6 @@ package org.depromeet.spot.usecase.port.out.team; import java.util.List; -import java.util.Set; import org.depromeet.spot.domain.team.BaseballTeam; @@ -14,5 +13,5 @@ public interface BaseballTeamRepository { boolean existsByNameIn(List names); - boolean existsByIdIn(Set ids); + boolean existsById(Long id); } diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/service/team/CreateHomeTeamService.java b/usecase/src/main/java/org/depromeet/spot/usecase/service/team/CreateHomeTeamService.java index 4c77e328..c47ef649 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/service/team/CreateHomeTeamService.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/service/team/CreateHomeTeamService.java @@ -24,7 +24,7 @@ public class CreateHomeTeamService implements CreateHomeTeamUsecase { @Override public void createHomeTeams(final Long stadiumId, Set teamIds) { stadiumReadUsecase.checkIsExistsBy(stadiumId); - readBaseballTeamUsecase.checkExistsBy(teamIds); + readBaseballTeamUsecase.areAllTeamIdsExist(teamIds); List homeTeams = new ArrayList<>(); teamIds.forEach( teamId -> diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/service/team/ReadBaseballTeamService.java b/usecase/src/main/java/org/depromeet/spot/usecase/service/team/ReadBaseballTeamService.java index 5ffd77b2..96bdabb4 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/service/team/ReadBaseballTeamService.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/service/team/ReadBaseballTeamService.java @@ -30,9 +30,11 @@ public List findAll() { } @Override - public void checkExistsBy(Set teamIds) { - if (!baseballTeamRepository.existsByIdIn(teamIds)) { - throw new BaseballTeamNotFoundException(); + public void areAllTeamIdsExist(Set teamIds) { + for (Long teamId : teamIds) { + if (!baseballTeamRepository.existsById(teamId)) { + throw new BaseballTeamNotFoundException(teamId); + } } } } diff --git a/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeBaseballTeamRepository.java b/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeBaseballTeamRepository.java index e23d7e40..15d5299c 100644 --- a/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeBaseballTeamRepository.java +++ b/usecase/src/test/java/org/depromeet/spot/usecase/service/fake/FakeBaseballTeamRepository.java @@ -5,7 +5,6 @@ import java.util.List; import java.util.Objects; import java.util.Optional; -import java.util.Set; import java.util.concurrent.atomic.AtomicLong; import org.depromeet.spot.common.exception.team.TeamException.BaseballTeamNotFoundException; @@ -61,7 +60,7 @@ public boolean existsByNameIn(List names) { } @Override - public boolean existsByIdIn(Set ids) { - return data.stream().map(BaseballTeam::getId).anyMatch(ids::contains); + public boolean existsById(Long id) { + return data.stream().anyMatch(team -> team.getId().equals(id)); } }