73 lines
2.7 KiB
Java

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<Employee> employeeOptional = employeeRepository.findByLogin(login);
LocalDateTime localDateTime = LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS);
Optional<QrCode> 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<Visit> getVisits(String login, Integer page, Integer size) {
Optional<Employee> employeeOptional = employeeRepository.findByLogin(login);
if (employeeOptional.isEmpty()) {
throw new UnauthorizedException();
}
PageRequest pageable = PageRequest.of(page, size);
return visitRepository.findByEmployeeId(employeeOptional.get().getId(), pageable);
}
}