← back to Wallco Ai
/api/rooms: for non-admin, dedup by room_type + drop rooms whose /designs/room PNG is missing — PDP gallery no longer shows black/orphan tiles (design 12 had 4 orphan living_room rows w/ no file)
df69588f21199a081c9e0c37b1781953631dad46 · 2026-05-29 23:15:57 -0700 · Steve Abrams
Files touched
Diff
commit df69588f21199a081c9e0c37b1781953631dad46
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Fri May 29 23:15:57 2026 -0700
/api/rooms: for non-admin, dedup by room_type + drop rooms whose /designs/room PNG is missing — PDP gallery no longer shows black/orphan tiles (design 12 had 4 orphan living_room rows w/ no file)
---
server.js | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/server.js b/server.js
index e77653a..17e4c92 100644
--- a/server.js
+++ b/server.js
@@ -19613,7 +19613,24 @@ app.get('/api/rooms', (req, res) => {
FROM (SELECT id, design_id, room_type, angle, image_path, filename, file_size_bytes,
selected_for_marketing, removed_at, removed_reason, notes, created_at
FROM wallco_rooms ${whereSQL}) t;`);
- res.json({ ok: true, rooms: JSON.parse(raw || '[]'), admin: isRoomsAdmin(req) });
+ let rooms = JSON.parse(raw || '[]');
+ // Customer-facing cleanup (2026-05-29): wallco_rooms can hold orphan rows
+ // (a room_type whose rendered PNG no longer exists on disk) and duplicate
+ // rows per type. For non-admin viewers, dedup by room_type (newest wins —
+ // rows are ordered created_at DESC) and drop any room whose canonical
+ // /designs/room PNG is missing, so the PDP "Generated rooms" gallery never
+ // shows black/broken tiles. Admins still see every row (to manage them).
+ if (!isRoomsAdmin(req)) {
+ const _roomsDir = path.join(__dirname, 'data', 'rooms');
+ const _seen = new Set();
+ rooms = rooms.filter(r => {
+ if (_seen.has(r.room_type)) return false;
+ if (!fs.existsSync(path.join(_roomsDir, `design_${r.design_id}_${r.room_type}.png`))) return false;
+ _seen.add(r.room_type);
+ return true;
+ });
+ }
+ res.json({ ok: true, rooms, admin: isRoomsAdmin(req) });
} catch (e) {
res.status(500).json({ ok: false, error: e.message });
}
← 25bdcd2 PDP gallery: drop inline onerror (broke inside server templa
·
back to Wallco Ai
·
docs: mac2-prod parity audit 2026-05-29 (5/5 files identical 70fedce →