修复模板与任务不一致:增删模板后立即对账当天快照
- 删除/新增模板后调用 ensureDay 对账当天,孩子端未完成的残留任务 立即同步移除,避免"孩子有任务但任务管理没有" - 已清理历史残留:来源模板已删除的未完成快照 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
cd1ac4b207
commit
920e64bfb1
@@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user