Skip to main content
Novu Framework allows you to use Class Validator to define the Control and Payload schemas for your workflows.

Add class validator to your project

1

Install Class Validator Packages

npm install class-validator class-validator-jsonschema reflect-metadata
Novu requires the class-validator-jsonschema package to generate JSON schemas from your DTOs. You may also need the reflect-metadata package.
2

Use Class Validator in your workflow

After installation, the Class Validator DTOs can be used interchangeably with the controlSchema and payloadSchema options in your workflow definitions.


class TestComponent {
    @IsString()
    subject: string;

    @IsString()
    content: string;
}

class TestControlSchema {
    @IsBoolean()
    hideBanner: boolean;

    @IsString()
    @IsNotEmpty()
    @IsOptional()
    subject?: string;

    // Allowing no code control over the component in the Dashboard UI
    @Type(() => NewSignUpComponent)
    @NestedValidation({ each: true })
    @IsOptional()
    components?: NewSignUpComponent[];
}

class TestPayloadSchema {
    @IsString()
    username: string;
}

export const testWorkflow = workflow('test-workflow', async ({ step, payload }) => {
    await step.email('send-email', async (controls) => {
        return {
            subject: controls.subject,
            body: 'Hello, World!',
        };
    },
    {
        controlSchema: TestControlSchema,
    });
}, {
    payloadSchema: TestPayloadSchema,
});

Controls and Payload UI

When you define a controlSchema for a step, Novu will automatically generate a UI for the controls in the workflow editor.
  • Form Input Title - Will be derived from the key of the Class Validator schema. Unfortunately Class Validator does not support custom titles at this point.
  • Form Input Type - Will be derived from the Class Validator schema type, with support for string, number, boolean, and enum and array types.
  • Default Value - Unfortunately Class Validator does not support default values at this point.
  • Validation - Will be derived from the Class Validator schema validation decorators, including @Min, @Max, @IsEmail, @IsUrl and etc…