UNPKG

@afriapps/fs-client

Version:

React Native FileServer Client SDK for file synchronization and data management. Requires React Native environment with SQLite and File System support.

55 lines (46 loc) 2.27 kB
import DatabaseService from "../database/DatabaseService"; import FS_FileEntity from "../models/FS_FileEntity"; import { logger } from "../utils/logger"; import { FS_FileDefinitionManager } from "./FS_FileDefinitionManager"; import { FS_ReceivedDataHandler } from "./FS_ReceivedDataHandler"; class FS_JsonReceivedDataHandler implements FS_ReceivedDataHandler<object> { async handle(databaseService: DatabaseService, fsEntity: FS_FileEntity, fileData: object): Promise<boolean> { if (fsEntity.storageType === "UDC") { return this.handleUdc(databaseService, fsEntity, fileData); } else { return this.handleTableData(databaseService, fsEntity, fileData); } } async handleUdc(databaseService: DatabaseService, fsEntity: FS_FileEntity, fileData: object): Promise<boolean> { const fileName: string = fsEntity.name || ''; const dataList: any[] = []; const fieldMapName2Id: Map<string, number> = new Map(); const fieldMapId2Name: Map<number, string> = new Map(); const fields = await FS_FileDefinitionManager.getFieldsDefinitions(databaseService, fsEntity.name!); fields.forEach(row => { fieldMapName2Id.set(row.name, row.completeIdProto); fieldMapId2Name.set(row.completeIdProto, row.name); const record: any = { fileName: fileName, name: row.completeFieldName, protoId: Number(row.completeIdProto), type: row.type, value: fileData[row.name] }; dataList.push(record); }); await databaseService.insertFromListMap("FS_UDC", dataList); return true; } async handleTableData(databaseService: DatabaseService, fsEntity: FS_FileEntity, fileData: object): Promise<boolean> { try { const records = fileData ; await databaseService.insertFromJsonArray(fsEntity.name!, records as { [key: string]: any; }[]); return true; } catch (e) { logger.error('Error parsing JSON data:', e); return false; } } } export { FS_JsonReceivedDataHandler };