diff --git a/src/server/types/Item.js b/src/server/types/Item.js index 58f13c5..f375f5a 100644 --- a/src/server/types/Item.js +++ b/src/server/types/Item.js @@ -1018,11 +1018,44 @@ const resolvers = { return null; } - await db.query( - `DELETE FROM closet_hangers - WHERE item_id = ? AND user_id = ? AND owned = ?;`, - [itemId, currentUserId, true], - ); + const connection = await db.getConnection(); + try { + // Get the relevant lists this is currently in. + await connection.beginTransaction(); + const [rows] = await connection.query( + `SELECT DISTINCT list_id FROM closet_hangers + WHERE item_id = ? AND user_id = ? AND owned = ? AND + list_id IS NOT NULL`, + [itemId, currentUserId, true], + ); + + // Mark all these lists as updated. + const listIds = rows.map((row) => row.list_id); + const qs = listIds.map((_) => "?"); + const now = new Date(); + await connection.query( + `UPDATE closet_lists SET updated_at = ? WHERE id IN (${qs})`, + [now, ...listIds], + ); + + // Delete all these hangers. (NOTE: This includes ones not in a list!) + await connection.query( + `DELETE FROM closet_hangers + WHERE item_id = ? AND user_id = ? AND owned = ?;`, + [itemId, currentUserId, true], + ); + + await connection.commit(); + } catch (error) { + try { + await connection.rollback(); + } catch (error2) { + console.warn(`Error rolling back transaction`, error2); + } + throw error; + } finally { + await connection.release(); + } return { id: itemId }; }, @@ -1083,11 +1116,44 @@ const resolvers = { return null; } - await db.query( - `DELETE FROM closet_hangers - WHERE item_id = ? AND user_id = ? AND owned = ?;`, - [itemId, currentUserId, false], - ); + const connection = await db.getConnection(); + try { + // Get the relevant lists this is currently in. + await connection.beginTransaction(); + const [rows] = await connection.query( + `SELECT DISTINCT list_id FROM closet_hangers + WHERE item_id = ? AND user_id = ? AND owned = ? AND + list_id IS NOT NULL`, + [itemId, currentUserId, false], + ); + + // Mark all these lists as updated. + const listIds = rows.map((row) => row.list_id); + const qs = listIds.map((_) => "?"); + const now = new Date(); + await connection.query( + `UPDATE closet_lists SET updated_at = ? WHERE id IN (${qs})`, + [now, ...listIds], + ); + + // Delete all these hangers. (NOTE: This includes ones not in a list!) + await connection.query( + `DELETE FROM closet_hangers + WHERE item_id = ? AND user_id = ? AND owned = ?;`, + [itemId, currentUserId, false], + ); + + await connection.commit(); + } catch (error) { + try { + await connection.rollback(); + } catch (error2) { + console.warn(`Error rolling back transaction`, error2); + } + throw error; + } finally { + await connection.release(); + } return { id: itemId }; },