CourseInsights / src / controller / InsightFacade.ts
InsightFacade.ts
Raw
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;
	}
}