Skip to content

Commit

Permalink
Merge pull request #22 from Best-offer-finder/BOF-65-return-info-abou…
Browse files Browse the repository at this point in the history
…t-pages

BOF-65 Return info about pages
  • Loading branch information
Vertonowsky authored Jun 13, 2024
2 parents e8b962e + 13b8b4c commit 08aba7b
Show file tree
Hide file tree
Showing 6 changed files with 135 additions and 9 deletions.
63 changes: 63 additions & 0 deletions src/main/java/com/example/backend/page/PageDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.example.backend.page;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class PageDto {

private Integer page;
private Integer size;
private String sort;
private Long totalCount;
private Integer totalPages;

public PageDto() {}

public PageDto(Integer page, Integer size, String sort) {
this.page = page;
this.size = size;
this.sort = sort;
}

public Integer getPage() {
return page;
}

public void setPage(Integer page) {
this.page = page;
}

public Integer getSize() {
return size;
}

public void setSize(Integer size) {
this.size = size;
}

public String getSort() {
return sort;
}

public void setSort(String sort) {
this.sort = sort;
}

public Long getTotalCount() {
return totalCount;
}

public void setTotalCount(Long totalCount) {
this.totalCount = totalCount;
}

public Integer getTotalPages() {
return totalPages;
}

public void setTotalPages(Integer totalPages) {
this.totalPages = totalPages;
}
}
19 changes: 19 additions & 0 deletions src/main/java/com/example/backend/page/PageSerializer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.example.backend.page;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

public class PageSerializer<T> {

public static <T> void fromPage(PageDto pageDto, Page<T> page) {
pageDto.setTotalPages(page.getTotalPages());
pageDto.setTotalCount(page.getTotalElements());
}

public static void fromPageable(PageDto pageDto, Pageable pageable) {
pageDto.setPage(pageable.getPageNumber());
pageDto.setSize(pageable.getPageSize());
pageDto.setSort(pageable.getSort().toString());
}

}
29 changes: 29 additions & 0 deletions src/main/java/com/example/backend/page/TableDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.example.backend.page;

public class TableDto<T> {

private PageDto page;

private T data;

public TableDto(PageDto page, T data) {
this.page = page;
this.data = data;
}

public PageDto getPage() {
return page;
}

public void setPage(PageDto page) {
this.page = page;
}

public T getData() {
return data;
}

public void setData(T data) {
this.data = data;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.example.backend.scheme.controller;

import com.example.backend.page.PageDto;
import com.example.backend.page.PageSerializer;
import com.example.backend.page.TableDto;
import com.example.backend.exception.exceptions.EntityNotFoundException;
import com.example.backend.exception.exceptions.IllegalInputException;
import com.example.backend.scheme.dto.SchemeDto;
Expand All @@ -8,6 +11,7 @@
import com.example.backend.common.UserEmail;
import com.example.backend.scheme.model.Scheme;
import jakarta.validation.Valid;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;

Expand All @@ -27,16 +31,23 @@ public SchemeController(SchemeService schemeService) {
}

@GetMapping
public List<SchemeDto> list(@UserEmail String email, Pageable pageable) {
List<Scheme> schemas = schemeService.list(email, pageable);
return schemas.stream().map((scheme -> SchemeSerializer.serialize(scheme, BASE))).toList();
public TableDto<List<SchemeDto>> list(@UserEmail String email, Pageable pageable) {
Page<Scheme> schemas = schemeService.list(email, pageable);
PageDto pageDto = new PageDto();
PageSerializer.fromPageable(pageDto, pageable);
PageSerializer.fromPage(pageDto, schemas);

return new TableDto<>(pageDto, schemas.stream().map((scheme -> SchemeSerializer.serialize(scheme, BASE))).toList());
}

@GetMapping("{id}")
public SchemeDto get(@UserEmail String email, @PathVariable("id") Long id, Pageable pageable) throws EntityNotFoundException {
public TableDto<SchemeDto> get(@UserEmail String email, @PathVariable("id") Long id, Pageable pageable) throws EntityNotFoundException {
Scheme scheme = schemeService.getById(id, email);
schemeService.fetchCars(scheme, pageable);
return SchemeSerializer.serialize(scheme, BASE, CARS);
PageDto pageDto = new PageDto();
PageSerializer.fromPageable(pageDto, pageable);

schemeService.fetchCars(scheme, pageable, pageDto);
return new TableDto<>(pageDto, SchemeSerializer.serialize(scheme, BASE, CARS));
}

@PostMapping
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.example.backend.scheme.repository;

import com.example.backend.scheme.model.Scheme;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

Expand All @@ -11,6 +12,6 @@ public interface SchemeRepository extends JpaRepository<Scheme, Long> {

Optional<Scheme> findByIdAndUserEmail(Long id, String email);

List<Scheme> findAllByUserEmail(String email, Pageable pageable);
Page<Scheme> findAllByUserEmail(String email, Pageable pageable);

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import com.example.backend.common.Collections;
import com.example.backend.common.ErrorCode;
import com.example.backend.page.PageDto;
import com.example.backend.email.EmailService;
import com.example.backend.exception.exceptions.EntityNotFoundException;
import com.example.backend.exception.exceptions.IllegalInputException;
import com.example.backend.page.PageSerializer;
import com.example.backend.scheme.CarStatus;
import com.example.backend.scheme.dto.SchemeDto;
import com.example.backend.scheme.model.Scheme;
Expand Down Expand Up @@ -72,7 +74,7 @@ public SchemeService(EntityManager em, SchemeRepository schemeRepository, Scheme
this.emailService = emailService;
}

public List<Scheme> list(String email, Pageable pageable) {
public Page<Scheme> list(String email, Pageable pageable) {
return schemeRepository.findAllByUserEmail(email, pageable);
}

Expand Down Expand Up @@ -133,8 +135,9 @@ public void fetchCars(Scheme scheme) {
scheme.setSchemeToCars(schemeToCars);
}

public void fetchCars(Scheme scheme, Pageable pageable) {
public void fetchCars(Scheme scheme, Pageable pageable, PageDto pageDto) {
Page<SchemeToCar> schemeToCars = schemeToCarRepository.findBySchemeId(scheme.getId(), pageable);
PageSerializer.fromPage(pageDto, schemeToCars);

em.detach(scheme);
scheme.setSchemeToCars(schemeToCars.get().collect(Collectors.toList()));
Expand Down

0 comments on commit 08aba7b

Please sign in to comment.