@@ -24,15 +24,51 @@ export default class DataService extends Service {
2424 const records = await this . getRecordsFromBackup ( ) ;
2525
2626 if ( records . length > 0 ) {
27- await this . store . sync ( ( t ) =>
28- records . map ( ( r ) => {
29- if ( r ?. attributes ?. [ 'hex' ] ) {
30- delete r . attributes [ 'hex' ] ;
31- }
32-
33- return t . addRecord ( r ) ;
34- } )
35- ) ;
27+ try {
28+ await this . store . sync ( ( t ) =>
29+ records . map ( ( r ) => {
30+ if ( r ?. attributes ?. [ 'hex' ] ) {
31+ delete r . attributes [ 'hex' ] ;
32+ }
33+
34+ return t . addRecord ( r ) ;
35+ } )
36+ ) ;
37+ } catch ( error ) {
38+ console . error (
39+ '[Data Service] Failed to restore from backup due to corrupt data:' ,
40+ error
41+ ) ;
42+ console . log ( '[Data Service] Deleting corrupt IndexedDB database...' ) ;
43+
44+ // Delete the entire corrupt database
45+ const dbName = 'swach-main-backup' ;
46+ const deleteRequest = indexedDB . deleteDatabase ( dbName ) ;
47+
48+ await new Promise < void > ( ( resolve , reject ) => {
49+ deleteRequest . onsuccess = ( ) => {
50+ console . log ( '[Data Service] Successfully deleted corrupt database' ) ;
51+ resolve ( ) ;
52+ } ;
53+ deleteRequest . onerror = ( ) => {
54+ console . error (
55+ '[Data Service] Failed to delete database:' ,
56+ deleteRequest . error
57+ ) ;
58+ reject (
59+ new Error (
60+ `Failed to delete corrupt database: ${ deleteRequest . error } `
61+ )
62+ ) ;
63+ } ;
64+ deleteRequest . onblocked = ( ) => {
65+ console . error (
66+ '[Data Service] Database deletion blocked - may have open connections'
67+ ) ;
68+ reject ( new Error ( 'Database deletion blocked by open connections' ) ) ;
69+ } ;
70+ } ) ;
71+ }
3672 }
3773
3874 await this . dataCoordinator . activate ( ) ;
0 commit comments