uat→main (PROD): GRO-2157 nav export + GRO-2225/2235 (frozen @4868f18) (#192)
feat: nav export + conflict guard + UAT seed (GRO-2157, GRO-2225, GRO-2235)
Squash-merges PR #192: uat→main PROD promotion.
Freezes at validated SHA 4868f18 (UAT regression GRO-2261 11/11 PASS).
Bundles: GRO-2157 (nav export), GRO-2225 (UAT seed), GRO-2235 (conflict guard).
CTO-reviewed and approved (review #4542).
Co-authored-by: Flea Flicker <22+gb_flea@noreply.git.farh.net>
Co-committed-by: Flea Flicker <22+gb_flea@noreply.git.farh.net>
This commit was merged in pull request #192.
This commit is contained in:
+26
-10
@@ -596,16 +596,32 @@ portalRouter.post(
|
||||
const body = c.req.valid("json");
|
||||
const clientId = c.get("portalClientId");
|
||||
|
||||
const [entry] = await db
|
||||
.insert(waitlistEntries)
|
||||
.values({
|
||||
clientId,
|
||||
petId: body.petId,
|
||||
serviceId: body.serviceId,
|
||||
preferredDate: body.preferredDate,
|
||||
preferredTime: normalizeTime(body.preferredTime),
|
||||
})
|
||||
.returning();
|
||||
let entry;
|
||||
try {
|
||||
[entry] = await db
|
||||
.insert(waitlistEntries)
|
||||
.values({
|
||||
clientId,
|
||||
petId: body.petId,
|
||||
serviceId: body.serviceId,
|
||||
preferredDate: body.preferredDate,
|
||||
preferredTime: normalizeTime(body.preferredTime),
|
||||
})
|
||||
.returning();
|
||||
} catch (err) {
|
||||
// An exact duplicate active waitlist entry violates the partial unique
|
||||
// index idx_waitlist_active_unique (client_id, pet_id, service_id,
|
||||
// preferred_date, preferred_time WHERE status='active'). postgres-js
|
||||
// surfaces this as SQLSTATE 23505 — return a friendly 409 rather than a
|
||||
// generic 500 (GRO-2235). Unrelated errors still surface as 500.
|
||||
if ((err as { code?: string })?.code === "23505") {
|
||||
return c.json(
|
||||
{ error: "You already have a booking for this pet at that date and time." },
|
||||
409
|
||||
);
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
|
||||
return c.json(entry, 201);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user