diff --git a/src/main/java/com/seong/shoutlink/domain/auth/controller/AuthController.java b/src/main/java/com/seong/shoutlink/domain/auth/controller/AuthController.java index e538a1d..63f2cb1 100644 --- a/src/main/java/com/seong/shoutlink/domain/auth/controller/AuthController.java +++ b/src/main/java/com/seong/shoutlink/domain/auth/controller/AuthController.java @@ -3,7 +3,7 @@ import com.seong.shoutlink.domain.auth.controller.request.CreateMemberRequest; import com.seong.shoutlink.domain.auth.controller.request.LoginRequest; import com.seong.shoutlink.domain.auth.controller.response.LoginApiResponse; -import com.seong.shoutlink.domain.auth.service.AuthService; +import com.seong.shoutlink.domain.auth.service.AuthUseCase; import com.seong.shoutlink.domain.auth.service.request.CreateMemberCommand; import com.seong.shoutlink.domain.auth.service.request.LoginCommand; import com.seong.shoutlink.domain.auth.service.response.CreateMemberResponse; @@ -24,12 +24,12 @@ @RequiredArgsConstructor public class AuthController { - private final AuthService authService; + private final AuthUseCase authUseCase; @PostMapping("/members") public ResponseEntity createMember( @Valid @RequestBody CreateMemberRequest request) { - CreateMemberResponse response = authService.createMember(new CreateMemberCommand( + CreateMemberResponse response = authUseCase.createMember(new CreateMemberCommand( request.email(), request.password(), request.nickname() @@ -41,7 +41,7 @@ public ResponseEntity createMember( public ResponseEntity login( @Valid @RequestBody LoginRequest request, HttpServletResponse res) { - LoginResponse response = authService.login(new LoginCommand( + LoginResponse response = authUseCase.login(new LoginCommand( request.email(), request.password() )); diff --git a/src/main/java/com/seong/shoutlink/domain/auth/service/AuthService.java b/src/main/java/com/seong/shoutlink/domain/auth/service/AuthService.java index f6d11c6..6e865eb 100644 --- a/src/main/java/com/seong/shoutlink/domain/auth/service/AuthService.java +++ b/src/main/java/com/seong/shoutlink/domain/auth/service/AuthService.java @@ -21,7 +21,7 @@ @Service @RequiredArgsConstructor -public class AuthService { +public class AuthService implements AuthUseCase { private static final Pattern PASSWORD_PATTEN = Pattern.compile( "^(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%^&*]).{8,20}$"); @@ -38,6 +38,7 @@ private void validatePassword(CreateMemberCommand command) { } } + @Override @Transactional public CreateMemberResponse createMember(CreateMemberCommand command) { validatePassword(command); @@ -59,6 +60,7 @@ public CreateMemberResponse createMember(CreateMemberCommand command) { return new CreateMemberResponse(memberId); } + @Override public LoginResponse login(LoginCommand command) { Member member = memberRepository.findByEmail(command.email()) .orElseThrow(() -> new ShoutLinkException( diff --git a/src/main/java/com/seong/shoutlink/domain/auth/service/AuthUseCase.java b/src/main/java/com/seong/shoutlink/domain/auth/service/AuthUseCase.java new file mode 100644 index 0000000..290bdda --- /dev/null +++ b/src/main/java/com/seong/shoutlink/domain/auth/service/AuthUseCase.java @@ -0,0 +1,13 @@ +package com.seong.shoutlink.domain.auth.service; + +import com.seong.shoutlink.domain.auth.service.request.CreateMemberCommand; +import com.seong.shoutlink.domain.auth.service.request.LoginCommand; +import com.seong.shoutlink.domain.auth.service.response.CreateMemberResponse; +import com.seong.shoutlink.domain.auth.service.response.LoginResponse; + +public interface AuthUseCase { + + CreateMemberResponse createMember(CreateMemberCommand command); + + LoginResponse login(LoginCommand command); +} diff --git a/src/main/java/com/seong/shoutlink/domain/domain/controller/DomainController.java b/src/main/java/com/seong/shoutlink/domain/domain/controller/DomainController.java index 8fcceea..72de436 100644 --- a/src/main/java/com/seong/shoutlink/domain/domain/controller/DomainController.java +++ b/src/main/java/com/seong/shoutlink/domain/domain/controller/DomainController.java @@ -3,7 +3,7 @@ import com.seong.shoutlink.domain.domain.controller.request.FindDomainLinksRequest; import com.seong.shoutlink.domain.domain.controller.request.FindDomainsRequest; import com.seong.shoutlink.domain.domain.controller.request.FindRootDomainsRequest; -import com.seong.shoutlink.domain.domain.service.DomainService; +import com.seong.shoutlink.domain.domain.service.DomainUseCase; import com.seong.shoutlink.domain.domain.service.request.FindDomainCommand; import com.seong.shoutlink.domain.domain.service.request.FindDomainLinksCommand; import com.seong.shoutlink.domain.domain.service.request.FindDomainsCommand; @@ -26,12 +26,12 @@ @RequestMapping("/api/domains") public class DomainController { - private final DomainService domainService; + private final DomainUseCase domainUseCase; @GetMapping("/search") public ResponseEntity findRootDomains( @ModelAttribute @Valid FindRootDomainsRequest request) { - FindRootDomainsResponse response = domainService.findRootDomains( + FindRootDomainsResponse response = domainUseCase.findRootDomains( new FindRootDomainsCommand(request.keyword(), request.size())); return ResponseEntity.ok(response); } @@ -39,7 +39,7 @@ public ResponseEntity findRootDomains( @GetMapping public ResponseEntity findDomains( @ModelAttribute @Valid FindDomainsRequest request) { - FindDomainsResponse response = domainService.findDomains(new FindDomainsCommand( + FindDomainsResponse response = domainUseCase.findDomains(new FindDomainsCommand( request.keyword(), request.page(), request.size())); return ResponseEntity.ok(response); } @@ -48,7 +48,7 @@ public ResponseEntity findDomains( public ResponseEntity findDomain( @PathVariable("domainId") Long domainId) { FindDomainDetailResponse response - = domainService.findDomain(new FindDomainCommand(domainId)); + = domainUseCase.findDomain(new FindDomainCommand(domainId)); return ResponseEntity.ok(response); } @@ -56,7 +56,7 @@ public ResponseEntity findDomain( public ResponseEntity findDomainLinks( @PathVariable("domainId") Long domainId, @ModelAttribute @Valid FindDomainLinksRequest request) { - FindDomainLinksResponse response = domainService.findDomainLinks( + FindDomainLinksResponse response = domainUseCase.findDomainLinks( new FindDomainLinksCommand(domainId, request.page(), request.size())); return ResponseEntity.ok(response); } diff --git a/src/main/java/com/seong/shoutlink/domain/domain/service/DomainService.java b/src/main/java/com/seong/shoutlink/domain/domain/service/DomainService.java index 3699550..bd73248 100644 --- a/src/main/java/com/seong/shoutlink/domain/domain/service/DomainService.java +++ b/src/main/java/com/seong/shoutlink/domain/domain/service/DomainService.java @@ -27,11 +27,12 @@ @Slf4j @Service @RequiredArgsConstructor -public class DomainService { +public class DomainService implements DomainUseCase { private final DomainRepository domainRepository; private final LinkRepository linkRepository; + @Override @Transactional public UpdateDomainResponse updateDomain(UpdateDomainCommand command) { String rootDomain = DomainExtractor.extractRootDomain(command.url()); @@ -46,23 +47,27 @@ public UpdateDomainResponse updateDomain(UpdateDomainCommand command) { return new UpdateDomainResponse(domain.getDomainId()); } + @Override public FindRootDomainsResponse findRootDomains(FindRootDomainsCommand command) { List rootDomains = domainRepository.findRootDomains(command.keyword(), command.size()); return FindRootDomainsResponse.from(rootDomains); } + @Override public FindDomainsResponse findDomains(FindDomainsCommand command) { DomainPaginationResult result = domainRepository.findDomains(command.keyword(), command.page(), command.size()); return FindDomainsResponse.of(result.domains(), result.totalElements(), result.hasNext()); } + @Override public FindDomainDetailResponse findDomain(FindDomainCommand command) { Domain domain = getDomain(command.domainId()); return FindDomainDetailResponse.from(domain); } + @Override public FindDomainLinksResponse findDomainLinks(FindDomainLinksCommand command) { Domain domain = getDomain(command.domainId()); DomainLinkPaginationResult result diff --git a/src/main/java/com/seong/shoutlink/domain/domain/service/DomainUseCase.java b/src/main/java/com/seong/shoutlink/domain/domain/service/DomainUseCase.java new file mode 100644 index 0000000..2a2f901 --- /dev/null +++ b/src/main/java/com/seong/shoutlink/domain/domain/service/DomainUseCase.java @@ -0,0 +1,25 @@ +package com.seong.shoutlink.domain.domain.service; + +import com.seong.shoutlink.domain.domain.service.request.FindDomainCommand; +import com.seong.shoutlink.domain.domain.service.request.FindDomainLinksCommand; +import com.seong.shoutlink.domain.domain.service.request.FindDomainsCommand; +import com.seong.shoutlink.domain.domain.service.request.FindRootDomainsCommand; +import com.seong.shoutlink.domain.domain.service.request.UpdateDomainCommand; +import com.seong.shoutlink.domain.domain.service.response.FindDomainDetailResponse; +import com.seong.shoutlink.domain.domain.service.response.FindDomainLinksResponse; +import com.seong.shoutlink.domain.domain.service.response.FindDomainsResponse; +import com.seong.shoutlink.domain.domain.service.response.FindRootDomainsResponse; +import com.seong.shoutlink.domain.domain.service.response.UpdateDomainResponse; + +public interface DomainUseCase { + + UpdateDomainResponse updateDomain(UpdateDomainCommand command); + + FindRootDomainsResponse findRootDomains(FindRootDomainsCommand command); + + FindDomainsResponse findDomains(FindDomainsCommand command); + + FindDomainDetailResponse findDomain(FindDomainCommand command); + + FindDomainLinksResponse findDomainLinks(FindDomainLinksCommand command); +} diff --git a/src/main/java/com/seong/shoutlink/domain/hub/controller/HubController.java b/src/main/java/com/seong/shoutlink/domain/hub/controller/HubController.java index 0efef3f..c688553 100644 --- a/src/main/java/com/seong/shoutlink/domain/hub/controller/HubController.java +++ b/src/main/java/com/seong/shoutlink/domain/hub/controller/HubController.java @@ -3,7 +3,7 @@ import com.seong.shoutlink.domain.auth.LoginUser; import com.seong.shoutlink.domain.hub.controller.request.CreateHubRequest; import com.seong.shoutlink.domain.hub.controller.request.FindHubsRequest; -import com.seong.shoutlink.domain.hub.service.HubService; +import com.seong.shoutlink.domain.hub.service.HubUseCase; import com.seong.shoutlink.domain.hub.service.request.CreateHubCommand; import com.seong.shoutlink.domain.hub.service.request.FindHubCommand; import com.seong.shoutlink.domain.hub.service.request.FindMyHubsCommand; @@ -28,13 +28,13 @@ @RequestMapping("/api") public class HubController { - private final HubService hubService; + private final HubUseCase hubUseCase; @PostMapping("/hubs") public ResponseEntity createHub( @RequestBody @Valid CreateHubRequest request, @LoginUser Long memberId) { - CreateHubResponse response = hubService.createHub(new CreateHubCommand( + CreateHubResponse response = hubUseCase.createHub(new CreateHubCommand( memberId, request.name(), request.description(), @@ -45,7 +45,7 @@ public ResponseEntity createHub( @GetMapping("/hubs") public ResponseEntity findHubs( @Valid @ModelAttribute FindHubsRequest request) { - FindHubsResponse response = hubService.findHubs(new FindHubsCommand( + FindHubsResponse response = hubUseCase.findHubs(new FindHubsCommand( request.page(), request.size() )); @@ -54,7 +54,7 @@ public ResponseEntity findHubs( @GetMapping("/hubs/{hubId}") public ResponseEntity findHub(@PathVariable("hubId") Long hubId) { - FindHubDetailResponse response = hubService.findHub(new FindHubCommand(hubId)); + FindHubDetailResponse response = hubUseCase.findHub(new FindHubCommand(hubId)); return ResponseEntity.ok(response); } @@ -62,7 +62,7 @@ public ResponseEntity findHub(@PathVariable("hubId") Long public ResponseEntity findMyHubs( @Valid @ModelAttribute FindHubsRequest request, @LoginUser Long memberId) { - FindHubsResponse response = hubService.findMemberHubs( + FindHubsResponse response = hubUseCase.findMemberHubs( new FindMyHubsCommand(request.page(), request.size(), memberId)); return ResponseEntity.ok(response); } diff --git a/src/main/java/com/seong/shoutlink/domain/hub/service/HubService.java b/src/main/java/com/seong/shoutlink/domain/hub/service/HubService.java index 555c969..8c9eca1 100644 --- a/src/main/java/com/seong/shoutlink/domain/hub/service/HubService.java +++ b/src/main/java/com/seong/shoutlink/domain/hub/service/HubService.java @@ -28,13 +28,14 @@ @Service @RequiredArgsConstructor -public class HubService { +public class HubService implements HubUseCase { private final MemberRepository memberRepository; private final HubRepository hubRepository; private final HubTagReader hubTagReader; private final EventPublisher eventPublisher; + @Override @Transactional public CreateHubResponse createHub(CreateHubCommand command) { Member member = getMember(command.memberId()); @@ -44,6 +45,7 @@ public CreateHubResponse createHub(CreateHubCommand command) { return new CreateHubResponse(hubId); } + @Override @Transactional(readOnly = true) public FindHubsResponse findHubs(FindHubsCommand command) { HubPaginationResult result = hubRepository.findHubs(command.page(), command.size()); @@ -52,6 +54,7 @@ public FindHubsResponse findHubs(FindHubsCommand command) { return createFindHubResponses(result, tagsInHubs); } + @Override @Transactional(readOnly = true) public FindHubsResponse findMemberHubs(FindMyHubsCommand command) { Member member = getMember(command.memberId()); @@ -73,6 +76,7 @@ private FindHubsResponse createFindHubResponses(HubPaginationResult result, return new FindHubsResponse(findHubs, result.totalElements(), result.hasNext()); } + @Override @Transactional(readOnly = true) public FindHubDetailResponse findHub(FindHubCommand command) { HubWithMaster hubWithMaster = getHubWithMaster(command.hubId()); diff --git a/src/main/java/com/seong/shoutlink/domain/hub/service/HubUseCase.java b/src/main/java/com/seong/shoutlink/domain/hub/service/HubUseCase.java new file mode 100644 index 0000000..1a660e2 --- /dev/null +++ b/src/main/java/com/seong/shoutlink/domain/hub/service/HubUseCase.java @@ -0,0 +1,20 @@ +package com.seong.shoutlink.domain.hub.service; + +import com.seong.shoutlink.domain.hub.service.request.CreateHubCommand; +import com.seong.shoutlink.domain.hub.service.request.FindHubCommand; +import com.seong.shoutlink.domain.hub.service.request.FindMyHubsCommand; +import com.seong.shoutlink.domain.hub.service.response.CreateHubResponse; +import com.seong.shoutlink.domain.hub.service.response.FindHubDetailResponse; +import com.seong.shoutlink.domain.hub.service.response.FindHubsCommand; +import com.seong.shoutlink.domain.hub.service.response.FindHubsResponse; + +public interface HubUseCase { + + CreateHubResponse createHub(CreateHubCommand command); + + FindHubsResponse findHubs(FindHubsCommand command); + + FindHubsResponse findMemberHubs(FindMyHubsCommand command); + + FindHubDetailResponse findHub(FindHubCommand command); +} diff --git a/src/main/java/com/seong/shoutlink/domain/link/controller/LinkController.java b/src/main/java/com/seong/shoutlink/domain/link/controller/LinkController.java index b7b0f50..1f0443f 100644 --- a/src/main/java/com/seong/shoutlink/domain/link/controller/LinkController.java +++ b/src/main/java/com/seong/shoutlink/domain/link/controller/LinkController.java @@ -4,7 +4,7 @@ import com.seong.shoutlink.domain.auth.NullableUser; import com.seong.shoutlink.domain.link.controller.request.CreateLinkRequest; import com.seong.shoutlink.domain.link.controller.request.FindLinksRequest; -import com.seong.shoutlink.domain.link.service.LinkService; +import com.seong.shoutlink.domain.link.service.LinkUseCase; import com.seong.shoutlink.domain.link.service.request.CreateHubLinkCommand; import com.seong.shoutlink.domain.link.service.request.CreateLinkCommand; import com.seong.shoutlink.domain.link.service.request.FindHubLinksCommand; @@ -29,13 +29,13 @@ @RequestMapping("/api") public class LinkController { - private final LinkService linkService; + private final LinkUseCase linkUseCase; @PostMapping("/links") public ResponseEntity createLink( @LoginUser Long memberId, @Valid @RequestBody CreateLinkRequest request) { - CreateLinkResponse response = linkService.createLink(new CreateLinkCommand( + CreateLinkResponse response = linkUseCase.createLink(new CreateLinkCommand( memberId, request.linkBundleId(), request.url(), @@ -47,7 +47,7 @@ public ResponseEntity createLink( public ResponseEntity findLinks( @LoginUser Long memberId, @Valid @ModelAttribute FindLinksRequest request) { - FindLinksResponse response = linkService.findLinks(new FindLinksCommand( + FindLinksResponse response = linkUseCase.findLinks(new FindLinksCommand( memberId, request.linkBundleId(), request.page(), @@ -60,7 +60,7 @@ public ResponseEntity createHubLink( @PathVariable("hubId") Long hubId, @LoginUser Long memberId, @Valid @RequestBody CreateLinkRequest request) { - CreateHubLinkResponse response = linkService.createHubLink(new CreateHubLinkCommand( + CreateHubLinkResponse response = linkUseCase.createHubLink(new CreateHubLinkCommand( hubId, memberId, request.linkBundleId(), @@ -74,7 +74,7 @@ public ResponseEntity findHubLinks( @PathVariable("hubId") Long hubId, @NullableUser Long nullableMemberId, @Valid @ModelAttribute FindLinksRequest request) { - FindLinksResponse response = linkService.findHubLinks(new FindHubLinksCommand( + FindLinksResponse response = linkUseCase.findHubLinks(new FindHubLinksCommand( request.linkBundleId(), hubId, nullableMemberId, diff --git a/src/main/java/com/seong/shoutlink/domain/link/service/LinkService.java b/src/main/java/com/seong/shoutlink/domain/link/service/LinkService.java index b73bd4c..fc92385 100644 --- a/src/main/java/com/seong/shoutlink/domain/link/service/LinkService.java +++ b/src/main/java/com/seong/shoutlink/domain/link/service/LinkService.java @@ -30,7 +30,7 @@ @Service @RequiredArgsConstructor -public class LinkService { +public class LinkService implements LinkUseCase { private final MemberRepository memberRepository; private final HubRepository hubRepository; @@ -40,6 +40,7 @@ public class LinkService { private final EventPublisher eventPublisher; @Transactional + @Override public CreateLinkResponse createLink(CreateLinkCommand command) { Member member = getMember(command.memberId()); LinkBundle linkBundle = getLinkBundle(command.linkBundleId(), member); @@ -52,6 +53,7 @@ public CreateLinkResponse createLink(CreateLinkCommand command) { } @Transactional(readOnly = true) + @Override public FindLinksResponse findLinks(FindLinksCommand command) { Member member = getMember(command.memberId()); LinkBundle linkBundle = getLinkBundle(command.linkBundleId(), member); @@ -72,6 +74,7 @@ private Member getMember(Long memberId) { .orElseThrow(() -> new ShoutLinkException("존재하지 않는 사용자입니다.", ErrorCode.NOT_FOUND)); } + @Override @Transactional public CreateHubLinkResponse createHubLink(CreateHubLinkCommand command) { Hub hub = getHub(command.hubId()); @@ -84,6 +87,7 @@ public CreateHubLinkResponse createHubLink(CreateHubLinkCommand command) { return new CreateHubLinkResponse(linkId); } + @Override @Transactional(readOnly = true) public FindLinksResponse findHubLinks(FindHubLinksCommand command) { Hub hub = getHub(command.hubId()); diff --git a/src/main/java/com/seong/shoutlink/domain/link/service/LinkUseCase.java b/src/main/java/com/seong/shoutlink/domain/link/service/LinkUseCase.java new file mode 100644 index 0000000..92a665d --- /dev/null +++ b/src/main/java/com/seong/shoutlink/domain/link/service/LinkUseCase.java @@ -0,0 +1,20 @@ +package com.seong.shoutlink.domain.link.service; + +import com.seong.shoutlink.domain.link.service.request.CreateHubLinkCommand; +import com.seong.shoutlink.domain.link.service.request.CreateLinkCommand; +import com.seong.shoutlink.domain.link.service.request.FindHubLinksCommand; +import com.seong.shoutlink.domain.link.service.request.FindLinksCommand; +import com.seong.shoutlink.domain.link.service.response.CreateHubLinkResponse; +import com.seong.shoutlink.domain.link.service.response.CreateLinkResponse; +import com.seong.shoutlink.domain.link.service.response.FindLinksResponse; + +public interface LinkUseCase { + + CreateLinkResponse createLink(CreateLinkCommand command); + + FindLinksResponse findLinks(FindLinksCommand command); + + CreateHubLinkResponse createHubLink(CreateHubLinkCommand command); + + FindLinksResponse findHubLinks(FindHubLinksCommand command); +} diff --git a/src/main/java/com/seong/shoutlink/domain/linkbundle/controller/LinkBundleController.java b/src/main/java/com/seong/shoutlink/domain/linkbundle/controller/LinkBundleController.java index 6863a70..f1ec500 100644 --- a/src/main/java/com/seong/shoutlink/domain/linkbundle/controller/LinkBundleController.java +++ b/src/main/java/com/seong/shoutlink/domain/linkbundle/controller/LinkBundleController.java @@ -3,7 +3,7 @@ import com.seong.shoutlink.domain.auth.LoginUser; import com.seong.shoutlink.domain.auth.NullableUser; import com.seong.shoutlink.domain.linkbundle.controller.request.CreateLinkBundleRequest; -import com.seong.shoutlink.domain.linkbundle.service.LinkBundleService; +import com.seong.shoutlink.domain.linkbundle.service.LinkBundleUseCase; import com.seong.shoutlink.domain.linkbundle.service.request.CreateHubLinkBundleCommand; import com.seong.shoutlink.domain.linkbundle.service.request.FindHubLinkBundlesCommand; import com.seong.shoutlink.domain.linkbundle.service.request.FindLinkBundlesCommand; @@ -26,13 +26,13 @@ @RequestMapping("/api") public class LinkBundleController { - private final LinkBundleService linkBundleService; + private final LinkBundleUseCase linkBundleUseCase; @PostMapping("/link-bundles") public ResponseEntity createLinkBundle( @LoginUser Long memberId, @Valid @RequestBody CreateLinkBundleRequest request) { - CreateLinkBundleResponse response = linkBundleService.createLinkBundle( + CreateLinkBundleResponse response = linkBundleUseCase.createLinkBundle( new CreateLinkBundleCommand( memberId, request.description(), @@ -43,7 +43,7 @@ public ResponseEntity createLinkBundle( @GetMapping("/link-bundles") public ResponseEntity findLinkBundles( @LoginUser Long memberId) { - FindLinkBundlesResponse response = linkBundleService.findLinkBundles( + FindLinkBundlesResponse response = linkBundleUseCase.findLinkBundles( new FindLinkBundlesCommand(memberId)); return ResponseEntity.ok(response); } @@ -53,7 +53,7 @@ public ResponseEntity createHubLinkBundle( @LoginUser Long memberId, @PathVariable("hubId") Long hubId, @Valid @RequestBody CreateLinkBundleRequest request) { - CreateLinkBundleResponse response = linkBundleService.createHubLinkBundle( + CreateLinkBundleResponse response = linkBundleUseCase.createHubLinkBundle( new CreateHubLinkBundleCommand( hubId, memberId, @@ -66,7 +66,7 @@ public ResponseEntity createHubLinkBundle( public ResponseEntity findHubLinkBundles( @NullableUser Long nullableMemberId, @PathVariable("hubId") Long hubId) { - FindLinkBundlesResponse response = linkBundleService.findHubLinkBundles( + FindLinkBundlesResponse response = linkBundleUseCase.findHubLinkBundles( new FindHubLinkBundlesCommand(hubId, nullableMemberId)); return ResponseEntity.ok(response); } diff --git a/src/main/java/com/seong/shoutlink/domain/linkbundle/service/LinkBundleService.java b/src/main/java/com/seong/shoutlink/domain/linkbundle/service/LinkBundleService.java index 0a4acdb..df92eca 100644 --- a/src/main/java/com/seong/shoutlink/domain/linkbundle/service/LinkBundleService.java +++ b/src/main/java/com/seong/shoutlink/domain/linkbundle/service/LinkBundleService.java @@ -25,13 +25,14 @@ @Service @RequiredArgsConstructor -public class LinkBundleService { +public class LinkBundleService implements LinkBundleUseCase { private final MemberRepository memberRepository; private final HubRepository hubRepository; private final HubMemberRepository hubMemberRepository; private final LinkBundleRepository linkBundleRepository; + @Override @Transactional public CreateLinkBundleResponse createLinkBundle(CreateLinkBundleCommand command) { Member member = getMember(command.memberId()); @@ -45,6 +46,7 @@ public CreateLinkBundleResponse createLinkBundle(CreateLinkBundleCommand command return new CreateLinkBundleResponse(linkBundleRepository.save(memberLinkBundle)); } + @Override public FindLinkBundlesResponse findLinkBundles(FindLinkBundlesCommand command) { Member member = getMember(command.memberId()); List linkBundles @@ -57,6 +59,7 @@ private Member getMember(Long memberId) { .orElseThrow(() -> new ShoutLinkException("존재하지 않는 사용자입니다.", ErrorCode.NOT_FOUND)); } + @Override @Transactional public CreateLinkBundleResponse createHubLinkBundle(CreateHubLinkBundleCommand command) { Hub hub = getHub(command.hubId()); @@ -68,6 +71,7 @@ public CreateLinkBundleResponse createHubLinkBundle(CreateHubLinkBundleCommand c return new CreateLinkBundleResponse(linkBundleRepository.save(hubLinkBundle)); } + @Override @Transactional(readOnly = true) public FindLinkBundlesResponse findHubLinkBundles(FindHubLinkBundlesCommand command) { Hub hub = getHub(command.hubId()); diff --git a/src/main/java/com/seong/shoutlink/domain/linkbundle/service/LinkBundleUseCase.java b/src/main/java/com/seong/shoutlink/domain/linkbundle/service/LinkBundleUseCase.java new file mode 100644 index 0000000..e40caf3 --- /dev/null +++ b/src/main/java/com/seong/shoutlink/domain/linkbundle/service/LinkBundleUseCase.java @@ -0,0 +1,19 @@ +package com.seong.shoutlink.domain.linkbundle.service; + +import com.seong.shoutlink.domain.linkbundle.service.request.CreateHubLinkBundleCommand; +import com.seong.shoutlink.domain.linkbundle.service.request.FindHubLinkBundlesCommand; +import com.seong.shoutlink.domain.linkbundle.service.request.FindLinkBundlesCommand; +import com.seong.shoutlink.domain.linkbundle.service.response.CreateLinkBundleCommand; +import com.seong.shoutlink.domain.linkbundle.service.response.CreateLinkBundleResponse; +import com.seong.shoutlink.domain.linkbundle.service.response.FindLinkBundlesResponse; + +public interface LinkBundleUseCase { + + CreateLinkBundleResponse createLinkBundle(CreateLinkBundleCommand command); + + FindLinkBundlesResponse findLinkBundles(FindLinkBundlesCommand command); + + CreateLinkBundleResponse createHubLinkBundle(CreateHubLinkBundleCommand command); + + FindLinkBundlesResponse findHubLinkBundles(FindHubLinkBundlesCommand command); +} diff --git a/src/main/java/com/seong/shoutlink/domain/tag/service/TagService.java b/src/main/java/com/seong/shoutlink/domain/tag/service/TagService.java index 017d0e2..cc8dbc1 100644 --- a/src/main/java/com/seong/shoutlink/domain/tag/service/TagService.java +++ b/src/main/java/com/seong/shoutlink/domain/tag/service/TagService.java @@ -27,7 +27,7 @@ @Service @RequiredArgsConstructor -public class TagService { +public class TagService implements TagUseCase { private static final int MINIMUM_TAG_CONDITION = 5; private static final int MAXIMUM_TAG_COUNT = 5; @@ -40,6 +40,7 @@ public class TagService { private final LinkRepository linkRepository; private final AutoGenerativeClient autoGenerativeClient; + @Override @Transactional public CreateTagResponse autoCreateHubTags(AutoCreateHubTagCommand command) { Hub hub = getHub(command.hubId()); @@ -70,6 +71,7 @@ private void checkHubTagIsCreatedWithinADay(Hub hub) { throw new ShoutLinkException("태그 생성된 지 하루가 지나지 않았습니다.", ErrorCode.NOT_MET_CONDITION);}); } + @Override @Transactional public CreateTagResponse autoCreateMemberTags(AutoCreateMemberTagCommand command) { Member member = getMember(command.memberId()); diff --git a/src/main/java/com/seong/shoutlink/domain/tag/service/TagUseCase.java b/src/main/java/com/seong/shoutlink/domain/tag/service/TagUseCase.java new file mode 100644 index 0000000..9db6ec7 --- /dev/null +++ b/src/main/java/com/seong/shoutlink/domain/tag/service/TagUseCase.java @@ -0,0 +1,12 @@ +package com.seong.shoutlink.domain.tag.service; + +import com.seong.shoutlink.domain.tag.service.request.AutoCreateHubTagCommand; +import com.seong.shoutlink.domain.tag.service.request.AutoCreateMemberTagCommand; +import com.seong.shoutlink.domain.tag.service.response.CreateTagResponse; + +public interface TagUseCase { + + CreateTagResponse autoCreateHubTags(AutoCreateHubTagCommand command); + + CreateTagResponse autoCreateMemberTags(AutoCreateMemberTagCommand command); +} diff --git a/src/main/java/com/seong/shoutlink/global/config/EventConfig.java b/src/main/java/com/seong/shoutlink/global/config/EventConfig.java index 41ece17..3532b55 100644 --- a/src/main/java/com/seong/shoutlink/global/config/EventConfig.java +++ b/src/main/java/com/seong/shoutlink/global/config/EventConfig.java @@ -1,9 +1,9 @@ package com.seong.shoutlink.global.config; import com.seong.shoutlink.domain.common.EventPublisher; -import com.seong.shoutlink.domain.domain.service.DomainService; -import com.seong.shoutlink.domain.linkbundle.service.LinkBundleService; -import com.seong.shoutlink.domain.tag.service.TagService; +import com.seong.shoutlink.domain.domain.service.DomainUseCase; +import com.seong.shoutlink.domain.linkbundle.service.LinkBundleUseCase; +import com.seong.shoutlink.domain.tag.service.TagUseCase; import com.seong.shoutlink.global.event.DomainEventListener; import com.seong.shoutlink.global.event.LinkBundleEventListener; import com.seong.shoutlink.global.event.SpringEventPublisher; @@ -21,17 +21,17 @@ public EventPublisher eventPublisher(ApplicationEventPublisher applicationEventP } @Bean - public LinkBundleEventListener linkBundleEventListener(LinkBundleService linkBundleService) { - return new LinkBundleEventListener(linkBundleService); + public LinkBundleEventListener linkBundleEventListener(LinkBundleUseCase linkBundleUseCase) { + return new LinkBundleEventListener(linkBundleUseCase); } @Bean - public DomainEventListener domainEventListener(DomainService domainService) { - return new DomainEventListener(domainService); + public DomainEventListener domainEventListener(DomainUseCase domainUseCase) { + return new DomainEventListener(domainUseCase); } @Bean - public TagEventListener tagEventListener(TagService tagService) { - return new TagEventListener(tagService); + public TagEventListener tagEventListener(TagUseCase tagUseCase) { + return new TagEventListener(tagUseCase); } } diff --git a/src/main/java/com/seong/shoutlink/global/event/DomainEventListener.java b/src/main/java/com/seong/shoutlink/global/event/DomainEventListener.java index 8ef9d81..93746f6 100644 --- a/src/main/java/com/seong/shoutlink/global/event/DomainEventListener.java +++ b/src/main/java/com/seong/shoutlink/global/event/DomainEventListener.java @@ -1,6 +1,6 @@ package com.seong.shoutlink.global.event; -import com.seong.shoutlink.domain.domain.service.DomainService; +import com.seong.shoutlink.domain.domain.service.DomainUseCase; import com.seong.shoutlink.domain.domain.service.request.UpdateDomainCommand; import com.seong.shoutlink.domain.link.service.event.CreateLinkEvent; import lombok.RequiredArgsConstructor; @@ -11,11 +11,11 @@ @RequiredArgsConstructor public class DomainEventListener { - private final DomainService domainService; + private final DomainUseCase domainUseCase; @TransactionalEventListener @Transactional(propagation = Propagation.REQUIRES_NEW) public void updateDomainInfo(CreateLinkEvent event) { - domainService.updateDomain(new UpdateDomainCommand(event.linkId(), event.url())); + domainUseCase.updateDomain(new UpdateDomainCommand(event.linkId(), event.url())); } } diff --git a/src/main/java/com/seong/shoutlink/global/event/LinkBundleEventListener.java b/src/main/java/com/seong/shoutlink/global/event/LinkBundleEventListener.java index 977844c..52802be 100644 --- a/src/main/java/com/seong/shoutlink/global/event/LinkBundleEventListener.java +++ b/src/main/java/com/seong/shoutlink/global/event/LinkBundleEventListener.java @@ -2,7 +2,7 @@ import com.seong.shoutlink.domain.auth.service.event.CreateMemberEvent; import com.seong.shoutlink.domain.hub.service.event.CreateHubEvent; -import com.seong.shoutlink.domain.linkbundle.service.LinkBundleService; +import com.seong.shoutlink.domain.linkbundle.service.LinkBundleUseCase; import com.seong.shoutlink.domain.linkbundle.service.request.CreateHubLinkBundleCommand; import com.seong.shoutlink.domain.linkbundle.service.response.CreateLinkBundleCommand; import lombok.RequiredArgsConstructor; @@ -15,14 +15,14 @@ public class LinkBundleEventListener { private static final String DEFAULT_LINK_BUNDLE = "기본"; - private final LinkBundleService linkBundleService; + private final LinkBundleUseCase linkBundleUseCase; @TransactionalEventListener @Transactional(propagation = Propagation.REQUIRES_NEW) public void createDefaultLinkBundle(CreateMemberEvent event) { CreateLinkBundleCommand command = new CreateLinkBundleCommand(event.memberId(), DEFAULT_LINK_BUNDLE, true); - linkBundleService.createLinkBundle(command); + linkBundleUseCase.createLinkBundle(command); } @TransactionalEventListener @@ -33,6 +33,6 @@ public void createDefaultHubLinkBundle(CreateHubEvent event) { event.memberId(), DEFAULT_LINK_BUNDLE, true); - linkBundleService.createHubLinkBundle(command); + linkBundleUseCase.createHubLinkBundle(command); } } diff --git a/src/main/java/com/seong/shoutlink/global/event/TagEventListener.java b/src/main/java/com/seong/shoutlink/global/event/TagEventListener.java index 3082a77..a54a495 100644 --- a/src/main/java/com/seong/shoutlink/global/event/TagEventListener.java +++ b/src/main/java/com/seong/shoutlink/global/event/TagEventListener.java @@ -4,7 +4,7 @@ import com.seong.shoutlink.domain.exception.ShoutLinkException; import com.seong.shoutlink.domain.link.service.event.CreateHubLinkEvent; import com.seong.shoutlink.domain.link.service.event.CreateMemberLinkEvent; -import com.seong.shoutlink.domain.tag.service.TagService; +import com.seong.shoutlink.domain.tag.service.TagUseCase; import com.seong.shoutlink.domain.tag.service.request.AutoCreateHubTagCommand; import com.seong.shoutlink.domain.tag.service.request.AutoCreateMemberTagCommand; import lombok.RequiredArgsConstructor; @@ -17,14 +17,14 @@ @RequiredArgsConstructor public class TagEventListener { - private final TagService tagService; + private final TagUseCase tagUseCase; @TransactionalEventListener @Transactional(propagation = Propagation.REQUIRES_NEW) public void createHubTags(CreateHubLinkEvent event) { AutoCreateHubTagCommand command = new AutoCreateHubTagCommand(event.hubId()); try { - tagService.autoCreateHubTags(command); + tagUseCase.autoCreateHubTags(command); log.debug("[Tag] 링크 개수가 최소 태그 자동 생성 조건을 만족"); } catch (ShoutLinkException e) { if(e.getErrorCode().equals(ErrorCode.NOT_MET_CONDITION)) { @@ -40,7 +40,7 @@ public void createHubTags(CreateHubLinkEvent event) { public void createMemberTags(CreateMemberLinkEvent event) { AutoCreateMemberTagCommand command = new AutoCreateMemberTagCommand(event.memberId()); try { - tagService.autoCreateMemberTags(command); + tagUseCase.autoCreateMemberTags(command); log.debug("[Tag] 링크 개수가 최소 태그 자동 생성 조건을 만족"); } catch (ShoutLinkException e) { if(e.getErrorCode().equals(ErrorCode.NOT_MET_CONDITION)) {