import { container, instanceCachingFactory } from "tsyringe"; import AssignStockToUserServiceImpl from "./application/assignStockToUser.service.impl"; import CreateItemServiceImpl from "./application/createItem.service.impl"; import CreateStockServiceImpl from "./application/createStock.service.impl"; import DeleteItemServiceImpl from "./application/deleteItem.service.impl"; import ListUserStockServiceImpl from "./application/getStock.service.impl"; import ListItemsServiceImpl from "./application/listItems.service.impl"; import ListStockServiceImpl from "./application/listStock.service.impl"; import UpdateItemServiceImpl from "./application/updateItem.service.impl"; import ItemRepository from "./domain/repositories/item.repository"; import StockRepository from "./domain/repositories/stock.repository"; import UserRepository from "./domain/repositories/user.repository"; import marketplaceDataSource from "./infrastructure/db/postgres.datasource"; import ItemRepositoryImpl from "./infrastructure/repositories/item.repository.impl"; import StockRepositoryImpl from "./infrastructure/repositories/stock.repository.impl"; import UserRepositoryImpl from "./infrastructure/repositories/user.repository.impl"; import inMemoryDataSource from "./tests/infrastructure/db/inMemory.datasource"; const marketplaceContainer = container; marketplaceContainer.register("Marketplace:DataSource", { useValue: process.env.NODE_ENV === "test" ? inMemoryDataSource : marketplaceDataSource }); marketplaceContainer.register("Items:ItemRepository", { useFactory: instanceCachingFactory(c => c.resolve(ItemRepositoryImpl)) }); marketplaceContainer.register("Items:UserRepository", { useFactory: instanceCachingFactory(c => c.resolve(UserRepositoryImpl)) }); marketplaceContainer.register("Stock:StockRepository", { useFactory: instanceCachingFactory(c => c.resolve(StockRepositoryImpl)) }); marketplaceContainer.register("Items:CreateItemService", { useClass: CreateItemServiceImpl }); marketplaceContainer.register("Items:UpdateItemService", { useClass: UpdateItemServiceImpl }); marketplaceContainer.register("Items:DeleteItemService", { useClass: DeleteItemServiceImpl }); marketplaceContainer.register("Items:ListItemsService", { useClass: ListItemsServiceImpl }); marketplaceContainer.register("Stock:AssignStockToUserService", { useClass: AssignStockToUserServiceImpl }); marketplaceContainer.register("Stock:ListUserStockService", { useClass: ListUserStockServiceImpl }); marketplaceContainer.register("Stock:CreateStockService", { useClass: CreateStockServiceImpl }); marketplaceContainer.register("Stock:ListStockService", { useClass: ListStockServiceImpl }); export default marketplaceContainer;