Skip to content

Commit

Permalink
Refactor: 서비스 인터페이스를 추가한다.
Browse files Browse the repository at this point in the history
Refactor: 서비스 인터페이스를 추가한다.
  • Loading branch information
hseong3243 authored Apr 17, 2024
2 parents e5065b0 + 08a6f47 commit 30a299c
Show file tree
Hide file tree
Showing 21 changed files with 184 additions and 54 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -24,12 +24,12 @@
@RequiredArgsConstructor
public class AuthController {

private final AuthService authService;
private final AuthUseCase authUseCase;

@PostMapping("/members")
public ResponseEntity<CreateMemberResponse> createMember(
@Valid @RequestBody CreateMemberRequest request) {
CreateMemberResponse response = authService.createMember(new CreateMemberCommand(
CreateMemberResponse response = authUseCase.createMember(new CreateMemberCommand(
request.email(),
request.password(),
request.nickname()
Expand All @@ -41,7 +41,7 @@ public ResponseEntity<CreateMemberResponse> createMember(
public ResponseEntity<LoginApiResponse> login(
@Valid @RequestBody LoginRequest request,
HttpServletResponse res) {
LoginResponse response = authService.login(new LoginCommand(
LoginResponse response = authUseCase.login(new LoginCommand(
request.email(),
request.password()
));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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}$");
Expand All @@ -38,6 +38,7 @@ private void validatePassword(CreateMemberCommand command) {
}
}

@Override
@Transactional
public CreateMemberResponse createMember(CreateMemberCommand command) {
validatePassword(command);
Expand All @@ -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(
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -26,20 +26,20 @@
@RequestMapping("/api/domains")
public class DomainController {

private final DomainService domainService;
private final DomainUseCase domainUseCase;

@GetMapping("/search")
public ResponseEntity<FindRootDomainsResponse> findRootDomains(
@ModelAttribute @Valid FindRootDomainsRequest request) {
FindRootDomainsResponse response = domainService.findRootDomains(
FindRootDomainsResponse response = domainUseCase.findRootDomains(
new FindRootDomainsCommand(request.keyword(), request.size()));
return ResponseEntity.ok(response);
}

@GetMapping
public ResponseEntity<FindDomainsResponse> 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);
}
Expand All @@ -48,15 +48,15 @@ public ResponseEntity<FindDomainsResponse> findDomains(
public ResponseEntity<FindDomainDetailResponse> findDomain(
@PathVariable("domainId") Long domainId) {
FindDomainDetailResponse response
= domainService.findDomain(new FindDomainCommand(domainId));
= domainUseCase.findDomain(new FindDomainCommand(domainId));
return ResponseEntity.ok(response);
}

@GetMapping("/{domainId}/links")
public ResponseEntity<FindDomainLinksResponse> 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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand All @@ -46,23 +47,27 @@ public UpdateDomainResponse updateDomain(UpdateDomainCommand command) {
return new UpdateDomainResponse(domain.getDomainId());
}

@Override
public FindRootDomainsResponse findRootDomains(FindRootDomainsCommand command) {
List<String> 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
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -28,13 +28,13 @@
@RequestMapping("/api")
public class HubController {

private final HubService hubService;
private final HubUseCase hubUseCase;

@PostMapping("/hubs")
public ResponseEntity<CreateHubResponse> 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(),
Expand All @@ -45,7 +45,7 @@ public ResponseEntity<CreateHubResponse> createHub(
@GetMapping("/hubs")
public ResponseEntity<FindHubsResponse> findHubs(
@Valid @ModelAttribute FindHubsRequest request) {
FindHubsResponse response = hubService.findHubs(new FindHubsCommand(
FindHubsResponse response = hubUseCase.findHubs(new FindHubsCommand(
request.page(),
request.size()
));
Expand All @@ -54,15 +54,15 @@ public ResponseEntity<FindHubsResponse> findHubs(

@GetMapping("/hubs/{hubId}")
public ResponseEntity<FindHubDetailResponse> findHub(@PathVariable("hubId") Long hubId) {
FindHubDetailResponse response = hubService.findHub(new FindHubCommand(hubId));
FindHubDetailResponse response = hubUseCase.findHub(new FindHubCommand(hubId));
return ResponseEntity.ok(response);
}

@GetMapping("/hubs/me")
public ResponseEntity<FindHubsResponse> 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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand All @@ -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());
Expand All @@ -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());
Expand All @@ -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());
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -29,13 +29,13 @@
@RequestMapping("/api")
public class LinkController {

private final LinkService linkService;
private final LinkUseCase linkUseCase;

@PostMapping("/links")
public ResponseEntity<CreateLinkResponse> 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(),
Expand All @@ -47,7 +47,7 @@ public ResponseEntity<CreateLinkResponse> createLink(
public ResponseEntity<FindLinksResponse> 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(),
Expand All @@ -60,7 +60,7 @@ public ResponseEntity<CreateHubLinkResponse> 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(),
Expand All @@ -74,7 +74,7 @@ public ResponseEntity<FindLinksResponse> 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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

@Service
@RequiredArgsConstructor
public class LinkService {
public class LinkService implements LinkUseCase {

private final MemberRepository memberRepository;
private final HubRepository hubRepository;
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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());
Expand All @@ -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());
Expand Down
Loading

0 comments on commit 30a299c

Please sign in to comment.