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/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/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..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 @@ -19,22 +19,34 @@ 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) { + Place updatePlace = new Place( + place.getId(), + placeDTO.getName(), + placeDTO.getSlug(), + place.getCity(), + placeDTO.getState(), + place.getCreatedAt(), + LocalDateTime.now() + ); + + repository.save(updatePlace); + + return updatePlace; } } 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..6328375 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; @@ -112,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(); + } }