From 70f627a694cffe3087f1b7f9ec42b86fe6f20c8d Mon Sep 17 00:00:00 2001 From: Daniil Makeev Date: Wed, 19 Feb 2025 12:28:30 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=BA=D0=B0=20=D0=BF=D0=BE=D1=81=D0=B5=D1=89?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D0=BA=D1=80=D0=B5=D1=82=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OnomatopoeiaBackApplication.java | 3 +++ .../controller/VisitController.java | 16 +++++++++------- .../onomatopoeiaback/domain/visit/Visit.java | 3 +++ .../repository/VisitRepository.java | 11 +++++++++++ .../onomatopoeiaback/service/VisitService.java | 7 +++++-- 5 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/example/onomatopoeiaback/OnomatopoeiaBackApplication.java b/src/main/java/com/example/onomatopoeiaback/OnomatopoeiaBackApplication.java index 7853fb0..1829a5b 100644 --- a/src/main/java/com/example/onomatopoeiaback/OnomatopoeiaBackApplication.java +++ b/src/main/java/com/example/onomatopoeiaback/OnomatopoeiaBackApplication.java @@ -3,9 +3,12 @@ package com.example.onomatopoeiaback; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; +import org.springframework.data.web.config.EnableSpringDataWebSupport; // отключаем стандартную шизанастройку в spring security @SpringBootApplication(exclude = {SecurityAutoConfiguration.class }) +// указывает Spring Data использовать PagedModel для сериализации объектов Page в JSON +@EnableSpringDataWebSupport(pageSerializationMode = EnableSpringDataWebSupport.PageSerializationMode.VIA_DTO) public class OnomatopoeiaBackApplication { public static void main(String[] args) { diff --git a/src/main/java/com/example/onomatopoeiaback/controller/VisitController.java b/src/main/java/com/example/onomatopoeiaback/controller/VisitController.java index 11f5507..b89a78c 100644 --- a/src/main/java/com/example/onomatopoeiaback/controller/VisitController.java +++ b/src/main/java/com/example/onomatopoeiaback/controller/VisitController.java @@ -3,6 +3,7 @@ package com.example.onomatopoeiaback.controller; import com.example.onomatopoeiaback.domain.visit.Visit; import com.example.onomatopoeiaback.domain.visit.VisitDTO; import com.example.onomatopoeiaback.service.VisitService; +import org.springframework.data.domain.Page; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -17,12 +18,13 @@ public class VisitController { this.visitService = visitService; } - @GetMapping("/{username}/visits") - public ResponseEntity> visits( - @PathVariable String username, - @RequestParam Integer offset, - @RequestParam Integer limit - ) { - return ResponseEntity.ok(visitService.getVisits(username, offset, limit)); + @GetMapping("/{login}/visits") + public ResponseEntity> getVisits( + @PathVariable String login, + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "10") int size) { + + Page visits = visitService.getVisits(login, page, size); + return ResponseEntity.ok(visits); } } diff --git a/src/main/java/com/example/onomatopoeiaback/domain/visit/Visit.java b/src/main/java/com/example/onomatopoeiaback/domain/visit/Visit.java index c3092bc..9ef3a2b 100644 --- a/src/main/java/com/example/onomatopoeiaback/domain/visit/Visit.java +++ b/src/main/java/com/example/onomatopoeiaback/domain/visit/Visit.java @@ -2,6 +2,8 @@ package com.example.onomatopoeiaback.domain.visit; import com.example.onomatopoeiaback.domain.employee.Employee; import com.example.onomatopoeiaback.domain.qrcode.QrCode; +import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; import lombok.Getter; import lombok.NonNull; @@ -25,5 +27,6 @@ public class Visit { @NonNull private LocalDateTime visitTime; @ManyToOne + @JsonIgnore private Employee employee; } diff --git a/src/main/java/com/example/onomatopoeiaback/repository/VisitRepository.java b/src/main/java/com/example/onomatopoeiaback/repository/VisitRepository.java index 7b78b0f..2b7a296 100644 --- a/src/main/java/com/example/onomatopoeiaback/repository/VisitRepository.java +++ b/src/main/java/com/example/onomatopoeiaback/repository/VisitRepository.java @@ -1,9 +1,20 @@ package com.example.onomatopoeiaback.repository; import com.example.onomatopoeiaback.domain.visit.Visit; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface VisitRepository extends JpaRepository { + /** + * Возвращает страницу посещений для указанного сотрудника. + * + * @param employeeId ID сотрудника, для которого нужно получить посещения. + * @param pageable Объект Pageable, содержащий информацию о пагинации (limit и offset). + * @return Страница с посещениями, соответствующими критериям. + */ + Page findByEmployeeId(Long employeeId, Pageable pageable); } diff --git a/src/main/java/com/example/onomatopoeiaback/service/VisitService.java b/src/main/java/com/example/onomatopoeiaback/service/VisitService.java index baaa25e..8ec113c 100644 --- a/src/main/java/com/example/onomatopoeiaback/service/VisitService.java +++ b/src/main/java/com/example/onomatopoeiaback/service/VisitService.java @@ -10,6 +10,8 @@ import com.example.onomatopoeiaback.exceptions.UnauthorizedException; import com.example.onomatopoeiaback.repository.EmployeeRepository; import com.example.onomatopoeiaback.repository.QrCodeRepository; import com.example.onomatopoeiaback.repository.VisitRepository; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import java.time.LocalDateTime; @@ -56,8 +58,9 @@ public class VisitService { employeeRepository.saveAndFlush(employee); } - public List getVisits(String login, Integer offset, Integer limit) { + public Page getVisits(String login, Integer page, Integer size) { Employee employee = employeeRepository.getEmployeesByLogin(login); - return new ArrayList<>(); + PageRequest pageable = PageRequest.of(page, size); + return visitRepository.findByEmployeeId(employee.getId(), pageable); } }