From 5712f44f3942a9c1ea426ffb7cd1919f5c383fd3 Mon Sep 17 00:00:00 2001 From: fabiano lima Date: Sat, 18 May 2024 13:13:59 -0300 Subject: [PATCH 1/4] feature: impl placeService --- .../challenge/controller/PlaceController.java | 17 +++++++++++++---- .../challenge/repository/PlaceRepository.java | 1 + .../challenge/service/PlaceService.java | 12 ++++++------ 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/java/br/com/clickbus/challenge/controller/PlaceController.java b/src/main/java/br/com/clickbus/challenge/controller/PlaceController.java index bbd5d5c..40775d5 100644 --- a/src/main/java/br/com/clickbus/challenge/controller/PlaceController.java +++ b/src/main/java/br/com/clickbus/challenge/controller/PlaceController.java @@ -6,7 +6,9 @@ import br.com.clickbus.challenge.exception.PlaceNotFoundException; import br.com.clickbus.challenge.service.PlaceService; import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.repository.query.Param; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -18,13 +20,15 @@ import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; +import java.util.List; @Api("places") @RestController @RequestMapping("places") +@RequiredArgsConstructor public class PlaceController { - private PlaceService service; + private final PlaceService service; @PostMapping public ResponseEntity create(@RequestBody @Valid PlaceDTO dto) { @@ -39,9 +43,14 @@ public ResponseEntity findById(@PathVariable Long id) { } @GetMapping - public ResponseEntity findAll() { - Iterable places = PlaceDTO.convertToList(service.findAll()); - return ResponseEntity.ok(places); + public ResponseEntity findAll(@Param("name") String name) { + List places = name != null ? service.findByName(name) : service.findAll(); + + if (places.isEmpty()) { + return ResponseEntity.notFound().build(); + } + + return ResponseEntity.ok(PlaceDTO.convertToList(places)); } @PutMapping("/{id}") diff --git a/src/main/java/br/com/clickbus/challenge/repository/PlaceRepository.java b/src/main/java/br/com/clickbus/challenge/repository/PlaceRepository.java index 5a8309f..4f11b27 100644 --- a/src/main/java/br/com/clickbus/challenge/repository/PlaceRepository.java +++ b/src/main/java/br/com/clickbus/challenge/repository/PlaceRepository.java @@ -9,4 +9,5 @@ @Repository public interface PlaceRepository extends JpaRepository { List findByName(String name); + Place updateById(Long id, Place place); } diff --git a/src/main/java/br/com/clickbus/challenge/service/PlaceService.java b/src/main/java/br/com/clickbus/challenge/service/PlaceService.java index 799d1a8..f2fa9c0 100644 --- a/src/main/java/br/com/clickbus/challenge/service/PlaceService.java +++ b/src/main/java/br/com/clickbus/challenge/service/PlaceService.java @@ -19,22 +19,22 @@ public class PlaceService { private PlaceRepository repository; public List findAll() { - throw new NotImplementedException("Metodo nao implementado"); + return repository.findAll(); } public Optional findById(@NotNull Long id) { - throw new NotImplementedException("Metodo nao implementado"); + return repository.findById(id); } public Place save(@NotNull Place place) { - throw new NotImplementedException("Metodo nao implementado"); + return repository.save(place); } public List findByName(@NotNull String name) { - throw new NotImplementedException("Metodo nao implementado"); + return repository.findByName(name); } - public Place alter(@NotNull Place place,@NotNull PlaceDTO placeDTO) { - throw new NotImplementedException("Metodo nao implementado"); + public Place alter(@NotNull Place place, @NotNull PlaceDTO placeDTO) { + return repository.updateById(place.getId(), placeDTO.buildPlace()); } } From a89b23f33f44856f285fc3d532b93170846e483e Mon Sep 17 00:00:00 2001 From: fabiano lima Date: Sat, 18 May 2024 13:46:40 -0300 Subject: [PATCH 2/4] fix: alter place --- .../br/com/clickbus/challenge/entity/Place.java | 5 +++++ .../clickbus/challenge/service/PlaceService.java | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/java/br/com/clickbus/challenge/entity/Place.java b/src/main/java/br/com/clickbus/challenge/entity/Place.java index ccfc550..55aa31d 100644 --- a/src/main/java/br/com/clickbus/challenge/entity/Place.java +++ b/src/main/java/br/com/clickbus/challenge/entity/Place.java @@ -5,6 +5,9 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.UpdateTimestamp; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -35,8 +38,10 @@ public class Place { @NotNull private String state; + @CreationTimestamp private LocalDateTime createdAt; + @UpdateTimestamp private LocalDateTime updatedAt; public Place(String name, String slug, String city, String state) { diff --git a/src/main/java/br/com/clickbus/challenge/service/PlaceService.java b/src/main/java/br/com/clickbus/challenge/service/PlaceService.java index f2fa9c0..aa70d0f 100644 --- a/src/main/java/br/com/clickbus/challenge/service/PlaceService.java +++ b/src/main/java/br/com/clickbus/challenge/service/PlaceService.java @@ -8,9 +8,9 @@ import org.springframework.stereotype.Service; import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; import java.util.List; import java.util.Optional; -import org.apache.commons.lang3.NotImplementedException; @Service @AllArgsConstructor @@ -35,6 +35,18 @@ public List findByName(@NotNull String name) { } public Place alter(@NotNull Place place, @NotNull PlaceDTO placeDTO) { - return repository.updateById(place.getId(), placeDTO.buildPlace()); + Place updatePlace = new Place( + place.getId(), + placeDTO.getName(), + placeDTO.getSlug(), + place.getCity(), + placeDTO.getState(), + place.getCreatedAt(), + LocalDateTime.now() + ); + + repository.save(updatePlace); + + return updatePlace; } } From 13cf305b0cdc807658a9775f3137ca364e5cf451 Mon Sep 17 00:00:00 2001 From: fabiano lima Date: Sat, 18 May 2024 13:48:00 -0300 Subject: [PATCH 3/4] style: remove imports --- .../br/com/clickbus/challenge/service/PlaceServiceTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/br/com/clickbus/challenge/service/PlaceServiceTest.java b/src/test/java/br/com/clickbus/challenge/service/PlaceServiceTest.java index cf0f0a9..6aa7c1c 100644 --- a/src/test/java/br/com/clickbus/challenge/service/PlaceServiceTest.java +++ b/src/test/java/br/com/clickbus/challenge/service/PlaceServiceTest.java @@ -11,7 +11,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -19,7 +18,6 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyLong; import static org.mockito.Mockito.atLeastOnce; From 662a371a9e5069a317ac5572a1f6c6dda60ed2bc Mon Sep 17 00:00:00 2001 From: fabiano lima Date: Sat, 18 May 2024 13:51:18 -0300 Subject: [PATCH 4/4] test: test for PlaceService.findAll --- .../clickbus/challenge/service/PlaceServiceTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/test/java/br/com/clickbus/challenge/service/PlaceServiceTest.java b/src/test/java/br/com/clickbus/challenge/service/PlaceServiceTest.java index 6aa7c1c..6328375 100644 --- a/src/test/java/br/com/clickbus/challenge/service/PlaceServiceTest.java +++ b/src/test/java/br/com/clickbus/challenge/service/PlaceServiceTest.java @@ -110,4 +110,14 @@ void whenAlterPlaceOk() { assertEquals(place.getCreatedAt(), edited.getCreatedAt()); assertNotNull(edited.getUpdatedAt()); } + + @Test + void whenFindAllOk() { + when(repository.findAll()).thenReturn(Collections.singletonList(place)); + + List actual = service.findAll(); + + assertEquals(1, actual.size()); + verify(repository, atLeastOnce()).findAll(); + } }