From f360094b992a8feb1c179dfda6e95dee61435cfc Mon Sep 17 00:00:00 2001 From: Ismail Ismailov Date: Thu, 27 Apr 2023 14:29:19 +0200 Subject: [PATCH] Move VetController logic into the application layer --- .../petclinic/application/VetService.java | 29 +++++++++++++++++++ .../controller/VetController.java | 16 +++++----- .../controller/VetControllerTests.java | 14 +++++---- 3 files changed, 45 insertions(+), 14 deletions(-) create mode 100644 src/main/java/org/springframework/samples/petclinic/application/VetService.java diff --git a/src/main/java/org/springframework/samples/petclinic/application/VetService.java b/src/main/java/org/springframework/samples/petclinic/application/VetService.java new file mode 100644 index 000000000..e83c7f92a --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/application/VetService.java @@ -0,0 +1,29 @@ +package org.springframework.samples.petclinic.application; + +import java.util.Collection; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.samples.petclinic.infrastructure.persistence.vet.Vet; +import org.springframework.samples.petclinic.infrastructure.persistence.vet.VetRepository; +import org.springframework.stereotype.Service; + +@Service +public class VetService { + + private final VetRepository vetRepository; + + public VetService(VetRepository vetRepository) { + this.vetRepository = vetRepository; + } + + public Page getVetPage(int page, int pageSize) { + Pageable pageable = PageRequest.of(page - 1, pageSize); + return this.vetRepository.findAll(pageable); + } + + public Collection getVets() { + return this.vetRepository.findAll(); + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/infrastructure/controller/VetController.java b/src/main/java/org/springframework/samples/petclinic/infrastructure/controller/VetController.java index 98f4836f2..f007d578e 100644 --- a/src/main/java/org/springframework/samples/petclinic/infrastructure/controller/VetController.java +++ b/src/main/java/org/springframework/samples/petclinic/infrastructure/controller/VetController.java @@ -15,13 +15,12 @@ */ package org.springframework.samples.petclinic.infrastructure.controller; +import java.util.Collection; import java.util.List; import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; +import org.springframework.samples.petclinic.application.VetService; import org.springframework.samples.petclinic.infrastructure.persistence.vet.Vet; -import org.springframework.samples.petclinic.infrastructure.persistence.vet.VetRepository; import org.springframework.samples.petclinic.infrastructure.view.Vets; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -38,10 +37,10 @@ import org.springframework.web.bind.annotation.ResponseBody; @Controller class VetController { - private final VetRepository vetRepository; + private final VetService vetService; - public VetController(VetRepository clinicService) { - this.vetRepository = clinicService; + public VetController(VetService vetService) { + this.vetService = vetService; } @GetMapping("/vets.html") @@ -66,8 +65,7 @@ class VetController { private Page findPaginated(int page) { int pageSize = 5; - Pageable pageable = PageRequest.of(page - 1, pageSize); - return vetRepository.findAll(pageable); + return vetService.getVetPage(page, pageSize); } @GetMapping({ "/vets" }) @@ -75,7 +73,7 @@ class VetController { // Here we are returning an object of type 'Vets' rather than a collection of Vet // objects so it is simpler for JSon/Object mapping Vets vets = new Vets(); - vets.getVetList().addAll(this.vetRepository.findAll()); + vets.getVetList().addAll(vetService.getVets()); return vets; } diff --git a/src/test/java/org/springframework/samples/petclinic/infrastructure/controller/VetControllerTests.java b/src/test/java/org/springframework/samples/petclinic/infrastructure/controller/VetControllerTests.java index cae775775..f6c0524e9 100644 --- a/src/test/java/org/springframework/samples/petclinic/infrastructure/controller/VetControllerTests.java +++ b/src/test/java/org/springframework/samples/petclinic/infrastructure/controller/VetControllerTests.java @@ -16,6 +16,7 @@ package org.springframework.samples.petclinic.infrastructure.controller; +import java.util.ArrayList; import org.assertj.core.util.Lists; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -25,9 +26,9 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.http.MediaType; +import org.springframework.samples.petclinic.application.VetService; import org.springframework.samples.petclinic.infrastructure.persistence.vet.Specialty; import org.springframework.samples.petclinic.infrastructure.persistence.vet.Vet; -import org.springframework.samples.petclinic.infrastructure.persistence.vet.VetRepository; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; @@ -48,7 +49,7 @@ class VetControllerTests { private MockMvc mockMvc; @MockBean - private VetRepository vets; + private VetService vetService; private Vet james() { Vet james = new Vet(); @@ -72,9 +73,12 @@ class VetControllerTests { @BeforeEach void setup() { - given(this.vets.findAll()).willReturn(Lists.newArrayList(james(), helen())); - given(this.vets.findAll(any(Pageable.class))) - .willReturn(new PageImpl(Lists.newArrayList(james(), helen()))); + ArrayList vetsList = Lists.newArrayList(james(), helen()); + + given(this.vetService.getVets()).willReturn(vetsList); + + given(this.vetService.getVetPage(1, 5)) + .willReturn(new PageImpl<>(vetsList)); }