修复模板与任务不一致:增删模板后立即对账当天快照

- 删除/新增模板后调用 ensureDay 对账当天,孩子端未完成的残留任务
  立即同步移除,避免"孩子有任务但任务管理没有"
- 已清理历史残留:来源模板已删除的未完成快照

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
jacobxu666
2026-08-04 23:10:18 +08:00
co-authored by Claude Opus 4.8
parent cd1ac4b207
commit 920e64bfb1
+5 -2
View File
@@ -8,6 +8,7 @@ import { db } from "@/db";
import { activationCodes, sessions, taskInstances, taskTemplates, users } from "@/db/schema"; import { activationCodes, sessions, taskInstances, taskTemplates, users } from "@/db/schema";
import { SUBJECT_VALUES } from "@/db/schema"; import { SUBJECT_VALUES } from "@/db/schema";
import { todayStr } from "@/lib/dates"; import { todayStr } from "@/lib/dates";
import { ensureDay } from "@/lib/tasks";
import { getSessionUser } from "@/lib/auth"; import { getSessionUser } from "@/lib/auth";
function hashCode(code: string) { function hashCode(code: string) {
@@ -128,21 +129,23 @@ export async function addTemplate(formData: FormData) {
requiresPhoto: parsed.data.requiresPhoto, requiresPhoto: parsed.data.requiresPhoto,
sortOrder: maxRow.maxSort + 1, sortOrder: maxRow.maxSort + 1,
}); });
await ensureDay(parsed.data.childId, todayStr());
revalidatePath("/parent"); revalidatePath("/parent");
} }
// 删除模板任务(同样不影响已生成的历史任务) // 删除模板任务:删除后立即对账当天,孩子端未完成的对应任务会同步移除
export async function deleteTemplate(templateId: number) { export async function deleteTemplate(templateId: number) {
const parent = await getSessionUser(); const parent = await getSessionUser();
if (!parent || parent.role !== "parent") throw new Error("请先以家长身份登录"); if (!parent || parent.role !== "parent") throw new Error("请先以家长身份登录");
const [row] = await db const [row] = await db
.select({ id: taskTemplates.id }) .select({ id: taskTemplates.id, childUserId: taskTemplates.childUserId })
.from(taskTemplates) .from(taskTemplates)
.innerJoin(users, eq(users.id, taskTemplates.childUserId)) .innerJoin(users, eq(users.id, taskTemplates.childUserId))
.where(and(eq(taskTemplates.id, templateId), eq(users.familyId, parent.familyId))) .where(and(eq(taskTemplates.id, templateId), eq(users.familyId, parent.familyId)))
.limit(1); .limit(1);
if (!row) throw new Error("任务不存在"); if (!row) throw new Error("任务不存在");
await db.delete(taskTemplates).where(eq(taskTemplates.id, templateId)); await db.delete(taskTemplates).where(eq(taskTemplates.id, templateId));
await ensureDay(row.childUserId, todayStr());
revalidatePath("/parent"); revalidatePath("/parent");
} }