mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-27 16:40:56 +00:00
36 lines
2.0 KiB
TypeScript
36 lines
2.0 KiB
TypeScript
import { Injectable, NotFoundException } from '@nestjs/common';
|
|
import { PrismaService } from '../../common/prisma.service';
|
|
|
|
@Injectable()
|
|
export class SupportService {
|
|
constructor(private prisma: PrismaService) {}
|
|
|
|
getFaqCategories() { return this.prisma.faqCategory.findMany({ include: { _count: { select: { articles: true } } } }); }
|
|
|
|
getFaqArticles(categoryId: string) { return this.prisma.faqArticle.findMany({ where: { categoryId }, orderBy: { rank: 'asc' } }); }
|
|
|
|
startConversation(userId: string) { return this.prisma.supportConversation.create({ data: { userId } }); }
|
|
|
|
async sendMessage(conversationId: string, sender: 'USER' | 'BOT' | 'AGENT', text: string) {
|
|
const conv = await this.prisma.supportConversation.findUnique({ where: { id: conversationId } });
|
|
if (!conv) throw new NotFoundException('Conversation not found');
|
|
const message = await this.prisma.supportMessage.create({ data: { conversationId, sender, text } });
|
|
if (sender === 'USER') await this.prisma.supportMessage.create({ data: { conversationId, sender: 'BOT', text: this.getBotReply(text) } });
|
|
return message;
|
|
}
|
|
|
|
async getConversation(conversationId: string) {
|
|
const conv = await this.prisma.supportConversation.findUnique({ where: { id: conversationId }, include: { messages: { orderBy: { createdAt: 'asc' } } } });
|
|
if (!conv) throw new NotFoundException('Conversation not found');
|
|
return conv;
|
|
}
|
|
|
|
private getBotReply(text: string): string {
|
|
const lower = text.toLowerCase();
|
|
if (lower.includes('cancel') || lower.includes('refund')) return 'To cancel or refund, go to Bookings and select the booking. Refunds are processed within 3-5 business days.';
|
|
if (lower.includes('miss') || lower.includes('missed')) return 'If you missed your train, please check the Disruptions section for alternative options.';
|
|
if (lower.includes('seat')) return 'You can select or change seats during booking. Seat changes after confirmation may incur a fee.';
|
|
return 'Thank you for contacting EDR support. An agent will assist you shortly.';
|
|
}
|
|
}
|