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<string, DatasetSection[] | DatasetRoom[]>;
constructor() {
this.datasetIds = [];
this.insights = [];
this.datasets = new Map<string, DatasetSection[] | DatasetRoom[]>();
}
public async addDataset(id: string, content: string, kind: InsightDatasetKind): Promise<string[]> {
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<string> {
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<string, DatasetSection[]|DatasetRoom[]> {
// return this.datasets;
// }
public async performQuery(query: unknown): Promise<InsightResult[]> {
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<InsightDataset[]> {
this.insights = await new DatasetPersister().persistReadDataset("data/_insightDatasets.json");
return this.insights;
}
}