diff --git a/src/database.ts b/src/database.ts index 919f69c..0c41186 100644 --- a/src/database.ts +++ b/src/database.ts @@ -217,15 +217,15 @@ export async function getRandomCECData(pids: number[], gameID: number): Promise< return null; } -export async function deleteOldCECData(olderThan: Date, limit: number): Promise<{ _id: string; file_key: string }[]> { +export async function deleteOldCECData(olderThan: Date, limit: number): Promise<{ id: string; file_key: string }[]> { verifyConnected(); const toDelete = await CECData.find({ created: { $lt: olderThan.getTime() } - }, { file_key: 1 }, { limit }); - const ids = toDelete.map(v => v.data); + }).limit(limit).sort({ created: 1 }).select({ file_key: 1 }); + const ids = toDelete.map(v => v.id); await CECData.deleteMany({ _id: { @@ -233,5 +233,13 @@ export async function deleteOldCECData(olderThan: Date, limit: number): Promise< } }); - return toDelete.map(v => ({ _id: v._id.toString(), file_key: v.file_key })); + // Remove slot if their newest data is what we've just deleted + // This is safe because everything older than the deleted data is also gone + await CECSlot.deleteMany({ + latest_data_id: { + $in: ids + } + }); + + return toDelete.map(v => ({ id: v.id, file_key: v.file_key })); } diff --git a/src/models/cec-slot.ts b/src/models/cec-slot.ts index 027a2c9..65fac50 100644 --- a/src/models/cec-slot.ts +++ b/src/models/cec-slot.ts @@ -8,5 +8,6 @@ const CECSlotSchema = new mongoose.Schema('CECSlot', CECSlotSchema);