fix: title increment based on DB max, not stored template only
Release APK / build (push) Has been cancelled

After each incident save, query existing titles with the same prefix
to find the real max number, then use max(dbMax, tplNum) + 1.
Prevents duplicate counters when incidents were created before the
template was configured.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-23 15:26:10 +02:00
parent a74d27085b
commit 1437e99cbb
2 changed files with 23 additions and 8 deletions
+9 -8
View File
@@ -16,6 +16,7 @@ import {
updateIncident,
getIncidentById,
getDistinctServices,
getMaxTitleNumber,
} from "@/lib/db";
import { Colors } from "@/constants/theme";
import { useVoice } from "@/hooks/useVoice";
@@ -50,13 +51,6 @@ const LABEL_STYLE = {
type VoiceField = "title" | "service" | "symptom" | "rootCause" | "fix";
function incrementTemplate(template: string): string {
const match = template.match(/^([\s\S]*?)(\d+)$/);
if (!match) return template;
const [, prefix, numStr] = match;
const next = (parseInt(numStr, 10) + 1).toString().padStart(numStr.length, "0");
return prefix + next;
}
export default function NewIncidentScreen() {
const { editId } = useLocalSearchParams<{ editId?: string }>();
@@ -180,7 +174,14 @@ export default function NewIncidentScreen() {
await createIncident(form);
const tpl = await SecureStore.getItemAsync("pref_title_template");
if (tpl) {
await SecureStore.setItemAsync("pref_title_template", incrementTemplate(tpl));
const match = tpl.match(/^([\s\S]*?)(\d+)$/);
if (match) {
const [, prefix, numStr] = match;
const dbMax = await getMaxTitleNumber(prefix);
const tplNum = parseInt(numStr, 10);
const next = (Math.max(dbMax, tplNum) + 1).toString().padStart(numStr.length, "0");
await SecureStore.setItemAsync("pref_title_template", prefix + next);
}
}
}
router.back();