TranslationStateMachine.java
package com.yumu.noveltranslator.domain.service;
import com.yumu.noveltranslator.enums.TranslationStatus;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.Set;
/**
* 翻译任务状态机
* 合法转换:
* PENDING → {PROCESSING}
* PROCESSING → {COMPLETED, FAILED}
* FAILED → {PENDING} (重试)
*/
@Component
public class TranslationStateMachine {
private static final Map<TranslationStatus, Set<TranslationStatus>> VALID_TRANSITIONS = Map.of(
TranslationStatus.PENDING, Set.of(TranslationStatus.PROCESSING),
TranslationStatus.PROCESSING, Set.of(TranslationStatus.COMPLETED, TranslationStatus.FAILED),
TranslationStatus.FAILED, Set.of(TranslationStatus.PENDING)
);
public void validateTransition(TranslationStatus current, TranslationStatus target) {
if (!VALID_TRANSITIONS.getOrDefault(current, Set.of()).contains(target)) {
throw new IllegalStateException("非法状态转换: " + current + " → " + target);
}
}
}