@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
text/typescript
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 };