import DatasetPersister from "../datasetProcessor/DatasetPersister"; import DatasetProcessor from "../datasetProcessor/DatasetProcessor"; import { DatasetRoom, DatasetSection } from "../datasetProcessor/DatasetSection"; import QueryProcessor from "../queryProcessor/QueryProcessor"; import { QUERY } from "../queryProcessor/QueryTree"; import { IInsightFacade, InsightDataset, InsightDatasetKind, InsightResult } from "./IInsightFacade"; /** * This is the main programmatic entry point for the project. * Method documentation is in IInsightFacade * */ export default class InsightFacade implements IInsightFacade { public datasetIds: string[]; public insights: InsightDataset[]; public datasets: Map; constructor() { this.datasetIds = []; this.insights = []; this.datasets = new Map(); } public async addDataset(id: string, content: string, kind: InsightDatasetKind): Promise { const persister = new DatasetPersister(); this.datasetIds = await persister.persistReadDataset("data/_datasetIds.json"); this.insights = await persister.persistReadDataset("data/_insightDatasets.json"); return new Promise((resolve, reject) => { new DatasetProcessor(this) .processAddDataset(id, content, kind) .then((result) => { return resolve(this.datasetIds); }) .catch((error) => { return reject(error); //new InsightError("addDataset") }); }); } public async removeDataset(id: string): Promise { const persister = new DatasetPersister(); this.datasetIds = await persister.persistReadDataset("data/_datasetIds.json"); this.insights = await persister.persistReadDataset("data/_insightDatasets.json"); return new Promise((resolve, reject) => { new DatasetProcessor(this) .processRemoveDataset(id) .then((result) => { return resolve(id); }) .catch((error) => { return reject(error); //new InsightError("removeDataset") }); }); } // public getDataset(): Map { // return this.datasets; // } public async performQuery(query: unknown): Promise { return new Promise((resolve, reject) => { new QueryProcessor(this) .processQuery(query as QUERY) .then((result) => { return resolve(result); }) .catch((error) => { return reject(error); }); }); } public async listDatasets(): Promise { this.insights = await new DatasetPersister().persistReadDataset("data/_insightDatasets.json"); return this.insights; } }