diff --git a/build.gradle b/build.gradle index 3a073d1..824d9fa 100644 --- a/build.gradle +++ b/build.gradle @@ -21,12 +21,16 @@ repositories { ext { set('snippetsDir', file("build/generated-snippets")) + // Added depedencies version after spring init + gsonVersion = '2.8.9' } dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-validation' + compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'com.h2database:h2' @@ -35,7 +39,7 @@ dependencies { testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc' // Added after spring init - implementation 'com.google.code.gson:gson:2.8.9' + implementation "com.google.code.gson:gson:$gsonVersion" } diff --git a/src/main/java/com/example/apispringgradleb2boost/controller/PartnerController.java b/src/main/java/com/example/apispringgradleb2boost/controller/PartnerController.java index cee04bb..68f42d0 100644 --- a/src/main/java/com/example/apispringgradleb2boost/controller/PartnerController.java +++ b/src/main/java/com/example/apispringgradleb2boost/controller/PartnerController.java @@ -5,32 +5,41 @@ import com.example.apispringgradleb2boost.model.Partner; import com.example.apispringgradleb2boost.service.PartnerService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.repository.query.Param; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.google.gson.Gson; import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.Min; import java.io.IOException; import java.io.PrintWriter; import java.util.Optional; @RestController +@Validated public class PartnerController { @Autowired PartnerService partnerService; @GetMapping("/partners") - public Iterable getPartners() { + public Iterable getPartners(@Param("from") @Min(0) final Integer from, @Param("size") @Min(1) final Integer size) { + if (from != null && size != null) { + return partnerService.getPartners(from, size); + } return partnerService.getPartners(); } @GetMapping("/partner/{id}") - public Partner getPartnerById(@PathVariable("id") final Long Id, HttpServletResponse response) throws IOException { + public Partner getPartnerById(@PathVariable("id") @Min(1) final Long Id, HttpServletResponse response) throws IOException { Optional partner = partnerService.getPartnerById(Id); if (partner.isPresent()) { diff --git a/src/main/java/com/example/apispringgradleb2boost/service/PartnerService.java b/src/main/java/com/example/apispringgradleb2boost/service/PartnerService.java index 4fe108e..34d004d 100644 --- a/src/main/java/com/example/apispringgradleb2boost/service/PartnerService.java +++ b/src/main/java/com/example/apispringgradleb2boost/service/PartnerService.java @@ -4,8 +4,12 @@ import com.example.apispringgradleb2boost.model.Partner; import com.example.apispringgradleb2boost.repository.PartnerRepository; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; + import java.util.Optional; @Data @@ -16,11 +20,16 @@ public class PartnerService { @Autowired private PartnerRepository partnerRepository; - public Iterable getPartners(){ + public Iterable getPartners() { return partnerRepository.findAll(); } - public Optional getPartnerById(Long Id){ + public Iterable getPartners(int from, int size) { + Pageable pageable = PageRequest.of(from, size); + return partnerRepository.findAll(pageable); + } + + public Optional getPartnerById(Long Id) { return partnerRepository.findById(Id); } } diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index f4c15f6..d51a12d 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -1,4 +1,13 @@ INSERT INTO partners (company_name, ref, locale, expires) VALUES ('B2boost', 'FYI1', 'en_BE', TIMESTAMP '2022-05-23 12:18:46'), - ('Spotify', 'FYI2', 'en_GB', TIMESTAMP '2022-05-23 12:18:46'), - ('AMSOM-Habitat', 'FYI3', 'fr_FR', TIMESTAMP '2022-05-23 12:18:46'); + ('Proximus', 'FYI2', 'en_BE', TIMESTAMP '2022-05-23 12:18:46'), + ('KBC Bank', 'FYI3', 'en_BE', TIMESTAMP '2022-05-23 12:18:46'), + ('AB InBev', 'FYI4', 'en_BE', TIMESTAMP '2022-05-23 12:18:46'), + ('Spotify', 'FYI5', 'sv_SE', TIMESTAMP '2022-05-23 12:18:46'), + ('AMSOM-Habitat', 'FYI6', 'fr_FR', TIMESTAMP '2022-05-23 12:18:46'), + ('Microsoft', 'FYI7', 'en_US', TIMESTAMP '2022-05-23 12:18:46'), + ('Sony', 'FYI8', 'ja_JP', TIMESTAMP '2022-05-23 12:18:46'), + ('Intel', 'FYI9', 'en_US', TIMESTAMP '2022-05-23 12:18:46'), + ('Cisco', 'FYI10', 'en_US', TIMESTAMP '2022-05-23 12:18:46'), + ('Dell', 'FYI11', 'en_US', TIMESTAMP '2022-05-23 12:18:46'), + ('Canonical', 'FYI12', 'en_US', TIMESTAMP '2022-05-23 12:18:46');