File size: 1,704 Bytes
688925d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.dalab.autocompliance.model.mapper;

import java.time.LocalDateTime;
import java.util.UUID;

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

import com.dalab.autocompliance.dto.ControlEvaluationRequestDTO;
import com.dalab.autocompliance.dto.ControlEvaluationResponseDTO;
import com.dalab.autocompliance.model.entity.ControlEvaluationJobEntity;

/**
 * Mapper interface for converting between ControlEvaluationJobEntity and DTOs.
 */
@Mapper(imports = {UUID.class, LocalDateTime.class})
public interface ControlEvaluationJobMapper {

    ControlEvaluationJobMapper INSTANCE = Mappers.getMapper(ControlEvaluationJobMapper.class);

    // To DTO (ControlEvaluationResponseDTO is simpler, doesn't carry all entity details by default)
    @Mapping(target = "targetedAssetCount", expression = "java(entity.getTargetAssetIds() != null ? entity.getTargetAssetIds().size() : 0)")
    ControlEvaluationResponseDTO toResponseDto(ControlEvaluationJobEntity entity);

    // From Request DTO to Entity
    @Mapping(target = "jobId", expression = "java(UUID.randomUUID().toString())")
    @Mapping(target = "submittedAt", expression = "java(LocalDateTime.now())")
    @Mapping(target = "status", constant = "QUEUED")
    @Mapping(target = "startedAt", ignore = true)
    @Mapping(target = "completedAt", ignore = true)
    @Mapping(target = "message", ignore = true)
    ControlEvaluationJobEntity fromRequestDto(ControlEvaluationRequestDTO requestDto, String controlId);

    // If you need a more detailed DTO for job status (like ReportJobStatusDTO), you'd create another one.
    // For now, the response DTO is used for the immediate POST response.
}