AnalyzeNodeChildrenUseCase.java

package com.taxonomy.analysis.usecase;

import com.taxonomy.analysis.service.LlmService;
import com.taxonomy.catalog.model.TaxonomyNode;
import com.taxonomy.catalog.service.TaxonomyService;
import com.taxonomy.dto.LlmCallDetail;
import org.springframework.stereotype.Service;

import java.util.List;

/** Application use case for interactive, one-level taxonomy analysis. */
@Service
public class AnalyzeNodeChildrenUseCase {

    private final TaxonomyService taxonomyService;
    private final LlmService llmService;

    public AnalyzeNodeChildrenUseCase(TaxonomyService taxonomyService, LlmService llmService) {
        this.taxonomyService = taxonomyService;
        this.llmService = llmService;
    }

    public AnalyzeNodeChildrenResult analyze(AnalyzeNodeChildrenCommand command) {
        List<TaxonomyNode> children = taxonomyService.getChildrenOf(command.parentCode());
        if (children.isEmpty()) {
            return AnalyzeNodeChildrenResult.empty();
        }
        LlmCallDetail detail = llmService.analyzeSingleBatchDetailed(
                command.businessText(), children, command.parentScore());
        return new AnalyzeNodeChildrenResult(
                detail.getScores(),
                detail.getReasons(),
                detail.getPrompt(),
                detail.getRawResponse(),
                detail.getProvider(),
                detail.getDurationMs(),
                detail.getError());
    }
}