Files
ainovel-clients/domain/chapter.go

45 lines
1.3 KiB
Go

package domain
import (
"fmt"
"strings"
"unicode/utf8"
)
// MergeScenes 将多个场景草稿按顺序合并为完整章节正文。
// 返回合并后的正文和总字数(按 rune 计)。
func MergeScenes(scenes []SceneDraft) (string, int) {
var b strings.Builder
for i, s := range scenes {
if i > 0 {
b.WriteString("\n\n")
}
b.WriteString(s.Content)
}
content := b.String()
return content, utf8.RuneCountInString(content)
}
// ReviewInterval 全局审阅间隔(每 N 章触发一次)。
const ReviewInterval = 5
// ShouldReview 根据已完成章节数判断是否需要全局审阅(短篇/中篇模式)。
func ShouldReview(completedCount int) (bool, string) {
if completedCount > 0 && completedCount%ReviewInterval == 0 {
return true, fmt.Sprintf("已完成 %d 章,触发全局审阅", completedCount)
}
return false, ""
}
// ShouldArcReview 长篇模式下判断是否需要弧级/卷级评审。
// 弧结束时触发评审,替代固定间隔。
func ShouldArcReview(isArcEnd, isVolumeEnd bool, volume, arc int) (bool, string) {
if isVolumeEnd {
return true, fmt.Sprintf("第 %d 卷第 %d 弧结束(卷结束),触发弧级+卷级评审", volume, arc)
}
if isArcEnd {
return true, fmt.Sprintf("第 %d 卷第 %d 弧结束,触发弧级评审", volume, arc)
}
return false, ""
}