/
Sturon
/
Diplom
Обзор
Документация
Войти
/
Sturon
/
Diplom
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/src/main/java/ru/diplom/vision/api/ApiMapper.java
196 строк
7 KB
Sturon
Initial
03 июн 2026, 15:01
03 июн 2026, 15:01
17b44a2
Код
Авторство
О чём код?
package ru.diplom.vision.api; import java.util.List; import org.springframework.stereotype.Component; import ru.diplom.vision.api.dto.CameraResponse; import ru.diplom.vision.api.dto.DetectedDefectResponse; import ru.diplom.vision.api.dto.InspectionItemDetailsResponse; import ru.diplom.vision.api.dto.InspectionItemSummaryResponse; import ru.diplom.vision.api.dto.PendingInspectionResponse; import ru.diplom.vision.api.dto.ProfileDetailsResponse; import ru.diplom.vision.api.dto.ProfileStatsResponse; import ru.diplom.vision.api.dto.ProfileSummaryResponse; import ru.diplom.vision.api.dto.ReferenceImageResponse; import ru.diplom.vision.api.dto.RoiResponse; import ru.diplom.vision.domain.CameraSource; import ru.diplom.vision.domain.DetectedDefect; import ru.diplom.vision.domain.InspectionItem; import ru.diplom.vision.domain.InspectionProfile; import ru.diplom.vision.domain.ReferenceImage; import ru.diplom.vision.domain.RegionOfInterest; import ru.diplom.vision.service.StorageService; @Component public class ApiMapper { private final StorageService storageService; public ApiMapper(StorageService storageService) { this.storageService = storageService; } public CameraResponse toCameraResponse(CameraSource cameraSource) { return new CameraResponse( cameraSource.getId(), cameraSource.getName(), cameraSource.getType(), cameraSource.getLocation(), cameraSource.isActive(), cameraSource.getNotes(), cameraSource.getCreatedAt() ); } public ReferenceImageResponse toReferenceImageResponse(ReferenceImage referenceImage) { return new ReferenceImageResponse( referenceImage.getId(), referenceImage.getName(), storageService.resolvePublicUrl(referenceImage.getStoragePath()), referenceImage.getMimeType(), referenceImage.getWidth(), referenceImage.getHeight(), toRoiResponses(referenceImage), referenceImage.getCreatedAt() ); } public ProfileSummaryResponse toProfileSummaryResponse(InspectionProfile profile, ProfileStatsResponse stats) { return new ProfileSummaryResponse( profile.getId(), profile.getName(), profile.getDescription(), profile.getStatus(), profile.getDetectorMode(), profile.isAnalysisEnabled(), profile.getCameraSource().getId(), profile.getCameraSource().getName(), profile.getCameraSource().isActive(), profile.getReferenceImage().getId(), profile.getReferenceImage().getName(), storageService.resolvePublicUrl(profile.getReferenceImage().getStoragePath()), stats ); } public ProfileDetailsResponse toProfileDetailsResponse(InspectionProfile profile, ProfileStatsResponse stats) { return new ProfileDetailsResponse( profile.getId(), profile.getName(), profile.getDescription(), profile.getStatus(), profile.getDetectorMode(), profile.isAnalysisEnabled(), toCameraResponse(profile.getCameraSource()), toReferenceImageResponse(profile.getReferenceImage()), stats, profile.getCreatedAt(), profile.getUpdatedAt() ); } public InspectionItemSummaryResponse toInspectionItemSummaryResponse(InspectionItem item) { return new InspectionItemSummaryResponse( item.getId(), item.getInspectedAt(), item.getStatus(), storageService.resolvePublicUrl(item.getSourceImagePath()), storageService.resolvePublicUrl(item.getAnnotatedImagePath()), item.getDefectCount(), item.getProcessingTimeMs(), item.getSummary() ); } public InspectionItemDetailsResponse toInspectionItemDetailsResponse(InspectionItem item) { List<DetectedDefectResponse> defects = item.getDefects().stream() .map(this::toDetectedDefectResponse) .toList(); return new InspectionItemDetailsResponse( item.getId(), item.getProfile().getId(), item.getProfile().getName(), item.getInspectedAt(), item.getStatus(), storageService.resolvePublicUrl(item.getSourceImagePath()), storageService.resolvePublicUrl(item.getAnnotatedImagePath()), item.getDefectCount(), item.getProcessingTimeMs(), item.getSummary(), defects ); } public PendingInspectionResponse toPendingInspectionResponse(InspectionItem item) { InspectionProfile profile = item.getProfile(); return new PendingInspectionResponse( item.getId(), profile.getId(), profile.getName(), profile.getCameraSource().getId(), item.getInspectedAt(), toRoiResponses(profile.getReferenceImage()) ); } public ProfileStatsResponse toStats(long totalCount, long okCount, long defectCount) { double defectRate = totalCount == 0 ? 0.0 : defectCount * 100.0 / totalCount; return new ProfileStatsResponse(totalCount, okCount, defectCount, defectRate); } private DetectedDefectResponse toDetectedDefectResponse(DetectedDefect defect) { return new DetectedDefectResponse( defect.getId(), defect.getDefectType(), defect.getRoiName(), defect.getRoiOrder(), defect.getConfidence(), defect.getX(), defect.getY(), defect.getWidth(), defect.getHeight(), storageService.resolvePublicUrl(defect.getCropImagePath()), defect.getNotes() ); } private List<RoiResponse> toRoiResponses(ReferenceImage referenceImage) { if (!referenceImage.getRegionsOfInterest().isEmpty()) { return referenceImage.getRegionsOfInterest().stream() .map(this::toRoiResponse) .toList(); } if (referenceImage.getRegionOfInterest() == null) { return List.of(); } RegionOfInterest roi = referenceImage.getRegionOfInterest(); return List.of(new RoiResponse( roi.getId(), toRoiName(roi), 0, roi.getX(), roi.getY(), roi.getWidth(), roi.getHeight() )); } private RoiResponse toRoiResponse(RegionOfInterest roi) { return new RoiResponse( roi.getId(), toRoiName(roi), roi.getZoneOrder(), roi.getX(), roi.getY(), roi.getWidth(), roi.getHeight() ); } private String toRoiName(RegionOfInterest roi) { if (roi.getName() == null || roi.getName().isBlank()) { return "Зона " + (roi.getZoneOrder() + 1); } return roi.getName(); } }