Добавлен метод для получения списка посещений для конкретного пользователя

This commit is contained in:
Daniil Makeev 2025-02-19 12:28:30 +03:00
parent e7aea29ec8
commit 70f627a694
5 changed files with 31 additions and 9 deletions

View File

@ -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) {

View File

@ -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<List<Visit>> visits(
@PathVariable String username,
@RequestParam Integer offset,
@RequestParam Integer limit
) {
return ResponseEntity.ok(visitService.getVisits(username, offset, limit));
@GetMapping("/{login}/visits")
public ResponseEntity<Page<Visit>> getVisits(
@PathVariable String login,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size) {
Page<Visit> visits = visitService.getVisits(login, page, size);
return ResponseEntity.ok(visits);
}
}

View File

@ -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;
}

View File

@ -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<Visit, Long> {
/**
* Возвращает страницу посещений для указанного сотрудника.
*
* @param employeeId ID сотрудника, для которого нужно получить посещения.
* @param pageable Объект Pageable, содержащий информацию о пагинации (limit и offset).
* @return Страница с посещениями, соответствующими критериям.
*/
Page<Visit> findByEmployeeId(Long employeeId, Pageable pageable);
}

View File

@ -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<Visit> getVisits(String login, Integer offset, Integer limit) {
public Page<Visit> 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);
}
}