trainUs/src/composables/useBackupStatus.js
David 352a3d5e88
Some checks are pending
CI / Lint & Format (push) Waiting to run
CI / Build (push) Waiting to run
CI / Tests (${{ matrix.browser }}) (chromium) (push) Waiting to run
CI / Tests (${{ matrix.browser }}) (firefox) (push) Waiting to run
Initial commit
2026-06-18 13:06:57 +02:00

82 lines
2.2 KiB
JavaScript

import { ref, computed } from 'vue'
import { useSettings } from './useSettings.js'
const DEFAULT_REMINDER_DAYS = 7
const lastBackupAt = ref(null)
const dbCreatedAt = ref(null)
const backupReminderDays = ref(DEFAULT_REMINDER_DAYS)
const sessionReminderShown = ref(false)
export function useBackupStatus() {
const { get, set } = useSettings()
async function load() {
const lastBackupAtStr = await get('last_backup_at')
if (lastBackupAtStr) {
lastBackupAt.value = new Date(lastBackupAtStr)
} else {
lastBackupAt.value = null
}
const dbCreatedAtStr = await get('db_created_at')
if (dbCreatedAtStr) {
dbCreatedAt.value = new Date(dbCreatedAtStr)
} else {
dbCreatedAt.value = null
}
const daysStr = await get('backup_reminder_days')
const parsed = parseInt(daysStr, 10)
if (!isNaN(parsed) && parsed >= 1 && parsed <= 365) {
backupReminderDays.value = parsed
} else {
if (daysStr !== null && daysStr !== undefined) {
console.warn(
`[useBackupStatus] Invalid backup_reminder_days value: "${daysStr}", falling back to ${DEFAULT_REMINDER_DAYS}`,
)
}
backupReminderDays.value = DEFAULT_REMINDER_DAYS
}
}
const daysSinceBackup = computed(() => {
const effectiveDate = lastBackupAt.value || dbCreatedAt.value
if (!effectiveDate) return null
const now = new Date()
const diffMs = now.getTime() - effectiveDate.getTime()
return Math.floor(diffMs / (1000 * 60 * 60 * 24))
})
const isStale = computed(() => {
const effectiveDate = lastBackupAt.value || dbCreatedAt.value
if (!effectiveDate) return true
const now = new Date()
const diffMs = now.getTime() - effectiveDate.getTime()
const thresholdMs = backupReminderDays.value * 86_400_000
return diffMs > thresholdMs
})
const visible = computed(() => {
return isStale.value
})
async function markBackedUp() {
const now = new Date().toISOString()
await set('last_backup_at', now)
lastBackupAt.value = new Date(now)
}
return {
lastBackupAt,
dbCreatedAt,
daysSinceBackup,
isStale,
visible,
load,
markBackedUp,
backupReminderDays,
sessionReminderShown,
}
}