File tree Expand file tree Collapse file tree 6 files changed +104
-2
lines changed Expand file tree Collapse file tree 6 files changed +104
-2
lines changed Original file line number Diff line number Diff line change 1+ import type { TableStructure } from '../../routes/api/data/types' ;
2+ import { sendMsgToWorker } from './messageBus' ;
3+ import { WorkerMessageTypes , type WorkerMessage , type TableExistsResponseData } from './types' ;
4+
5+ const storages = [ 'customers_v1' ] ;
6+
7+ async function getStructure ( storage : string ) : Promise < TableStructure > {
8+ const res = await fetch ( `/api/data/${ storage } /structure` ) ;
9+ const data = ( await res . json ( ) ) as TableStructure ;
10+ return data ;
11+ }
12+
13+ export default async function initStorages ( ) {
14+ for ( const storageId of storages ) {
15+ const res = ( await sendMsgToWorker ( {
16+ storageId,
17+ type : WorkerMessageTypes . TABLE_EXISTS ,
18+ expectedType : WorkerMessageTypes . TABLE_EXISTS_RESPONSE ,
19+ data : undefined
20+ } ) ) as WorkerMessage < TableExistsResponseData > ;
21+
22+ if ( res . data . tableExists ) {
23+ console . log ( `Table ${ storageId } exists. Has data: ${ res . data . hasData } ` ) ;
24+ } else {
25+ const structure = await getStructure ( storageId ) ;
26+ console . log ( `Table ${ storageId } does not exist. Creating...` , structure ) ;
27+ }
28+ }
29+ }
Original file line number Diff line number Diff line change 1+ import initStorages from './initStorages' ;
12import { initMsgBus , sendMsgToWorker } from './messageBus' ;
23import { WorkerMessageTypes } from './types' ;
34
@@ -15,4 +16,6 @@ export default async function initWorker() {
1516 } ) ;
1617
1718 console . log ( 'Init worker response:' , res ) ;
19+
20+ initStorages ( ) ;
1821}
Original file line number Diff line number Diff line change 11export enum WorkerMessageTypes {
22 INIT_DB ,
3- INIT_DB_RESPONSE
3+ INIT_DB_RESPONSE ,
4+ TABLE_EXISTS ,
5+ TABLE_EXISTS_RESPONSE
46}
57
68export type WorkerMessageBase = {
@@ -10,3 +12,9 @@ export type WorkerMessageBase = {
1012} ;
1113
1214export type WorkerMessage < T > = { data : T } & WorkerMessageBase ;
15+
16+ export type TableExistsResponseData = {
17+ tableExists : boolean ;
18+ hasData : boolean ;
19+ errorMsg ?: string ;
20+ } ;
Original file line number Diff line number Diff line change 1+ import type { TableExistsResponseData , WorkerMessage } from '../types' ;
2+ import { tableExists , tableHasData } from './util/tableInfo' ;
3+
4+ export function handleTableExists ( data : WorkerMessage < unknown > ) : TableExistsResponseData {
5+ try {
6+ const { storageId } = data ;
7+
8+ const resData = < TableExistsResponseData > { } ;
9+ resData . tableExists = tableExists ( storageId ) ;
10+
11+ if ( resData . tableExists ) {
12+ resData . hasData = tableHasData ( storageId ) ;
13+ } else {
14+ resData . hasData = false ;
15+ }
16+
17+ return resData ;
18+ } catch ( err ) {
19+ const msg = `Error checking if table exists: ${ err } ` ;
20+ console . error ( msg ) ;
21+
22+ return {
23+ tableExists : false ,
24+ hasData : false ,
25+ errorMsg : msg
26+ } ;
27+ }
28+ }
Original file line number Diff line number Diff line change 1+ import { db } from '../initDb' ;
2+
3+ export function tableExists ( table : string ) {
4+ const sql = `SELECT count(*) as "cnt" FROM sqlite_master WHERE type='table' AND name= $table` ;
5+
6+ const res = db . selectObject ( sql , {
7+ $table : table
8+ } ) as { cnt : number } ;
9+
10+ return res . cnt > 0 ;
11+ }
12+
13+ export function tableHasData ( table : string ) {
14+ const sql = `SELECT count(*) as "cnt" FROM ${ table } ` ;
15+
16+ const res = db . selectObject ( sql , {
17+ $table : table
18+ } ) as { cnt : number } ;
19+
20+ return res . cnt > 0 ;
21+ }
Original file line number Diff line number Diff line change 11/* eslint-disable no-case-declarations */
2- import { WorkerMessageTypes , type WorkerMessage } from '../types' ;
2+ import { WorkerMessageTypes , type WorkerMessage , type TableExistsResponseData } from '../types' ;
33import { initDb } from './initDb' ;
4+ import { handleTableExists } from './storageHandlers' ;
45
56console . log ( 'worker loaded' ) ;
67
@@ -29,6 +30,18 @@ function sendMsgToMain(obj: WorkerMessage<unknown>) {
2930
3031 break ;
3132
33+ case WorkerMessageTypes . TABLE_EXISTS :
34+ const tableExistData = handleTableExists ( data ) ;
35+
36+ const tableExistsResult : WorkerMessage < TableExistsResponseData > = {
37+ type : WorkerMessageTypes . TABLE_EXISTS_RESPONSE ,
38+ messageId : data . messageId ,
39+ storageId : data . storageId ,
40+ data : tableExistData
41+ } ;
42+ sendMsgToMain ( tableExistsResult ) ;
43+ break ;
44+
3245 default :
3346 throw new Error ( `Unknown message type: ${ data . type } ` ) ;
3447 }
You can’t perform that action at this time.
0 commit comments