package httpapi import ( "fmt" "strings" ) // normalizeImportStatus 把报名表 status 列归一成 entries.status 允许的四个取值。 // // entries.status 上有 CHECK (status IN ('registered','scratched','dq','dns')), // 而填表人习惯写大写(DNS、Registered)或中文(退赛、取消资格),原样入库会撞约束, // 报出来的又是原始 SQLite 错误,现场看不出是 status 这一格填错了。 func normalizeImportStatus(raw string) (string, error) { // 中文输入法打出的全角空格 TrimSpace 不认,先统一成半角再裁首尾。 v := strings.TrimSpace(strings.ReplaceAll(raw, "\u3000", " ")) // 大小写不敏感,所以先转小写再比对;中文别名不受影响。 switch strings.ToLower(v) { case "": // 空值即建表默认值:不填就是不填,按正常参赛处理。 return "registered", nil case "registered", "正常", "正常参赛", "参赛": return "registered", nil case "scratched", "退赛", "弃赛", "请假": return "scratched", nil case "dq", "取消资格", "犯规": return "dq", nil case "dns", "未出场", "未到", "缺席": return "dns", nil } return "", fmt.Errorf("status「%s」无法识别,只能填 registered / scratched / dq / dns(或留空)", v) }