/
Sebastien
/
Java-middle
Обзор
Документация
Войти
/
Sebastien
/
Java-middle
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main/java/ru/sebastien/parking_service/controller/VisitorController.java
93 строки
4 KB
Seurus
PR-1. Initial commit
27 май 2025, 10:27
27 май 2025, 10:27
b214a29
Код
Авторство
О чём код?
package ru.sebastien.parking_service.controller; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import ru.sebastien.parking_service.dto.ReportDto; import ru.sebastien.parking_service.entity.Visitor; import ru.sebastien.parking_service.repository.VisitorRepository; import ru.sebastien.parking_service.utils.ParkingProps; import java.sql.Timestamp; import java.time.Duration; /** * Основной контроллер для доступа к API через REST-эндпоинты * для регистрации ТС, отмены регистрации ТС и формирования отчета */ @RestController @RequestMapping("/api/v1/parking") public class VisitorController { public VisitorController(ParkingProps props, VisitorRepository repository) { this.props = props; this.repository = repository; } private ParkingProps props; private VisitorRepository repository; /** * Метод для регистрации ТС на парковке * * @param regNumber - номер автомобиля, прибывшего на парковку * @param carType - тип кузова авто * @return - время регистрации авто на парковке */ @PostMapping(path = "/entry") @ResponseStatus(value = HttpStatus.OK) public Timestamp registerVisitor(String regNumber, String carType) { Visitor visitor = new Visitor(); Timestamp arrivedAt = new Timestamp(System.currentTimeMillis()); visitor.setArrivedAt(arrivedAt); visitor.setCarType(carType); visitor.setRegNumber(regNumber); repository.save(visitor); return arrivedAt; } /** * Метод для регистрации убытия ТС с парковки * * @param regNumber - номер автомобиля, убывающего с парковки * @return - время убытия автомобиля */ @PostMapping(path = "/exit") @ResponseStatus(value = HttpStatus.OK) public Timestamp unregisterVisitor(String regNumber) { Timestamp leftAt = new Timestamp(System.currentTimeMillis()); repository.setLeftAtForRegNumber(leftAt, regNumber); System.out.println(leftAt); return leftAt; } /** * Метод для формирования итоговой отчетности * * @param startDate - время, с которого начинается сбор сведений * @param endDate - время, до которого проводится сбор сведений * @return {@link ReportDto} - dto для потребителя с требуемой отчетностью */ @GetMapping(path = "/report") @ResponseStatus(value = HttpStatus.OK) public ReportDto getReport(@RequestParam(name = "start_date") Timestamp startDate, @RequestParam(name = "end_date") Timestamp endDate) { ReportDto reportDto = new ReportDto(); //Заполняем отчетность по среднему времени парковки за указанный период int averageSecsParkingTime = repository.getAverageVisitingTimeInSeconds(startDate, endDate); String avgTime = Duration.ofSeconds(averageSecsParkingTime).toString(); reportDto.setAvgParkingTime(avgTime); //Определяем количество занятых мест на парковке int busyParkingLots = repository.getAmountOfBusyParkingLots(); reportDto.setBusyLots(busyParkingLots); //Определяем количество свободных мест int emptyParkingLots = props.getLotsAmount() - busyParkingLots; reportDto.setEmptyLots(emptyParkingLots); return reportDto; } }