- Add DELETE /users/me endpoint with cascading data removal - Implement frontend confirmation dialog and deletion flow - Add audit logging for deletion requests - Update localization files for new UI strings - Add scheduled cleanup service for AI traces - Document GDPR compliance in technical specification BREAKING CHANGE: Users can now permanently delete their profiles and associated data
5.3 KiB
Plan: Implementera automatiserad datarensning för AiTrace
Mål
Implementera en automatiserad rensning av gamla AiTrace-poster för att säkerställa att känsliga data inte lagras längre än nödvändigt och för att följa GDPR-krav.
Bakgrund
AiTrace-tabellen lagrar känsliga data (t.ex. maskerade promptar och AI-svar) utan någon retention-policy.- Risk för att data ackumuleras obehindrat, vilket kan leda till lagringsproblem och GDPR-brott.
- Enligt GDPR bör känsliga data rensas efter en viss tid om de inte längre behövs för felsökning eller analys.
Krav
- Rensa
AiTrace-poster äldre än 30 dagar. - Schemalägg rensningen att köra dagligen vid midnatt.
- Logga antalet rensade poster för övervakning.
- Säkerställa att rensningen inte påverkar systemets prestanda.
Implementeringsplan
Steg 1: Installera beroenden
Installera NestJS Schedule-modulen för att möjliggöra schemalagda jobb.
Kommando:
npm install @nestjs/schedule
Steg 2: Konfigurera ScheduleModule
Lägg till ScheduleModule i AppModule för att aktivera schemalagda jobb.
Fil: backend/src/app.module.ts
Ändring:
import { ScheduleModule } from '@nestjs/schedule';
@Module({
imports: [ScheduleModule.forRoot()],
})
export class AppModule {}
Steg 3: Skapa AiTraceCleanupService
Skapa en ny tjänst för att hantera rensningen av AiTrace-poster.
Fil: backend/src/ai/ai-trace-cleanup.service.ts
Innehåll:
import { Injectable, Logger } from '@nestjs/common';
import { Cron, CronExpression } from '@nestjs/schedule';
import { PrismaService } from '../prisma/prisma.service';
@Injectable()
export class AiTraceCleanupService {
private readonly logger = new Logger(AiTraceCleanupService.name);
constructor(private readonly prisma: PrismaService) {}
@Cron(CronExpression.EVERY_DAY_AT_MIDNIGHT)
async cleanupOldTraces() {
this.logger.log('Starting cleanup of old AiTrace records...');
const thirtyDaysAgo = new Date();
thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30);
const result = await this.prisma.aiTrace.deleteMany({
where: {
createdAt: {
lt: thirtyDaysAgo,
},
},
});
this.logger.log(`Cleaned up ${result.count} old AiTrace records.`);
}
}
Steg 4: Registrera AiTraceCleanupService
Lägg till AiTraceCleanupService i AiTraceModule för att aktivera tjänsten.
Fil: backend/src/ai/ai-trace.module.ts
Ändring:
import { AiTraceCleanupService } from './ai-trace-cleanup.service';
@Module({
providers: [AiTraceService, AiTraceCleanupService],
})
export class AiTraceModule {}
Steg 5: Testa rensningen manuellt
Skapa en testmetod för att manuellt köra rensningen och verifiera att den fungerar som förväntat.
Fil: backend/src/ai/ai-trace.controller.ts
Ändring:
import { AiTraceCleanupService } from './ai-trace-cleanup.service';
@Controller('ai/traces')
export class AiTraceController {
constructor(
private readonly aiTraceService: AiTraceService,
private readonly aiTraceCleanupService: AiTraceCleanupService,
) {}
@Post('cleanup')
@Roles('admin')
async manualCleanup() {
await this.aiTraceCleanupService.cleanupOldTraces();
return { success: true, message: 'Manual cleanup completed.' };
}
}
Steg 6: Verifiera implementationen
- Skapa några testposter i
AiTrace-tabellen med olikacreatedAt-datum. - Kör den manuella rensningen via
POST /api/ai/traces/cleanup. - Verifiera att endast poster äldre än 30 dagar har rensats.
- Kontrollera loggarna för att säkerställa att antalet rensade poster loggas korrekt.
Steg 7: Dokumentera ändringarna
Uppdatera TEKNISK_BESKRIVNING.md med information om den automatiserade rensningen.
Fil: TEKNISK_BESKRIVNING.md
Ändring:
## Automatiserad datarensning för AiTrace
För att säkerställa att känsliga data inte lagras längre än nödvändigt, har en automatiserad rensning implementerats:
- **Rensningsintervall**: Dagligen vid midnatt.
- **Retention-period**: 30 dagar.
- **Loggning**: Antalet rensade poster loggas för övervakning.
### Implementation
- **Tjänst**: `AiTraceCleanupService` i `backend/src/ai/ai-trace-cleanup.service.ts`.
- **Schemaläggning**: Använder `@nestjs/schedule` för att köra rensningen dagligen.
- **Manuell rensning**: Tillgänglig via `POST /api/ai/traces/cleanup` (kräver admin-behörighet).
### GDPR-efterlevnad
- Rensningen säkerställer att känsliga data raderas efter 30 dagar, vilket uppfyller GDPR-krav på dataminimering.
- Användare kan begära att deras data raderas tidigare via admin-panelen.
Frågor och överväganden
- Retention-period: Är 30 dagar en lämplig period, eller bör den justeras baserat påelsökningsbehov?
- Loggning: Bör loggarna för rensningen sparas längre för revisionsändamål?
- Prestanda: Bör rensningen köra under lågtrafikperioder för att minimera påverkan på systemet?
Nästa steg
- Implementera planen enligt ovan.
- Testa rensningen i en testmiljö.
- Verifiera att loggarna är korrekta och att rensningen fungerar som förväntat.
- Dokumentera ändringarna i
TEKNISK_BESKRIVNING.md. - Informera teamet om den nya funktionaliteten och dess påverkan på GDPR-efterlevnaden.