feat(veckoplan): fyll alla maltider, variation, ratt maltidstyp + plan-atgarder
Veckoplanen fyller nu ALLA slots (stegvis fallback, inga tomma dagar), undviker tva soppor/samma kok i rad och styr soppor mot lunch (inte middag). Default lunch+middag varje dag. Plan-atgarder: 'Jag lagade detta' bara ratt dag; 'Hoppa over' ersatt med 'Ta bort' (ny DELETE /v1/week-plans/:id/entries/:entryId). Verifierat mot 393 recept: 14/14 slots fyllda, 0 upprepningar, 0 soppor pa middag.
This commit is contained in:
@@ -146,6 +146,38 @@ export async function planningRoutes(app: FastifyInstance) {
|
||||
return row;
|
||||
});
|
||||
|
||||
// Ta bort en planpost helt (t.ex. "Ta bort" på en måltid man inte lagat).
|
||||
app.delete("/v1/week-plans/:id/entries/:entryId", auth, async (req) => {
|
||||
const params = req.params as { id: string; entryId: string };
|
||||
const [plan] = await app.db
|
||||
.select()
|
||||
.from(schema.weekPlans)
|
||||
.where(eq(schema.weekPlans.id, params.id))
|
||||
.limit(1);
|
||||
if (!plan) throw errors.notFound("Planen finns inte.");
|
||||
await requireMembership(app.db, plan.householdId, req.userId);
|
||||
|
||||
const [row] = await app.db
|
||||
.delete(schema.weekPlanEntries)
|
||||
.where(
|
||||
and(
|
||||
eq(schema.weekPlanEntries.id, params.entryId),
|
||||
eq(schema.weekPlanEntries.weekPlanId, params.id),
|
||||
),
|
||||
)
|
||||
.returning();
|
||||
if (!row) throw errors.notFound("Planposten finns inte.");
|
||||
|
||||
await emitEvent(app.db, {
|
||||
type: "WEEK_PLAN_UPDATED",
|
||||
payload: { weekPlanId: params.id, reason: "removed" },
|
||||
userId: req.userId,
|
||||
householdId: plan.householdId,
|
||||
correlationId: req.correlationId,
|
||||
});
|
||||
return { ok: true };
|
||||
});
|
||||
|
||||
app.post("/v1/week-plans/:id/activate", auth, async (req) => {
|
||||
const { id } = parse(idParamSchema, req.params);
|
||||
const [plan] = await app.db
|
||||
|
||||
Reference in New Issue
Block a user