package com.eactive.eai.rms.onl.loader.service;

import org.springframework.data.domain.Example;
import org.springframework.data.domain.ExampleMatcher;

import java.util.List;

public abstract class DeployResource<Probe> {

    /**
     * 배포시 삭제 대상 기준 Column을 포함한 쿼리를 생성하는 Example을 생성합니다.
     * ex) BizKey(FR03,필드추출키정보) 배포시 BizKey의 ID가 아니라 eaisvcname을 기준으로 deleteAll하기 위함
     */
    public Example<Probe> exampleForRemove() {
        ExampleMatcher matcher = ExampleMatcher.matching()
                .withIgnoreNullValues();
        for (String field : exactMatchFields()) {
            matcher = matcher.withMatcher(field, ExampleMatcher.GenericPropertyMatchers.exact());
        }
        return Example.of(probeForExample(), matcher);
    }

    public abstract Probe probeForExample();

    public abstract List<String> exactMatchFields();


}
