mono/packages/vfs/ref-server/entities/device.entity.ts

151 lines
3.4 KiB
TypeScript

import { IsString, IsEmail, IsNotEmpty, IsOptional, MaxLength, validateSync, IsNumber } from 'class-validator';
import {
BeforeInsert,
BeforeUpdate,
Column,
CreateDateColumn,
Entity,
JoinTable,
ManyToMany,
PrimaryGeneratedColumn,
UpdateDateColumn,
ColumnType,
AfterLoad
} from 'typeorm';
import { CustomValidationError } from '../exceptions/custom-validation.error';
import {
LOGGING_FLAGS,
DEVICE_STATE,
DEVICE_FLAGS,
RETRY_SETTINGS,
DefaultRetry,
DefaultBlocks,
DefaultSettings,
DefaultCommandSettings
} from '../shared/types';
import { ValueTransformer } from 'typeorm/decorator/options/ValueTransformer';
import { isString } from '@xblox/core/primitives';
import { debug } from '../log';
export const JSON_TRANSFORMER: ValueTransformer = {
to(value: any): string {
if (!isString(value)) {
return JSON.stringify(value, null, 2);
} else {
return value;
}
},
from(value: string): any {
if (isString(value)) {
return JSON.parse(value);
}
return value;
}
}
@Entity()
export class Device {
public scope: any;
@IsOptional()
@PrimaryGeneratedColumn()
id: number;
@Column({ length: 150 })
@IsNotEmpty()
@MaxLength(150)
name: string;
@Column()
@IsNotEmpty()
host: string;
@Column()
@IsNotEmpty()
port: string;
@Column()
@IsNotEmpty()
protocol: string;
@Column()
@IsString()
@IsOptional()
state: string = DEVICE_STATE.NONE;
@Column()
@IsNumber()
@IsOptional()
flags: number = DEVICE_FLAGS.NONE;
@Column()
@IsString()
@IsOptional()
logging: string = "{\n \"Device Connected\": 47,\n \"Response\": 35,\n \"Send Command\": 51,\n \"Device Disonnected\": 39,\n \"Device Error\": 1\n}";
@Column({ name: 'fields' })
@IsString()
fields: string;
@Column({ name: 'is_active' })
@IsNotEmpty()
isActive: boolean;
@Column({
transformer: JSON_TRANSFORMER
})
@IsOptional()
retry: string = JSON.stringify(DefaultRetry());
@Column({ name: 'user' })
@IsNotEmpty()
user: number;
@Column({ name: 'project' })
@IsNotEmpty()
project: number;
@Column({
transformer: JSON_TRANSFORMER
})
@IsOptional()
blocks: string = JSON.stringify(DefaultBlocks());
@Column({
transformer: JSON_TRANSFORMER
})
@IsOptional()
settings: string = JSON.stringify(DefaultSettings());
@Column({
transformer: JSON_TRANSFORMER
})
@IsOptional()
commandSettings: string = JSON.stringify(DefaultCommandSettings());
@BeforeUpdate()
doBeforeUpdate() {
const errors = validateSync(this, { validationError: { target: false } });
if (errors.length > 0) {
console.error('validation error', errors);
throw new CustomValidationError(errors)
}
}
@AfterLoad()
doAfter() {
this.retry = JSON_TRANSFORMER.from(this.retry);
this.blocks = JSON_TRANSFORMER.from(this.blocks);
this.settings = JSON_TRANSFORMER.from(this.settings);
this.commandSettings = JSON_TRANSFORMER.from(this.commandSettings);
this.logging = JSON_TRANSFORMER.from(this.logging);
}
public toString() {
return `${this.protocol}://${this.host}:${this.port}`
}
}