@@ -5,6 +5,7 @@ import { ExportOptions, ImportOptions } from 'dexie-export-import';
55
66export interface Exam {
77 id ?: number ;
8+ creationDate ?: number ;
89}
910
1011export interface Template {
@@ -34,15 +35,30 @@ export interface NonAlignImage {
3435 value : string ;
3536}
3637
38+ export async function cleanOutDatedCached ( examIds : number [ ] ) {
39+ const databasesNamedToKeep = examIds . map ( id => 'correctExam' + id ) ;
40+ const databases = await Dexie . getDatabaseNames ( ) ;
41+ const databasesToRemove = databases . filter ( dbname => dbname . startsWith ( 'correctExam' ) && ! databasesNamedToKeep . includes ( dbname ) ) ;
42+ for ( let i = 0 ; i < databasesToRemove . length ; i ++ ) {
43+ try {
44+ await Dexie . delete ( databasesToRemove [ i ] ) ;
45+ // eslint-disable-next-line no-console
46+ console . log ( 'remove old database' , databasesToRemove [ i ] ) ;
47+ } catch ( e ) {
48+ console . error ( 'unable to remove old database' , databasesToRemove [ i ] , e ) ;
49+ }
50+ }
51+ }
52+
3753export class ExamIndexDB extends Dexie {
3854 private exams ! : Table < Exam , number > ;
3955 private templates ! : Table < Template , number > ;
4056 private alignImages ! : Table < AlignImage , number > ;
4157 private nonAlignImages ! : Table < NonAlignImage , number > ;
4258
4359 constructor ( private examId : number ) {
44- // super('ngdexieliveQuery');
4560 super ( 'correctExam' + examId ) ;
61+ // console.error('create database correctExam' + examId);
4662 this . version ( 3 ) . stores ( {
4763 exams : '++id' ,
4864 templates : '++id, examId, [examId+pageNumber]' ,
@@ -364,12 +380,22 @@ export class ExamIndexDB extends Dexie {
364380 async getAlignSortByPageNumber ( ) {
365381 return await this . alignImages . where ( { examId : this . examId } ) . sortBy ( 'pageNumber' ) ;
366382 }
367- async addExam ( ) {
383+ async addExam ( d : Date ) {
368384 return await this . exams . add ( {
369385 id : this . examId ,
386+ creationDate : d ? d . getTime ( ) : new Date ( ) . getTime ( ) ,
370387 } ) ;
371388 }
372389
390+ async getExamTimestamp ( ) : Promise < number > {
391+ const e = await this . exams
392+ . where ( {
393+ id : this . examId ,
394+ } )
395+ . first ( ) ;
396+ return e ?. creationDate ?? 0 ;
397+ }
398+
373399 async addTemplate ( elt : AlignImage ) {
374400 return await this . templates . add ( {
375401 examId : this . examId ,
@@ -393,6 +419,10 @@ export class AppDB implements CacheService {
393419 /* async populate() {
394420 } */
395421
422+ cleanOutDatedCached ( examIds : number [ ] ) : Promise < void > {
423+ return cleanOutDatedCached ( examIds ) ;
424+ }
425+
396426 async resetDatabase ( examId : number ) : Promise < void > {
397427 let db1 = this . dbs . get ( examId ) ;
398428 if ( db1 === undefined ) {
@@ -640,13 +670,22 @@ export class AppDB implements CacheService {
640670 }
641671 return db1 . getAlignSortByPageNumber ( ) ;
642672 }
643- async addExam ( examId : number ) : Promise < number > {
673+ async addExam ( examId : number , d : Date ) : Promise < number > {
674+ let db1 = this . dbs . get ( examId ) ;
675+ if ( db1 === undefined ) {
676+ db1 = new ExamIndexDB ( examId ) ;
677+ this . dbs . set ( examId , db1 ) ;
678+ }
679+ return db1 . addExam ( d ) ;
680+ }
681+
682+ async getExamTimestamp ( examId : number ) : Promise < number > {
644683 let db1 = this . dbs . get ( examId ) ;
645684 if ( db1 === undefined ) {
646685 db1 = new ExamIndexDB ( examId ) ;
647686 this . dbs . set ( examId , db1 ) ;
648687 }
649- return db1 . addExam ( ) ;
688+ return db1 . getExamTimestamp ( ) ;
650689 }
651690
652691 async addTemplate ( elt : AlignImage ) : Promise < number > {
@@ -730,6 +769,7 @@ export class AppDB implements CacheService {
730769}
731770
732771export interface CacheService {
772+ cleanOutDatedCached ( examIds : number [ ] ) : Promise < void > ;
733773 resetDatabase ( examId : number ) : Promise < void > ;
734774 removeExam ( examId : number ) : Promise < void > ;
735775 removeElementForExam ( examId : number ) : Promise < void > ;
@@ -759,7 +799,7 @@ export interface CacheService {
759799
760800 getNonAlignSortByPageNumber ( examId : number ) : Promise < ImageDB [ ] > ;
761801 getAlignSortByPageNumber ( examId : number ) : Promise < ImageDB [ ] > ;
762- addExam ( examId : number ) : Promise < number > ;
802+ addExam ( examId : number , d : Date ) : Promise < number > ;
763803 addTemplate ( elt : AlignImage ) : Promise < number > ;
764804 countNonAlignWithPageNumber ( examId : number , pageInscan : number ) : Promise < number > ;
765805 countAlignWithPageNumber ( examId : number , pageInscan : number ) : Promise < number > ;
@@ -770,6 +810,7 @@ export interface CacheService {
770810 removePageNonAlignForExamForPagesAndReorder ( examId : number , pages : number [ ] ) : Promise < void > ;
771811 moveTemplatePages ( examId : number , pageNumber : number , lastPage : number ) : Promise < void > ;
772812 removePageTemplateForExamForPage ( examId : number , lastPage : number ) : Promise < void > ;
813+ getExamTimestamp ( examId : number ) : Promise < number > ;
773814}
774815
775816export const db = new AppDB ( ) ;
0 commit comments