All files / src/operation create-instance.ts

100% Statements 25/25
100% Branches 0/0
100% Functions 7/7
100% Lines 25/25

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75    4x                   6x 6x   6x       6x 6x 6x 6x 6x 6x   6x                 6x 4x   4x           6x       6x   6x       6x   6x       6x   6x       6x 6x   6x       4x  
import Node from 'type/node';
import DraftField from 'type/draft-field';
import Operation, { OperationInput } from 'operation';
 
interface Input extends OperationInput {
	readonly id: string;
	readonly type_id: string;
	readonly fields: DraftField[];
}
 
class CreateInstanceOperation extends Operation<Input, Node> {
	protected async performInternal(): Promise<Node> {
		const node = await this.buildNode();
		const repository = this.getRepository();
 
		return repository.storeNode(node);
	}
 
	private async buildNode(): Promise<Node> {
		const id = this.getId();
		const type_id = this.getTypeId();
		const draft_fields = this.getDraftFields();
		const creator = this.getAccountUrl();
		const created_at = Date.now();
		const updated_at = created_at;
 
		let node: Node = {
			id,
			type_id,
			creator,
			created_at,
			updated_at,
			changes: []
		};
 
		draft_fields.forEach((draft_field) => {
			const { key, value } = draft_field;
 
			node = {
				...node,
				[key]: value
			};
		});
 
		return node;
	}
 
	private getId(): string {
		const input = this.getInput();
 
		return input.id;
	}
 
	private getTypeId(): string {
		const input = this.getInput();
 
		return input.type_id;
	}
 
	private getDraftFields(): DraftField[] {
		const input = this.getInput();
 
		return input.fields;
	}
 
	private getAccountUrl(): string {
		const account = this.getAccount();
		const repository = this.getRepository();
 
		return repository.buildNodeUrl(account);
	}
}
 
export default CreateInstanceOperation;