chore: add new feature for the ai generate template

This commit is contained in:
mahyargdz
2025-07-31 11:52:00 +03:30
parent 48166e3b6b
commit 6c1904cb60
17 changed files with 622 additions and 459 deletions
@@ -5,10 +5,11 @@ import { AiService } from "./ai.service";
import { AiMessage } from "../../../common/enums/message.enum";
import { MessageDetails } from "../../mail-server/interfaces/messages-response.interface";
import { WildDuckMessagesService } from "../../mail-server/services/wildduck-messages.service";
import { GenerateTemplateDto, TemplatePurposeEnum, TemplateStyleEnum, TemplateThemeEnum } from "../DTO/generate-template.dto";
import { SummarizeEmailDto } from "../DTO/summarize-email.dto";
import { WriteEmailAssistanceDto } from "../DTO/write-email-assistance.dto";
import { SummaryLengthEnum, SummaryToneEnum } from "../enums/ai.enum";
import { IEmailData, SummarizationOptions } from "../interfaces/ai-service.interface";
import { IEmailData, ITemplateGenerationRequest, SummarizationOptions, TemplateGenerationOptions } from "../interfaces/ai-service.interface";
@Injectable()
export class AiAssistantService {
@@ -37,6 +38,51 @@ export class AiAssistantService {
return { assistance };
}
//************************************************* */
async generateTemplate(generateTemplateDto: GenerateTemplateDto) {
if (!generateTemplateDto.description?.trim()) {
throw new BadRequestException(AiMessage.DESCRIPTION_IS_REQUIRED);
}
const templateRequest: ITemplateGenerationRequest = {
description: generateTemplateDto.description.trim(),
options: this.buildTemplateGenerationOptions(generateTemplateDto),
};
const aiResponse = await this.aiService.generateTemplate(templateRequest);
return {
template: {
name: aiResponse.templateName,
description: aiResponse.description,
structure: aiResponse.structure,
rawHtml: aiResponse.rawHtml,
colorScheme: aiResponse.colorScheme,
},
designInsights: {
designPrinciples: aiResponse.designPrinciples,
suggestedImprovements: aiResponse.suggestedImprovements,
},
metadata: {
theme: generateTemplateDto.theme || TemplateThemeEnum.MODERN,
style: generateTemplateDto.style || TemplateStyleEnum.PROFESSIONAL,
purpose: generateTemplateDto.purpose || TemplatePurposeEnum.GENERAL,
generatedAt: new Date().toISOString(),
},
};
}
//************************************************* */
private buildTemplateGenerationOptions(dto: GenerateTemplateDto): TemplateGenerationOptions {
return {
theme: dto.theme,
style: dto.style,
purpose: dto.purpose,
templateName: dto.templateName,
preferredColors: dto.preferredColors,
};
}
//************************************************* */
private extractEmailData(message: MessageDetails) {
return {