feat: add repository pattern, service layer architecture, and scheduler management

- Implement repository pattern for data access layer
- Add comprehensive service layer for business logic
- Create scheduler management system with health monitoring
- Add bounded buffer utility for memory management
- Enhance security audit logging with retention policies
This commit is contained in:
2025-07-12 07:00:37 +02:00
parent e1abedb148
commit 041a1cc3ef
54 changed files with 5755 additions and 878 deletions

View File

@ -61,12 +61,20 @@ export const dashboardRouter = router({
const sessions = await ctx.prisma.session.findMany({
where,
include: {
import: {
select: {
externalSessionId: true,
},
},
messages: {
select: {
id: true,
sessionId: true,
role: true,
content: true,
order: true,
timestamp: true,
createdAt: true,
},
orderBy: { order: "asc" },
},
@ -88,7 +96,28 @@ export const dashboardRouter = router({
return {
sessions: sessions.map((session) => ({
...session,
id: session.id,
sessionId: session.import?.externalSessionId || session.id,
companyId: session.companyId,
userId: session.userId,
category: session.category,
language: session.language,
country: session.country,
ipAddress: session.ipAddress,
sentiment: session.sentiment,
messagesSent: session.messagesSent ?? undefined,
startTime: session.startTime,
endTime: session.endTime,
createdAt: session.createdAt,
updatedAt: session.updatedAt,
avgResponseTime: session.avgResponseTime,
escalated: session.escalated ?? undefined,
forwardedHr: session.forwardedHr ?? undefined,
initialMsg: session.initialMsg ?? undefined,
fullTranscriptUrl: session.fullTranscriptUrl ?? undefined,
summary: session.summary ?? undefined,
messages: session.messages,
transcriptContent: null,
questions: session.sessionQuestions.map((sq) => sq.question.content),
})),
pagination: {
@ -112,7 +141,21 @@ export const dashboardRouter = router({
companyId: ctx.company.id,
},
include: {
import: {
select: {
externalSessionId: true,
},
},
messages: {
select: {
id: true,
sessionId: true,
role: true,
content: true,
order: true,
timestamp: true,
createdAt: true,
},
orderBy: { order: "asc" },
},
sessionQuestions: {
@ -136,7 +179,28 @@ export const dashboardRouter = router({
}
return {
...session,
id: session.id,
sessionId: session.import?.externalSessionId || session.id,
companyId: session.companyId,
userId: session.userId,
category: session.category,
language: session.language,
country: session.country,
ipAddress: session.ipAddress,
sentiment: session.sentiment,
messagesSent: session.messagesSent ?? undefined,
startTime: session.startTime,
endTime: session.endTime,
createdAt: session.createdAt,
updatedAt: session.updatedAt,
avgResponseTime: session.avgResponseTime,
escalated: session.escalated ?? undefined,
forwardedHr: session.forwardedHr ?? undefined,
initialMsg: session.initialMsg ?? undefined,
fullTranscriptUrl: session.fullTranscriptUrl ?? undefined,
summary: session.summary ?? undefined,
messages: session.messages,
transcriptContent: null,
questions: session.sessionQuestions.map((sq) => sq.question.content),
};
}),