Implement automated deletion of expired reservation requests per data retention policy #332
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Per SRD/BRD data retention policy, CLOSED reservation requests must be deleted after 6 months. This implements automated cleanup via daily Azure Functions timer trigger.
Changes
Cellix Framework Extension
registerAzureFunctionTimerHandler()to support timer triggers alongside HTTP handlershttp|timer)Domain & Persistence
ReservationRequest.requestDelete()withcanDeleteRequestpermission (system passport only)ReservationRequestReadRepository.getExpiredClosed()query:state='Closed' AND updatedAt < (now - 182.5 days)Application Service
deleteExpiredReservationRequests()with OpenTelemetry tracingreservation_requests.expired.count,reservation_requests.deleted.countTimer Trigger
0 0 2 * * *)forRequest()without auth headerTesting
getExpiredClosed()repository queryapps/docs/docs/data-retention-reservation-requests.mdNotes
Follows same pattern as issue #199 (Listing deletion). System passport grants deletion permission for automated cleanup only.
Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.