Neues Modul src/backup/ fuer Backups und Datenuebertragung zwischen Deployments: GET /backup/export liefert ein JSON-Bundle mit allen fachlichen Daten (Bienenstaende bis Etikettenvorlagen, ~30 Tabellen), POST /backup/import spielt so ein Bundle wieder ein. Bewusst NICHT enthalten: User/Rollen/Rechte (werden ueber die Benutzerverwaltung gepflegt, Permission-Zeilen werden ohnehin bei jedem Start aus dem Code neu synchronisiert), Audit-Log (unveraenderliche Historie), Notifications (fluechtig), Dokumente (nur die DB-Zeile waere gesichert, nicht die tatsaechliche Datei auf der Festplatte). Import laeuft in einer Transaktion, Tabellen in Abhaengigkeitsreihenfolge (z.B. Bienenstand vor Volk, Volk vor Durchsicht). Selbstreferenzen (Koenigin -> Mutterkoenigin) werden in zwei Durchgaengen aufgeloest, damit die Reihenfolge im Export keine Rolle spielt. userId-Felder, die im Zielsystem nicht existieren (z.B. Uebertragung auf ein anderes Deployment), werden auf den ausfuehrenden Admin umgebogen statt die Fremdschluessel-Pruefung scheitern zu lassen. AutomationRule wird ueber triggerType statt id abgeglichen, da diese Zeilen code-fest sind. Neue Berechtigungen backup:export/backup:import. 8 neue Unit-Tests fuer die Sonderfaelle (Selbstreferenz, userId-Remapping, AutomationRule-Abgleich, Audit-Eintrag). Co-Authored-By: Claude Sonnet 5 <[email protected]>
103 lines
4.0 KiB
TypeScript
103 lines
4.0 KiB
TypeScript
import { Module } from '@nestjs/common';
|
|
import { ConfigModule } from '@nestjs/config';
|
|
import { APP_GUARD } from '@nestjs/core';
|
|
import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler';
|
|
import { PrismaModule } from './prisma/prisma.module';
|
|
import { HealthModule } from './health/health.module';
|
|
import { AuditModule } from './audit/audit.module';
|
|
import { UsersModule } from './users/users.module';
|
|
import { AuthModule } from './auth/auth.module';
|
|
import { RolesModule } from './roles/roles.module';
|
|
import { ApiariesModule } from './apiaries/apiaries.module';
|
|
import { ColoniesModule } from './colonies/colonies.module';
|
|
import { QueensModule } from './queens/queens.module';
|
|
import { InspectionsModule } from './inspections/inspections.module';
|
|
import { TasksModule } from './tasks/tasks.module';
|
|
import { VarroaModule } from './varroa/varroa.module';
|
|
import { TreatmentsModule } from './treatments/treatments.module';
|
|
import { FeedingsModule } from './feedings/feedings.module';
|
|
import { HarvestsModule } from './harvests/harvests.module';
|
|
import { ExtractionsModule } from './extractions/extractions.module';
|
|
import { HoneyBatchesModule } from './honey-batches/honey-batches.module';
|
|
import { StorageModule } from './storage/storage.module';
|
|
import { DashboardModule } from './dashboard/dashboard.module';
|
|
import { SearchModule } from './search/search.module';
|
|
import { ExportModule } from './export/export.module';
|
|
import { QrModule } from './qr/qr.module';
|
|
import { ProductsModule } from './products/products.module';
|
|
import { BottlingModule } from './bottling/bottling.module';
|
|
import { EquipmentModule } from './equipment/equipment.module';
|
|
import { CalendarModule } from './calendar/calendar.module';
|
|
import { NotificationsModule } from './notifications/notifications.module';
|
|
import { StatisticsModule } from './statistics/statistics.module';
|
|
import { WebhooksModule } from './webhooks/webhooks.module';
|
|
import { DocumentsModule } from './documents/documents.module';
|
|
import { AutomationModule } from './automation/automation.module';
|
|
import { LabelTemplatesModule } from './label-templates/label-templates.module';
|
|
import { ImportModule } from './import/import.module';
|
|
import { PublicModule } from './public/public.module';
|
|
import { TaskTemplatesModule } from './task-templates/task-templates.module';
|
|
import { SwarmControlModule } from './swarm-control/swarm-control.module';
|
|
import { WeatherModule } from './weather/weather.module';
|
|
import { ProfileModule } from './profile/profile.module';
|
|
import { SiteSettingsModule } from './site-settings/site-settings.module';
|
|
import { BackupModule } from './backup/backup.module';
|
|
import { JwtAuthGuard } from './auth/guards/jwt-auth.guard';
|
|
import { PermissionsGuard } from './auth/guards/permissions.guard';
|
|
import { PermissionsModule } from './auth/permissions/permissions.module';
|
|
|
|
@Module({
|
|
imports: [
|
|
ConfigModule.forRoot({ isGlobal: true }),
|
|
ThrottlerModule.forRoot([{ name: 'default', ttl: 60000, limit: 100 }]),
|
|
PrismaModule,
|
|
PermissionsModule,
|
|
AuditModule,
|
|
HealthModule,
|
|
UsersModule,
|
|
AuthModule,
|
|
RolesModule,
|
|
ApiariesModule,
|
|
ColoniesModule,
|
|
QueensModule,
|
|
InspectionsModule,
|
|
TasksModule,
|
|
VarroaModule,
|
|
TreatmentsModule,
|
|
FeedingsModule,
|
|
HarvestsModule,
|
|
ExtractionsModule,
|
|
HoneyBatchesModule,
|
|
StorageModule,
|
|
DashboardModule,
|
|
SearchModule,
|
|
ExportModule,
|
|
QrModule,
|
|
ProductsModule,
|
|
BottlingModule,
|
|
EquipmentModule,
|
|
CalendarModule,
|
|
NotificationsModule,
|
|
StatisticsModule,
|
|
WebhooksModule,
|
|
DocumentsModule,
|
|
AutomationModule,
|
|
LabelTemplatesModule,
|
|
ImportModule,
|
|
PublicModule,
|
|
TaskTemplatesModule,
|
|
SwarmControlModule,
|
|
WeatherModule,
|
|
ProfileModule,
|
|
SiteSettingsModule,
|
|
BackupModule,
|
|
],
|
|
controllers: [],
|
|
providers: [
|
|
{ provide: APP_GUARD, useClass: JwtAuthGuard },
|
|
{ provide: APP_GUARD, useClass: PermissionsGuard },
|
|
{ provide: APP_GUARD, useClass: ThrottlerGuard },
|
|
],
|
|
})
|
|
export class AppModule {}
|