always set lane
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
35
apps/web/src/functions/update-timeline-item.ts
Normal file
35
apps/web/src/functions/update-timeline-item.ts
Normal 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;
|
||||
});
|
||||
Reference in New Issue
Block a user