Deploy FileDrop / deploy (push) Successful in 48s
- Removed UploadBatcher (src/infrastructure/telegram/upload-batcher.ts + DI): pending uploads no longer lost on crash, files sent directly to Telegram - Changed upload-controller to use Bun.file().stream() instead of createReadStream - Made PER_BOT_CONCURRENCY configurable via TELEGRAM_BOT_CONCURRENCY env - Fixed 18 test files with updated import paths and mock shapes - Updated package.json test script: telegramQueue.test.ts → bot-pool.test.ts - Build, lint, and test suite all pass
48 lines
2.3 KiB
TypeScript
48 lines
2.3 KiB
TypeScript
/**
|
|
* Dependency Injection container.
|
|
*
|
|
* Wires up singleton instances of all repositories and application services,
|
|
* making them available to controllers and other adapters without requiring
|
|
* a full DI framework.
|
|
*
|
|
* @module infrastructure/di
|
|
*/
|
|
|
|
import type { IBucketRepository } from '../domain/ports/bucket-repository';
|
|
import type { IFilePartRepository } from '../domain/ports/file-part-repository';
|
|
import type { IFileRepository } from '../domain/ports/file-repository';
|
|
import type { IMultipartRepository } from '../domain/ports/multipart-repository';
|
|
import type { ITelegramService } from '../domain/ports/telegram-service';
|
|
import { DrizzleBucketRepository } from './persistence/repositories/bucket-repository';
|
|
import { DrizzleFilePartRepository } from './persistence/repositories/file-part-repository';
|
|
import { DrizzleFileRepository } from './persistence/repositories/file-repository';
|
|
import { DrizzleMultipartRepository } from './persistence/repositories/multipart-repository';
|
|
import { botPool } from './telegram/bot-pool';
|
|
import { ChunkedStorage } from './telegram/chunked-storage';
|
|
|
|
// ─── Repository Singletons ──────────────────────────────────────────
|
|
|
|
/** Singleton IFileRepository instance backed by Drizzle ORM. */
|
|
export const fileRepository: IFileRepository = new DrizzleFileRepository();
|
|
|
|
/** Singleton IBucketRepository instance backed by Drizzle ORM. */
|
|
export const bucketRepository: IBucketRepository = new DrizzleBucketRepository();
|
|
|
|
/** Singleton IFilePartRepository instance backed by Drizzle ORM. */
|
|
export const filePartRepository: IFilePartRepository = new DrizzleFilePartRepository();
|
|
|
|
/** Singleton IMultipartRepository instance backed by Drizzle ORM. */
|
|
export const multipartRepository: IMultipartRepository = new DrizzleMultipartRepository();
|
|
|
|
/** Singleton ITelegramService instance backed by the bot pool. */
|
|
export const telegramService: ITelegramService = botPool;
|
|
|
|
// ─── Service Singletons ─────────────────────────────────────────────
|
|
|
|
/** Singleton ChunkedStorage for large file chunked uploads. */
|
|
export const chunkedStorage = new ChunkedStorage(
|
|
fileRepository,
|
|
filePartRepository,
|
|
telegramService,
|
|
);
|