db.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // db.ts
  2. const DB_NAME = 'report-db';
  3. const STORE_NAME = 'report-store';
  4. const DB_VERSION = 1;
  5. export async function openDB(): Promise<IDBDatabase> {
  6. return new Promise((resolve, reject) => {
  7. const request = indexedDB.open(DB_NAME, DB_VERSION);
  8. request.onupgradeneeded = (event) => {
  9. const db = (event.target as IDBOpenDBRequest).result;
  10. if (!db.objectStoreNames.contains(STORE_NAME)) {
  11. db.createObjectStore(STORE_NAME, { keyPath: 'month' });
  12. }
  13. };
  14. request.onsuccess = () => resolve(request.result);
  15. request.onerror = () => reject(request.error);
  16. });
  17. }
  18. export async function getMonthRecord(month: string): Promise<{ count: number } | undefined> {
  19. const db = await openDB();
  20. return new Promise((resolve, reject) => {
  21. const tx = db.transaction(STORE_NAME, 'readonly');
  22. const store = tx.objectStore(STORE_NAME);
  23. const request = store.get(month);
  24. request.onsuccess = () => resolve(request.result);
  25. request.onerror = () => reject(request.error);
  26. });
  27. }
  28. export async function setMonthRecord(month: string, count: number) {
  29. const db = await openDB();
  30. return new Promise<void>((resolve, reject) => {
  31. const tx = db.transaction(STORE_NAME, 'readwrite');
  32. const store = tx.objectStore(STORE_NAME);
  33. store.put({ month, count });
  34. tx.oncomplete = () => resolve();
  35. tx.onerror = () => reject(tx.error);
  36. });
  37. }