fix(mailsync): AI 요약이 NULL summary 행을 못 잡던 버그 수정
All checks were successful
build-and-push / build (push) Successful in 32s
All checks were successful
build-and-push / build (push) Successful in 32s
기존 메일 569건은 summary 컬럼 추가 이전부터 있던 행이라 값이 NULL인데, 요약 대상 선택 쿼리가 summary='' 만 검색해서(SQL에서 NULL='' 는 거짓) 영원히 선택되지 않았다. COALESCE(summary,'')='' 로 NULL·빈문자열 모두 포함. 회당 상한 40→150으로 백로그 드레인 가속, 요약 실패는 silent skip 대신 로그로 남김. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
ed4ef537e6
commit
654f17d487
@ -65,12 +65,19 @@ func syncProjectMail(ctx context.Context, db *gorm.DB, mailer *mailsync.Service,
|
||||
|
||||
// AI 자동 요약: 아직 요약이 없는 메일에만 생성(긁어올 때마다 신규분에 채움). 비용·시간
|
||||
// 폭주 방지로 회당 상한.
|
||||
// 미생성 판정은 COALESCE(summary,'')='' — summary 컬럼 추가 이전에 저장된 행은 값이
|
||||
// NULL이라 `summary = ''`로는 영원히 안 잡혔다(SQL에서 NULL = '' 는 거짓). NULL·빈문자열
|
||||
// 둘 다 포함해야 기존 백로그도 채워진다.
|
||||
if cl := ai.New(aiKey); cl.Enabled() {
|
||||
var need []models.ProjectMailMsg
|
||||
db.Where("project_id = ? AND summary = '' AND snippet <> ''", projectID).Limit(40).Find(&need)
|
||||
db.Where("project_id = ? AND COALESCE(summary, '') = '' AND snippet <> ''", projectID).Limit(150).Find(&need)
|
||||
for _, row := range need {
|
||||
sum, err := cl.Summarize(ctx, row.Subject+"\n"+row.Snippet)
|
||||
if err == nil && sum != "" {
|
||||
if err != nil {
|
||||
log.Printf("mailsync: AI 요약 실패 (project=%s msg=%s): %v", projectID, row.ID, err)
|
||||
continue
|
||||
}
|
||||
if sum != "" {
|
||||
db.Model(&models.ProjectMailMsg{}).Where("id = ?", row.ID).Update("summary", sum)
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user