기존 패턴

previous pattern.png

이슈

previous pattern.png

원인

// Controller
    @GetMapping("api/datasets/requested")
    public ResponseEntity<DataResponseDto> getRequestedSamples() {
        DataResponseDto responseDto = datasetService.getRequestedSamples();
        return new ResponseEntity<>(responseDto, HttpStatus.OK);
    }
...
// Service
public DataResponseDto getRequestedSamples() {
        List<SampleResponseDto> responseDtoList = sampleRepository.findRequestedSample().stream()
                .map(this::toSampleResponseDto)
                .collect(Collectors.toList());

        return new DataResponseDto(responseDtoList);
    }
    
...

// Repository
    @Query("SELECT s FROM Sample s " +
            "WHERE s.status IN ('REQUESTED_UPDATE', 'REQUESTED_DELETE')" +
            "ORDER BY s.versionId ASC")
    List<Sample> findRequestedSample();
    ...
@PatchMapping("api/datasets/{id}/approve")
    public ResponseEntity<SampleApproveResponseDto> approveSample(@Valid @PathVariable String id) throws JsonProcessingException {
        SampleApproveResponseDto responseDto = datasetService.approveSample(id);
        return new ResponseEntity<>(responseDto, HttpStatus.OK);
    }

해결

Updated Event Sourcing.png

  1. 여러 개의 컬럼 sql_query natural_question 값 또는 샘플에 할당된 라벨 Updated Request를 진행할 경우 → 각 컬럼 별(Attribution 별) 이벤트를 분리해서 저장
  2. 어드민이 조회할 시 사용자별 각 컬럼별 = 이벤트별 최신 값을 반영한 값을 조회 가능
  3. 채택된 이벤트는 APPROVED 상태로, 그리고 최신 값들만 반영하여 UPDATED 값으로 저장

Example

image.png