package com.example.onomatopoeiaback.service; import com.example.onomatopoeiaback.domain.employee.Employee; import com.example.onomatopoeiaback.domain.qrcode.QrCode; import com.example.onomatopoeiaback.domain.visit.Visit; import com.example.onomatopoeiaback.domain.visit.VisitDTO; import com.example.onomatopoeiaback.exceptions.BadRequestException; 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; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; import java.util.Optional; @Service public class VisitService { private final VisitRepository visitRepository; private final EmployeeRepository employeeRepository; final QrCodeRepository qrCodeRepository; public VisitService(VisitRepository visitRepository, EmployeeRepository employeeRepository, QrCodeRepository qrCodeRepository) { this.visitRepository = visitRepository; this.employeeRepository = employeeRepository; this.qrCodeRepository = qrCodeRepository; } public void register(String login, VisitDTO visitDTO) { Optional employeeOptional = employeeRepository.findByLogin(login); LocalDateTime localDateTime = LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS); Optional qrCodeOptional = qrCodeRepository.findById(visitDTO.getQrCodeId()); if (qrCodeOptional.isEmpty()) { throw new BadRequestException(); } if (employeeOptional.isEmpty()) { throw new UnauthorizedException(); } QrCode qrCode = qrCodeOptional.get(); Employee employee = employeeOptional.get(); Visit visit = new Visit(); visit.setQrCode(qrCode); visit.setVisitType(visitDTO.getVisitType()); visit.setVisitTime(localDateTime); visit.setEmployee(employee); visitRepository.saveAndFlush(visit); employee.setLastVisit(localDateTime); employeeRepository.saveAndFlush(employee); } public Page getVisits(String login, Integer page, Integer size) { Optional employeeOptional = employeeRepository.findByLogin(login); if (employeeOptional.isEmpty()) { throw new UnauthorizedException(); } PageRequest pageable = PageRequest.of(page, size); return visitRepository.findByEmployeeId(employeeOptional.get().getId(), pageable); } }