[R2] Implement pagination

This commit is contained in:
Mirna Gama 2024-01-04 17:15:21 -03:00 committed by Mirna Gama
parent 74616bae4e
commit bc8a6b3ba2
4 changed files with 32 additions and 19 deletions

View File

@ -3,6 +3,8 @@ package com.mirna.hospitalmanagementapi.application.controllers;
import java.util.List; import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
@ -49,16 +51,16 @@ public class DoctorController {
} }
/** /**
* Get method to receive a list of objects containing data transfer objects with Doctor public information * Get method to receive a paginated sublist of objects containing data transfer objects with Doctor public information
* *
* @param * @param pageable Pagination information, such as size and page number
* *
* @return A response entity containing the list of doctors if successful * @return A response entity containing the paginated sublist of doctors if successful
*/ */
@GetMapping @GetMapping
public ResponseEntity<Object> getDoctors() { public ResponseEntity<Object> getDoctors(Pageable pageable) {
List<DoctorPublicDataDTO> doctors = doctorService.findDoctors(); Page<DoctorPublicDataDTO> doctors = doctorService.findDoctors(pageable);
return ResponseEntity.ok(doctors); return ResponseEntity.ok(doctors);
} }

View File

@ -1,12 +1,12 @@
package com.mirna.hospitalmanagementapi.application.services; package com.mirna.hospitalmanagementapi.application.services;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.mirna.hospitalmanagementapi.application.usecase.doctor.AddDoctorUseCase; import com.mirna.hospitalmanagementapi.application.usecase.doctor.AddDoctorUseCase;
import com.mirna.hospitalmanagementapi.application.usecase.doctor.FindAllDoctorsUseCase; import com.mirna.hospitalmanagementapi.application.usecase.doctor.FindDoctorsUseCase;
import com.mirna.hospitalmanagementapi.domain.dtos.DoctorDTO; import com.mirna.hospitalmanagementapi.domain.dtos.DoctorDTO;
import com.mirna.hospitalmanagementapi.domain.dtos.DoctorPublicDataDTO; import com.mirna.hospitalmanagementapi.domain.dtos.DoctorPublicDataDTO;
import com.mirna.hospitalmanagementapi.domain.entities.Doctor; import com.mirna.hospitalmanagementapi.domain.entities.Doctor;
@ -28,7 +28,7 @@ public class DoctorServiceImpl implements DoctorService {
private AddDoctorUseCase addDoctor; private AddDoctorUseCase addDoctor;
@Autowired @Autowired
private FindAllDoctorsUseCase findAllDoctors; private FindDoctorsUseCase findDoctors;
/** /**
* Adds a new doctor to the database. * Adds a new doctor to the database.
@ -47,11 +47,13 @@ public class DoctorServiceImpl implements DoctorService {
/** /**
* Finds doctors from the database. * Finds doctors from the database.
* *
* @return A paginated list containing data transfer objects with doctors public information in the repository * @param pageable Pagination information, such as size and page number
*
* @return A paginated sublist containing data transfer objects with doctors public information in the repository
*/ */
@Override @Override
public List<DoctorPublicDataDTO> findDoctors() { public Page<DoctorPublicDataDTO> findDoctors(Pageable pageable) {
return findAllDoctors.execute().stream().map(DoctorPublicDataDTO::new).toList(); return findDoctors.execute(pageable).map(DoctorPublicDataDTO::new);
} }
} }

View File

@ -3,6 +3,8 @@ package com.mirna.hospitalmanagementapi.application.usecase.doctor;
import java.util.List; import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.mirna.hospitalmanagementapi.domain.entities.Doctor; import com.mirna.hospitalmanagementapi.domain.entities.Doctor;
@ -15,7 +17,7 @@ import com.mirna.hospitalmanagementapi.domain.repositories.DoctorRepository;
* @version 1.0 * @version 1.0
*/ */
@Component @Component
public class FindAllDoctorsUseCase { public class FindDoctorsUseCase {
@Autowired @Autowired
private DoctorRepository doctorRepository; private DoctorRepository doctorRepository;
@ -23,10 +25,12 @@ public class FindAllDoctorsUseCase {
/** /**
* Executes the findAll method from Doctor repository * Executes the findAll method from Doctor repository
* *
* @return The list of all stored doctors if successful, or null if there is an error * @param pageable Pagination information, such as size and page number
*
* @return A paginated list with stored doctors if successful, or null if there is an error
* *
*/ */
public List<Doctor> execute() { public Page<Doctor> execute(Pageable pageable) {
return this.doctorRepository.findAll(); return this.doctorRepository.findAll(pageable);
} }
} }

View File

@ -2,6 +2,9 @@ package com.mirna.hospitalmanagementapi.domain.services;
import java.util.List; import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import com.mirna.hospitalmanagementapi.domain.dtos.DoctorDTO; import com.mirna.hospitalmanagementapi.domain.dtos.DoctorDTO;
import com.mirna.hospitalmanagementapi.domain.dtos.DoctorPublicDataDTO; import com.mirna.hospitalmanagementapi.domain.dtos.DoctorPublicDataDTO;
import com.mirna.hospitalmanagementapi.domain.entities.Doctor; import com.mirna.hospitalmanagementapi.domain.entities.Doctor;
@ -24,10 +27,12 @@ public interface DoctorService {
public Doctor addDoctor(DoctorDTO doctorDTO); public Doctor addDoctor(DoctorDTO doctorDTO);
/** /**
* Retrieves a list of doctors. * Retrieves a paginated sublist of doctors.
* *
* @return A list containing data transfer objects with doctors public information in the repository * @param pageable Pagination information, such as size and page number
*
* @return A paginated sublist containing data transfer objects with doctors public information in the repository
*/ */
public List<DoctorPublicDataDTO> findDoctors(); public Page<DoctorPublicDataDTO> findDoctors(Pageable pageable);
} }