73 lines
2.7 KiB
Java
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);
|
|
}
|
|
}
|