#38 hexagonal: find membership

This commit is contained in:
haerong22
2023-07-04 22:36:59 +09:00
parent dd9579fc59
commit 8db3256035
6 changed files with 103 additions and 1 deletions

View File

@@ -0,0 +1,29 @@
package org.example.membership.adapter.in.web;
import lombok.RequiredArgsConstructor;
import org.example.membership.application.port.in.FindMembershipCommand;
import org.example.membership.application.port.in.FindMembershipUseCase;
import org.example.membership.domain.Membership;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
public class FindMembershipController {
private final FindMembershipUseCase findMembershipUseCase;
@GetMapping("/membership/{membershipId}")
ResponseEntity<Membership> findMembershipByMemberId(@PathVariable String membershipId) {
FindMembershipCommand command = FindMembershipCommand.builder()
.membershipId(membershipId)
.build();
Membership membership = findMembershipUseCase.findMembership(command);
return ResponseEntity.ok(membership);
}
}

View File

@@ -2,12 +2,13 @@ package org.example.membership.adapter.out.persistence;
import common.PersistenceAdapter;
import lombok.RequiredArgsConstructor;
import org.example.membership.application.port.out.FindMembershipPort;
import org.example.membership.application.port.out.RegisterMembershipPort;
import org.example.membership.domain.Membership;
@PersistenceAdapter
@RequiredArgsConstructor
public class MembershipPersistenceAdapter implements RegisterMembershipPort {
public class MembershipPersistenceAdapter implements RegisterMembershipPort, FindMembershipPort {
private final SpringDataMembershipRepository membershipRepository;
@@ -23,4 +24,9 @@ public class MembershipPersistenceAdapter implements RegisterMembershipPort {
)
);
}
@Override
public MembershipJpaEntity findMembership(Membership.MembershipId membershipId) {
return membershipRepository.getById(membershipId.getMembershipId());
}
}

View File

@@ -0,0 +1,16 @@
package org.example.membership.application.port.in;
import common.SelfValidating;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@Builder
@EqualsAndHashCode(callSuper = false)
public
class FindMembershipCommand extends SelfValidating<FindMembershipCommand> {
private final String membershipId;
}

View File

@@ -0,0 +1,8 @@
package org.example.membership.application.port.in;
import org.example.membership.domain.Membership;
public interface FindMembershipUseCase {
Membership findMembership(FindMembershipCommand command);
}

View File

@@ -0,0 +1,12 @@
package org.example.membership.application.port.out;
import org.example.membership.adapter.out.persistence.MembershipJpaEntity;
import org.example.membership.domain.Membership;
public interface FindMembershipPort {
MembershipJpaEntity findMembership(
Membership.MembershipId membershipId
);
}

View File

@@ -0,0 +1,31 @@
package org.example.membership.application.service;
import common.UseCase;
import lombok.RequiredArgsConstructor;
import org.example.membership.adapter.out.persistence.MembershipJpaEntity;
import org.example.membership.adapter.out.persistence.MembershipMapper;
import org.example.membership.application.port.in.FindMembershipCommand;
import org.example.membership.application.port.in.FindMembershipUseCase;
import org.example.membership.application.port.out.FindMembershipPort;
import org.example.membership.domain.Membership;
import javax.transaction.Transactional;
@RequiredArgsConstructor
@UseCase
@Transactional
public class FindMembershipService implements FindMembershipUseCase {
private final FindMembershipPort findMembershipPort;
private final MembershipMapper mapper;
@Override
public Membership findMembership(FindMembershipCommand command) {
MembershipJpaEntity entity = findMembershipPort.findMembership(new Membership.MembershipId(command.getMembershipId()));
return mapper.mapToDomainEntity(entity);
}
}