diff --git a/src/main/java/com/empowerhack/family/memberservice/controller/MemberController.java b/src/main/java/com/empowerhack/family/memberservice/controller/MemberController.java new file mode 100644 index 0000000..b4fbb69 --- /dev/null +++ b/src/main/java/com/empowerhack/family/memberservice/controller/MemberController.java @@ -0,0 +1,53 @@ +package com.empowerhack.family.memberservice.controller; + +import com.empowerhack.family.memberservice.domain.Member; +import com.empowerhack.family.memberservice.service.MemberService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.history.Revision; +import org.springframework.data.history.Revisions; +import org.springframework.hateoas.*; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +public class MemberController { + + @Autowired + EntityLinks entityLinks; + + @Autowired + private MemberService memberService; + + @RequestMapping(method = RequestMethod.GET, value = "/members/{id:[\\d]+}/audit/latest") + public + @ResponseBody + ResponseEntity> findLastChangeRevision(@PathVariable Long id) { + Revision revision = this.memberService.findLastChangeRevision(id); + + Resource resource = new Resource<>(revision); + + final LinkBuilder lb = this.entityLinks.linkForSingleResource(Member.class, id); + resource.add(lb.withRel("member")); + + return new ResponseEntity<>(resource, HttpStatus.OK); + } + + @RequestMapping(method = RequestMethod.GET, value = "/members/{id:[\\d]+}/audit") + public + @ResponseBody + ResponseEntity> findRevisions(@PathVariable Long id) { + Revisions revisions = this.memberService.findRevisions(id); + + Resource resource = new Resource<>(revisions); + + final LinkBuilder lb = this.entityLinks.linkForSingleResource(Member.class, id); + resource.add(lb.withRel("member")); + + return new ResponseEntity<>(resource, HttpStatus.OK); + } +} diff --git a/src/main/java/com/empowerhack/family/memberservice/processor/MemberProcessor.java b/src/main/java/com/empowerhack/family/memberservice/processor/MemberProcessor.java new file mode 100644 index 0000000..2fb4dfa --- /dev/null +++ b/src/main/java/com/empowerhack/family/memberservice/processor/MemberProcessor.java @@ -0,0 +1,38 @@ +package com.empowerhack.family.memberservice.processor; + +import com.empowerhack.family.memberservice.controller.MemberController; +import com.empowerhack.family.memberservice.domain.Member; +import org.springframework.hateoas.Resource; +import org.springframework.hateoas.ResourceProcessor; +import org.springframework.stereotype.Component; + +import static org.springframework.hateoas.mvc.ControllerLinkBuilder.*; + +@Component +public class MemberProcessor implements ResourceProcessor> { + + @Override + public Resource process(Resource resource) { + resource.add( + linkTo( + methodOn( + MemberController.class + ).findRevisions( + resource.getContent().getId() + ) + ).withRel("audit") + ); + + resource.add( + linkTo( + methodOn( + MemberController.class + ).findLastChangeRevision( + resource.getContent().getId() + ) + ).withRel("audit") + ); + + return resource; + } +} diff --git a/src/main/java/com/empowerhack/family/memberservice/service/MemberService.java b/src/main/java/com/empowerhack/family/memberservice/service/MemberService.java new file mode 100644 index 0000000..9dbbebe --- /dev/null +++ b/src/main/java/com/empowerhack/family/memberservice/service/MemberService.java @@ -0,0 +1,23 @@ +package com.empowerhack.family.memberservice.service; + +import com.empowerhack.family.memberservice.domain.Member; +import com.empowerhack.family.memberservice.repository.MemberRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.history.Revision; +import org.springframework.data.history.Revisions; +import org.springframework.stereotype.Service; + +@Service +public final class MemberService { + + @Autowired + private MemberRepository memberRepository; + + public Revisions findRevisions(Long id) { + return this.memberRepository.findRevisions(id); + } + + public Revision findLastChangeRevision(Long id) { + return this.memberRepository.findLastChangeRevision(id); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 14dc467..e14b2f6 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,4 +1,4 @@ -version: v0.2.19 +version: v0.2.20 # This will be updated via CI in the future --- spring: