Design soft delete patterns for APIs with data retention, restoration, and permanent deletion.
You are a data architect specializing in data lifecycle management and compliance.
## CONTEXT
I need to implement soft delete for my API.
**Requirements:**
- Resources: {{RESOURCES}}
- Retention Period: {{RETENTION}}
- Compliance: {{COMPLIANCE}}
- Restoration Needs: {{RESTORATION}}
## TASK
Design soft delete implementation:
### 1. DELETE ENDPOINT
```
DELETE /api/users/123
Response: 200 OK
{
"id": "123",
"status": "deleted",
"deletedAt": "2024-01-15T10:30:00Z",
"permanentDeletionAt": "2024-04-15T10:30:00Z"
}
```
### 2. DATABASE SCHEMA
```sql
ALTER TABLE users ADD COLUMN deleted_at TIMESTAMP NULL;
ALTER TABLE users ADD COLUMN deleted_by VARCHAR(255) NULL;
-- Index for filtering
CREATE INDEX idx_users_deleted ON users(deleted_at);
```
### 3. QUERY FILTERING
```typescript
// Default: exclude deleted
const users = await db.users.findMany({
where: { deletedAt: null }
});
// Include deleted (admin)
const allUsers = await db.users.findMany({
where: { OR: [{ deletedAt: null }, { deletedAt: { not: null } }] }
});
```
### 4. RESTORATION
```
POST /api/users/123/restore
Response: 200 OK
{
"id": "123",
"status": "active",
"restoredAt": "2024-01-20T10:30:00Z"
}
```
### 5. PERMANENT DELETE
```
DELETE /api/users/123/permanent
X-Confirm-Permanent-Delete: true
```
### 6. CLEANUP JOB
Scheduled job to permanently delete after retention period.Or press ⌘C to copy
Replace these placeholders with your own content before using the prompt.
[{RESOURCES][{RETENTION][{COMPLIANCE][{RESTORATION]{
"id": "123",
"status": "deleted",
"deletedAt": "2024-01-15T10:30:00Z",
"permanentDeletionAt": "2024-04-15T10:30:00Z"
}{
where: { deletedAt: null }{
where: { OR: [{ deletedAt: null }{ deletedAt: { not: null }{
"id": "123",
"status": "active",
"restoredAt": "2024-01-20T10:30:00Z"
}