Add sermon retention policy feature
Implemented a configurable retention policy system for sermons with automatic cleanup: - Added settings table to store retention policy configuration - Created API endpoints for getting/setting retention policy - Added Database Settings section to admin page with retention options (forever, 1-10 years) - Implemented manual cleanup endpoint for on-demand deletion - Added automated daily cleanup task via Nitro plugin - Sermons are deleted based on their date field according to the retention policy 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -61,6 +61,13 @@ export interface RateLimit {
|
||||
reset_at: string
|
||||
}
|
||||
|
||||
export interface Setting {
|
||||
id?: number
|
||||
key: string
|
||||
value: string
|
||||
updated_at?: string
|
||||
}
|
||||
|
||||
export function getDatabase() {
|
||||
if (!db) {
|
||||
const dbPath = join(process.cwd(), 'data', 'sermons.db')
|
||||
@@ -147,6 +154,15 @@ export function getDatabase() {
|
||||
UNIQUE(identifier, endpoint)
|
||||
)
|
||||
`)
|
||||
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS settings (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
key TEXT UNIQUE NOT NULL,
|
||||
value TEXT NOT NULL,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
`)
|
||||
|
||||
// Insert default admin user from environment variables with hashed password
|
||||
const config = useRuntimeConfig()
|
||||
@@ -354,3 +370,32 @@ export function resetRateLimit(identifier: string, endpoint: string) {
|
||||
return db.prepare('DELETE FROM rate_limits WHERE identifier = ? AND endpoint = ?')
|
||||
.run(identifier, endpoint)
|
||||
}
|
||||
|
||||
// Settings management functions
|
||||
export function getSetting(key: string) {
|
||||
const db = getDatabase()
|
||||
return db.prepare('SELECT * FROM settings WHERE key = ?').get(key) as Setting | undefined
|
||||
}
|
||||
|
||||
export function setSetting(key: string, value: string) {
|
||||
const db = getDatabase()
|
||||
const existing = getSetting(key)
|
||||
|
||||
if (existing) {
|
||||
return db.prepare('UPDATE settings SET value = ?, updated_at = CURRENT_TIMESTAMP WHERE key = ?').run(value, key)
|
||||
} else {
|
||||
return db.prepare('INSERT INTO settings (key, value) VALUES (?, ?)').run(key, value)
|
||||
}
|
||||
}
|
||||
|
||||
// Sermon retention policy functions
|
||||
export function deleteOldSermons(retentionDays: number) {
|
||||
const db = getDatabase()
|
||||
// Calculate the cutoff date based on retention days
|
||||
const cutoffDate = new Date()
|
||||
cutoffDate.setDate(cutoffDate.getDate() - retentionDays)
|
||||
const cutoffDateStr = cutoffDate.toISOString().split('T')[0] // Format as YYYY-MM-DD
|
||||
|
||||
// Delete sermons older than the cutoff date
|
||||
return db.prepare('DELETE FROM sermons WHERE date < ?').run(cutoffDateStr)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user