Files
TREK/server/src/nest/integrations/airtrail-core.module.ts
T
Maurice 8350d04a63 refactor(db): the Immich, Synology and AirTrail columns of users get repositories of their own
UserImmichRepository, UserSynologyRepository and UserAirtrailRepository hold the eighteen connection statements UsersRepository carried, on the same users table and with their statements unchanged, provided through a small module as factories over the EntityManager. ImmichService, SynologyService, AirtrailService and JourneyService inject them instead of the account repository. UserRow drops the dead immich_access_token column (the table keeps it), and a shape test pins the account repository's size.
2026-10-10 20:15:57 +02:00

46 lines
2.2 KiB
TypeScript

import { Module } from '@nestjs/common';
import { MikroOrmModule } from '@mikro-orm/nestjs';
import { AddonsModule } from '../addons/addons.module';
import { AuditModule } from '../audit/audit.module';
import { RealtimeModule } from '../realtime/realtime.module';
import { ReservationsReadModule } from '../reservations/reservations-read.module';
import { Users } from '../../db/entities/Users.entity';
import { Reservations } from '../../db/entities/Reservations.entity';
import { ReservationEndpoints } from '../../db/entities/ReservationEndpoints.entity';
import { AppSettings } from '../../db/entities/AppSettings.entity';
import { AirtrailClient } from './airtrail.client';
import { AirtrailLinkService } from './airtrail-link.service';
import { AirtrailService } from './airtrail.service';
import { UserConnectionRepositoriesModule } from '../database/user-connection-repositories.module';
/**
* The AirTrail pieces ReservationsModule may inject: the HTTP client, the
* credential/settings service and the link lifecycle (incl. the write-back
* trigger the reservations controller fires). Deliberately does NOT import
* ReservationsModule — reservation reads go through the leaf
* ReservationsReadModule — so ReservationsModule → AirtrailCoreModule carries
* no cycle. The pull (AirtrailSyncService), which does need
* ReservationsService, lives one level up in AirtrailModule.
*
* `MikroOrmModule.forFeature([Users, Reservations, ReservationEndpoints,
* AppSettings])` (Plan 3h Task 4): `AirtrailService`'s entire credential
* surface lives on `Users` (R7 — AirTrail owns zero tables of its own);
* `AirtrailLinkService` reaches `Reservations`/`ReservationEndpoints` for its
* bookkeeping and `AppSettings` for the sync-enabled kill-switch. Only
* entity classes are imported here, not their owning Nest modules — no new
* module edge, so no cycle risk.
*/
@Module({
imports: [
AuditModule,
AddonsModule,
RealtimeModule,
ReservationsReadModule,
UserConnectionRepositoriesModule,
MikroOrmModule.forFeature([Users, Reservations, ReservationEndpoints, AppSettings]),
],
providers: [AirtrailClient, AirtrailService, AirtrailLinkService],
exports: [AirtrailClient, AirtrailService, AirtrailLinkService],
})
export class AirtrailCoreModule {}