/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see .
*/
import {SCLicensePlate, SCThingOriginType, SCThingRemoteOrigin, SCThings} from '@openstapps/core';
import {createUUID} from './common.js';
/**
* Provides abstracted methods for the connector execution process
*
* By extending this class connector-developers only need to implement the load and transform of the data
* Pushing the data to the backend will be handled automatically
* @template T Any serializable type
*/
export abstract class Connector {
/**
* License plate of the school
*/
protected licensePlate: SCLicensePlate;
/**
* Name of the connector
*/
public origin: string;
/**
* Abstract constructor for a connector
* @param licensePlate License plate of the school
* @param origin Name of the connector
*/
constructor(licensePlate: SCLicensePlate, origin: string) {
this.licensePlate = licensePlate;
this.origin = origin;
}
/**
* Will fetch items from systems
*
* Implementation according to your schools requirements
*/
protected abstract fetchItems(): Promise;
/**
* Creates a remote origin with the current date-time
*/
createRemoteOrigin(): SCThingRemoteOrigin {
return {
indexed: new Date().toISOString(),
name: this.origin,
type: SCThingOriginType.Remote,
};
}
/**
* Fetches items and generates missing uids
*/
async getItems(): Promise {
const importedItems = await this.fetchItems();
for (const item of importedItems) {
if (item.uid.length === 0) {
item.uid = createUUID(item, this.licensePlate);
}
}
return importedItems;
}
}