Initial commit
This commit is contained in:
45
src/lib/db.js
Normal file
45
src/lib/db.js
Normal file
@@ -0,0 +1,45 @@
|
||||
import Dexie from 'dexie';
|
||||
|
||||
export const db = new Dexie('TimeLogDB');
|
||||
db.version(1).stores({
|
||||
timeLogs: '++id, date, startTime, endTime, taskName, clientName',
|
||||
settings: 'key' // for retention policy
|
||||
});
|
||||
|
||||
// Helper functions
|
||||
export async function addLog(log) {
|
||||
return await db.timeLogs.add(log);
|
||||
}
|
||||
|
||||
export async function getLogsByDate(date) {
|
||||
return await db.timeLogs.where('date').equals(date).toArray();
|
||||
}
|
||||
|
||||
export async function getRecentLogs(limit = 10) {
|
||||
return await db.timeLogs.orderBy('id').reverse().limit(limit).toArray();
|
||||
}
|
||||
|
||||
export async function getLastLog() {
|
||||
return await db.timeLogs.orderBy('id').reverse().first();
|
||||
}
|
||||
|
||||
export async function setRetentionDays(days) {
|
||||
await db.settings.put({ key: 'retentionDays', value: days });
|
||||
}
|
||||
|
||||
// Retention logic
|
||||
export async function cleanupOldLogs() {
|
||||
const retentionDays = await db.settings.get('retentionDays') || 30;
|
||||
const cutoffDate = new Date();
|
||||
cutoffDate.setDate(cutoffDate.getDate() - retentionDays);
|
||||
|
||||
// Keep the latest day's report
|
||||
const latestDate = await db.timeLogs.orderBy('date').reverse().first();
|
||||
if (latestDate) {
|
||||
await db.timeLogs
|
||||
.where('date')
|
||||
.below(cutoffDate.toISOString().split('T')[0])
|
||||
.and(log => log.date !== latestDate.date)
|
||||
.delete();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user