mirror of
https://github.com/christianvidalwolf-prog/CrazeAnalytix.git
synced 2026-08-03 16:25:23 +02:00
fix: add cache versioning to invalidate stale data on schema changes
This commit is contained in:
+30
-12
@@ -4,6 +4,9 @@ import { SalesRecord } from '../types';
|
|||||||
const DB_NAME = 'CrazeAnalytixDB';
|
const DB_NAME = 'CrazeAnalytixDB';
|
||||||
const STORE_NAME = 'salesData';
|
const STORE_NAME = 'salesData';
|
||||||
const DB_VERSION = 1;
|
const DB_VERSION = 1;
|
||||||
|
// Increment this when data processing logic changes (e.g., field mapping changes)
|
||||||
|
// This forces cache invalidation and re-processing of CSV data
|
||||||
|
const DATA_SCHEMA_VERSION = 2; // Updated for LICENSE column mapping
|
||||||
|
|
||||||
const initDB = (): Promise<IDBDatabase> => {
|
const initDB = (): Promise<IDBDatabase> => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
@@ -32,6 +35,8 @@ export const saveSalesData = async (data: SalesRecord[]): Promise<void> => {
|
|||||||
store.put(data, 'currentData');
|
store.put(data, 'currentData');
|
||||||
// Store the timestamp
|
// Store the timestamp
|
||||||
store.put(new Date().toISOString(), 'lastUpdated');
|
store.put(new Date().toISOString(), 'lastUpdated');
|
||||||
|
// Store schema version
|
||||||
|
store.put(DATA_SCHEMA_VERSION, 'schemaVersion');
|
||||||
|
|
||||||
transaction.oncomplete = () => resolve();
|
transaction.oncomplete = () => resolve();
|
||||||
transaction.onerror = () => reject(transaction.error);
|
transaction.onerror = () => reject(transaction.error);
|
||||||
@@ -51,8 +56,21 @@ export const loadSalesData = async (): Promise<{ data: SalesRecord[]; lastUpdate
|
|||||||
|
|
||||||
const dataReq = store.get('currentData');
|
const dataReq = store.get('currentData');
|
||||||
const dateReq = store.get('lastUpdated');
|
const dateReq = store.get('lastUpdated');
|
||||||
|
const versionReq = store.get('schemaVersion');
|
||||||
|
|
||||||
transaction.oncomplete = () => {
|
transaction.oncomplete = () => {
|
||||||
|
const cachedVersion = versionReq.result;
|
||||||
|
|
||||||
|
// If schema version doesn't match, invalidate cache
|
||||||
|
if (cachedVersion !== DATA_SCHEMA_VERSION) {
|
||||||
|
console.log('[Storage] Schema version mismatch. Cached:', cachedVersion, 'Current:', DATA_SCHEMA_VERSION);
|
||||||
|
resolve({
|
||||||
|
data: [],
|
||||||
|
lastUpdated: null
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
resolve({
|
resolve({
|
||||||
data: dataReq.result || [],
|
data: dataReq.result || [],
|
||||||
lastUpdated: dateReq.result || null
|
lastUpdated: dateReq.result || null
|
||||||
@@ -68,16 +86,16 @@ export const loadSalesData = async (): Promise<{ data: SalesRecord[]; lastUpdate
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const clearSalesData = async (): Promise<void> => {
|
export const clearSalesData = async (): Promise<void> => {
|
||||||
try {
|
try {
|
||||||
const db = await initDB();
|
const db = await initDB();
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const transaction = db.transaction(STORE_NAME, 'readwrite');
|
const transaction = db.transaction(STORE_NAME, 'readwrite');
|
||||||
const store = transaction.objectStore(STORE_NAME);
|
const store = transaction.objectStore(STORE_NAME);
|
||||||
store.clear();
|
store.clear();
|
||||||
transaction.oncomplete = () => resolve();
|
transaction.oncomplete = () => resolve();
|
||||||
transaction.onerror = () => reject(transaction.error);
|
transaction.onerror = () => reject(transaction.error);
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user