# Template API ###### tags: API ## Technologies * nodejs * nestjs framework (https://nestjs.com/) * embeded javascript templating Library (https://handlebarsjs.com/) * embeded java reporting library (https://community.jaspersoft.com/) * mongodb ## Enums ```typescript= enum RecordState { DRAFT, ACTIVE, INACTIVE, } enum TemplateType { HANDLEBARS, JASPER, } enum Env { UNCATEGORIZED, MAIN, STAGING, TRAINING, TESTING, } ``` ## Schemas ```typescript= @Schema({ collection: 'templates' }) class TemplateSchema { @Prop({ required: true, enum: TemplateType, default: TemplateType.HANDLEBARS }) public type: TemplateType; // main, staging, training, testing @Prop({ required: true, enum: Env, default: Env.MAN }) public env: Env; // Unique Keyword of app @Prop({ required: true }) public appKeyword: string; // Template Unique Name - Keyword @Prop({ required: true, unique: true }) public keyword: string; // Human Friendly Name @Prop({ required: false }) public name: string; @Prop({ required: false }) public description: string; @Prop({ required: true, type: Template }) public template: Template; @Prop({ required: true }) public modelExample: string; @Prop({ required: true, type: Record }) public record: Record; } export class Template { @Prop({ required: false }) public handlebars: string; @Prop({ required: false, type: Jasper }) public jasper: Jasper; } export class Jasper { @Prop({ required: false, type: File }) public jrxml: File; @Prop({ required: false, type: File }) public compiled: File; } export class Record { @Prop({ required: true, enum: RecordState, default: RecordState.DRAFT }) public state: RecordState; @Prop({ required: true, type: Date }) public createdAt: Date; @Prop({ required: false, type: Date }) public updatedAt: Date; @Prop({ required: true, type: Boolean, default: false }) public deleted: boolean; } ``` SET email-tx:1111 "1111" EXPIRE email-tx:1111 1 keys email-tx:*