Initial commit: Kottgard production website code
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
/**
|
||||
* COMPOSITION ROOT — Wires ports to infrastructure and exposes use cases.
|
||||
* This is the only place that should know concrete implementations.
|
||||
*/
|
||||
import { InMemoryProductRepository } from '@/infrastructure/repositories/InMemoryProductRepository';
|
||||
import {
|
||||
ZustandCartRepository,
|
||||
} from '@/infrastructure/persistence/zustand/cartStore';
|
||||
import {
|
||||
ZustandAuthRepository,
|
||||
} from '@/infrastructure/persistence/zustand/authStore';
|
||||
import {
|
||||
ZustandWishlistRepository,
|
||||
} from '@/infrastructure/persistence/zustand/wishlistStore';
|
||||
import { I18nTranslationService } from '@/infrastructure/i18n/I18nTranslationService';
|
||||
import { LocalizeProductUseCase } from '@/application/use-cases/catalog/LocalizeProduct';
|
||||
import { FilterProductsUseCase } from '@/application/use-cases/catalog/FilterProducts';
|
||||
import { GetProductBySlugUseCase } from '@/application/use-cases/catalog/GetProductBySlug';
|
||||
import { AddToCartUseCase } from '@/application/use-cases/cart/AddToCart';
|
||||
import { GetCartSummaryUseCase } from '@/application/use-cases/cart/GetCartSummary';
|
||||
import { UpdateCartQuantityUseCase } from '@/application/use-cases/cart/UpdateCartQuantity';
|
||||
import { RemoveFromCartUseCase } from '@/application/use-cases/cart/RemoveFromCart';
|
||||
import { PlaceOrderUseCase } from '@/application/use-cases/checkout/PlaceOrder';
|
||||
import { LoginUseCase } from '@/application/use-cases/auth/Login';
|
||||
import { RegisterUseCase } from '@/application/use-cases/auth/Register';
|
||||
import { ToggleWishlistUseCase } from '@/application/use-cases/wishlist/ToggleWishlist';
|
||||
import { Locale } from '@/i18n/types';
|
||||
|
||||
class ApplicationContainer {
|
||||
readonly productRepository = new InMemoryProductRepository();
|
||||
readonly cartRepository = new ZustandCartRepository();
|
||||
readonly authRepository = new ZustandAuthRepository();
|
||||
readonly wishlistRepository = new ZustandWishlistRepository();
|
||||
|
||||
createTranslationService(locale: Locale): I18nTranslationService {
|
||||
return new I18nTranslationService(locale);
|
||||
}
|
||||
|
||||
createLocalizeProduct(locale: Locale): LocalizeProductUseCase {
|
||||
return new LocalizeProductUseCase(this.createTranslationService(locale));
|
||||
}
|
||||
|
||||
readonly getProductBySlug = new GetProductBySlugUseCase(this.productRepository);
|
||||
readonly addToCart = new AddToCartUseCase(this.cartRepository);
|
||||
readonly getCartSummary = new GetCartSummaryUseCase(this.cartRepository);
|
||||
readonly updateCartQuantity = new UpdateCartQuantityUseCase(this.cartRepository);
|
||||
readonly removeFromCart = new RemoveFromCartUseCase(this.cartRepository);
|
||||
readonly placeOrder = new PlaceOrderUseCase(
|
||||
this.cartRepository,
|
||||
this.authRepository
|
||||
);
|
||||
readonly login = new LoginUseCase(this.authRepository);
|
||||
readonly register = new RegisterUseCase(this.authRepository);
|
||||
readonly toggleWishlist = new ToggleWishlistUseCase(this.wishlistRepository);
|
||||
|
||||
createFilterProducts(locale: Locale): FilterProductsUseCase {
|
||||
return new FilterProductsUseCase(
|
||||
this.productRepository,
|
||||
this.createLocalizeProduct(locale)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export const container = new ApplicationContainer();
|
||||
Reference in New Issue
Block a user