"use server"; import { getAdminUser } from "@/lib/admin-permissions"; import { pool } from "@/lib/db"; import { logAuditEvent } from "@/actions/audit"; export type UpdateStopResult = | { success: true } | { success: false; error: string }; export async function updateStop( stopId: string, brandId: string, data: { city: string; state: string; location: string; date: string; time: string; active: boolean; address?: string | null; zip?: string | null; cutoff_time?: string | null; } ): Promise { const adminUser = await getAdminUser(); if (!adminUser) return { success: false, error: "Not authenticated" }; if (!adminUser.can_manage_stops) return { success: false, error: "Not authorized" }; if (adminUser.role === "brand_admin" && adminUser.brand_id !== brandId) { return { success: false, error: "Not authorized for this brand" }; } const slug = `${data.city.toLowerCase().replace(/\s+/g, "-")}-${data.date}`; // Direct UPDATE on the legacy stops table — the new-schema Drizzle // stops table doesn't have the columns we need to write. const { rowCount, error } = await pool .query( `UPDATE stops SET city = $1, state = $2, location = $3, date = $4, time = $5, slug = $6, active = $7, brand_id = $8, address = $9, zip = $10, cutoff_time = $11 WHERE id = $12`, [ data.city, data.state, data.location, data.date, data.time, slug, data.active, brandId, data.address ?? null, data.zip ?? null, data.cutoff_time ?? null, stopId, ], ) .then((r) => ({ rowCount: r.rowCount ?? 0, error: null })) .catch((e: unknown) => ({ rowCount: 0, error: e instanceof Error ? e : new Error(String(e)), })); if (error || !rowCount) { return { success: false, error: error ? error.message : "Stop not found", }; } logAuditEvent({ table_name: "stops", record_id: stopId, action: "UPDATE", old_data: {}, new_data: { city: data.city, state: data.state, date: data.date, active: data.active }, brand_id: brandId, }); return { success: true }; }