CourseInsights / src / datasetProcessor / DatasetValidator.ts
DatasetValidator.ts
Raw
import { InsightDatasetKind } from "../controller/IInsightFacade";
import InsightFacade from "../controller/InsightFacade";

export default class DatasetValidator {
	private insightFacade: InsightFacade;

	constructor(insightFacade: InsightFacade) {
		this.insightFacade = insightFacade;
	}

	public validateDataset(id: string, content: string, kind: InsightDatasetKind): boolean {
		if (!this.validateId(id)) {
			return false;
		}
		if (this.validateRemoval(id)) {
			return false;
		}
		if (content === null) {
			//can be triggered by casting
			return false;
		}
		if (kind === null || (kind !== InsightDatasetKind.Sections && kind !== InsightDatasetKind.Rooms)) {
			//can be triggered by casting
			return false;
		}

		return true;
	}

	public validateId(id: string): boolean {
		if (id === null || id.trim().length === 0 || id.includes("_")) {
			return false;
		}

		return true;
	}

	public validateRemoval(id: string): boolean {
		if (this.insightFacade.datasetIds.includes(id)) {
			return true;
		}

		return false;
	}

	public validateFields(section: any): boolean {
		const requiredSectionFields = [
			"id",
			"Course",
			"Title",
			"Professor",
			"Subject",
			"Year",
			"Avg",
			"Pass",
			"Fail",
			"Audit",
			"Section",
		];
		return requiredSectionFields.every((field) => section.hasOwnProperty(field));
	}
}