refactor: full DDD + Clean Architecture refactor
Deploy FileDrop / deploy (push) Successful in 48s
Deploy FileDrop / deploy (push) Successful in 48s
- Hapus src/utils/ (17 files) + src/db/ (8 files) dead code - Absorb 7 re-export stubs → real impl di lokasi DDD - Buat src/infrastructure/di.ts (DI container) - Rewrite 5 controllers pakai repository/DI - Fix shared/utils imports, env.ts, routes, index.ts - Update package.json build path migrate - Lint clean, build clean
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
/**
|
||||
* 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';
|
||||
import { UploadBatcher } from './telegram/upload-batcher';
|
||||
|
||||
// ─── 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,
|
||||
);
|
||||
|
||||
/** Singleton UploadBatcher for batched small-file uploads. */
|
||||
export const uploadBatcher = new UploadBatcher(fileRepository, telegramService);
|
||||
Reference in New Issue
Block a user