always set lane

This commit is contained in:
2026-02-25 20:00:43 +01:00
parent ea22da9e5a
commit f3b645ac53
13 changed files with 325 additions and 102 deletions

View File

@@ -1,8 +1,10 @@
import { db } from "@zendegi/db";
import { timelineItem } from "@zendegi/db/schema/timeline";
import { eq } from "drizzle-orm";
import { createServerFn } from "@tanstack/react-start";
import { z } from "zod";
import { authMiddleware } from "@/middleware/auth";
import { assignLane } from "@/lib/assign-lane";
export const createTimelineItem = createServerFn({ method: "POST" })
.middleware([authMiddleware])
@@ -19,6 +21,12 @@ export const createTimelineItem = createServerFn({ method: "POST" })
})
)
.handler(async ({ data }) => {
const existing = await db.query.timelineItem.findMany({
where: eq(timelineItem.timelineGroupId, data.timelineGroupId),
});
const lane = assignLane(existing, data.start, data.end ?? null);
const [newItem] = await db
.insert(timelineItem)
.values({
@@ -27,6 +35,7 @@ export const createTimelineItem = createServerFn({ method: "POST" })
start: data.start,
end: data.end,
timelineGroupId: data.timelineGroupId,
lane,
})
.returning();

View File

@@ -0,0 +1,35 @@
import { db } from "@zendegi/db";
import { timelineItem } from "@zendegi/db/schema/timeline";
import { eq } from "drizzle-orm";
import { createServerFn } from "@tanstack/react-start";
import { z } from "zod";
import { authMiddleware } from "@/middleware/auth";
export const updateTimelineItem = createServerFn({ method: "POST" })
.middleware([authMiddleware])
.inputValidator(
z.object({
id: z.string().uuid(),
start: z.string().transform((s) => new Date(s)),
end: z
.string()
.nullable()
.transform((s) => (s ? new Date(s) : null)),
timelineGroupId: z.string().uuid(),
lane: z.number().int().min(1),
})
)
.handler(async ({ data }) => {
const [updated] = await db
.update(timelineItem)
.set({
start: data.start,
end: data.end,
timelineGroupId: data.timelineGroupId,
lane: data.lane,
})
.where(eq(timelineItem.id, data.id))
.returning();
return updated;
});