Rewrite trader service for V4 P0

This commit is contained in:
Codex
2026-06-26 21:53:22 +08:00
parent 2fe4077164
commit 5d210053d0
184 changed files with 2780 additions and 6945 deletions
@@ -1,50 +1,23 @@
package com.quantai.trader.evidence;
import com.quantai.trader.TestFixtures;
import com.quantai.trader.domain.StageDecision;
import com.quantai.trader.domain.TraderEvidence;
import com.quantai.trader.persistence.TraderEvidenceRepository;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
class EvidenceAppenderTest {
@Test
void appendsBlockingEvidenceToRepository() {
CapturingEvidenceRepository repository = new CapturingEvidenceRepository();
EvidenceAppender appender = new EvidenceAppender(repository);
void appendsEvidenceWithStageReasonAndDetails() {
EvidenceAppender appender = new EvidenceAppender();
appender.append(
TestFixtures.cycle(com.quantai.trader.enums.TraderState.CONTEXT_CHECK),
"CONTEXT_GATE",
StageDecision.block("DATA_MISSING", "TRADER_DATA_QUALITY_FAILED")
);
TraderEvidence item = appender.append("run-1", "cycle-1", "PM_DECISION", true,
"OPEN_LONG_PM_PASS", null, Map.of("action", "OPEN_LONG"));
assertThat(repository.findByCycleId("trader_run_test", "trader_cycle_test"))
.singleElement()
.satisfies(evidence -> {
assertThat(evidence.pass()).isFalse();
assertThat(evidence.blocker()).isEqualTo("TRADER_DATA_QUALITY_FAILED");
});
}
private static class CapturingEvidenceRepository implements TraderEvidenceRepository {
private final List<TraderEvidence> evidence = new ArrayList<>();
@Override
public void insert(TraderEvidence evidence) {
this.evidence.add(evidence);
}
@Override
public List<TraderEvidence> findByCycleId(String runId, String cycleId) {
return evidence.stream()
.filter(item -> item.runId().equals(runId) && item.cycleId().equals(cycleId))
.toList();
}
assertThat(item.evidenceId()).isEqualTo("evidence_cycle-1_0");
assertThat(item.pass()).isTrue();
assertThat(item.detailsJson()).containsEntry("action", "OPEN_LONG");
assertThat(appender.all()).containsExactly(item);
}
}