import { AsyncContainerModule } from "inversify"; import { IOCTYPES } from "./ioc.types"; import { AboutUsRepo, CreateAboutUsRepo } from "../modules/about-us/aboutUs.repository"; import { AboutUsService } from "../modules/about-us/aboutUs.service"; import { AddressRepo, CityRepo, ProvinceRepo, createAddressRepo, createCityRepo, createProvinceRepo, } from "../modules/address/address.repository"; import { AddressService } from "../modules/address/address.service"; import { AdminService } from "../modules/admin/admin.service"; import { AdminRepository, createAdminRepository } from "../modules/admin/repository/admin"; import { ContractRepository, createContractRepository } from "../modules/admin/repository/contract"; import { BannerRepository, SliderRepository, createBannerRepo, createSliderRepo } from "../modules/admin/repository/media"; import { PermissionRepository, createPermissionRepo } from "../modules/admin/repository/permission"; import { RoleRepository, createRoleRepo } from "../modules/admin/repository/role"; import { AuthService } from "../modules/auth/auth.service"; import { BlogService } from "../modules/blog/blog.service"; import { BlogRepository, createBlogRepo } from "../modules/blog/repository/blog"; import { BlogCategoryRepo, createBlogCategoryRepo } from "../modules/blog/repository/blogCategory"; import { BrandRepository, createBrandRepository } from "../modules/brand/brand.repository"; import { BrandService } from "../modules/brand/brand.service"; import { CancelOrderItemRepo, CancelOrderRepo, CancelReasonRepo, createCancelOrderItemRepo, createCancelOrderRepo, createCancelReasonRepo, } from "../modules/cancel/cancel.repository"; import { CancelService } from "../modules/cancel/cancel.service"; import { CartRepository, CartShipItemRepo, createCartRepo, createCartShipItemRepo } from "../modules/cart/cart.repository"; import { CartService } from "../modules/cart/cart.service"; import { AttributeValueRepo, CategoryAttributeRepo, CategoryRepository, ThemeRepository, ThemeValueRepository, createAttributeValueRepo, createCategoryAttributeRepo, createCategoryRepo, createThemeRepo, createThemeValueRepo, } from "../modules/category/category.repository"; import { CategoryService } from "../modules/category/category.service"; import { ThemeService } from "../modules/category/theme.service"; import { ChatGateway } from "../modules/chat/chat.gateway"; import { ChatService } from "../modules/chat/chat.service"; import { ChatRepo, createChatRepo } from "../modules/chat/repository/chat.repository"; import { ChatMessageRepo, createChatMessageRepo } from "../modules/chat/repository/message.repository"; import { WsAuthService } from "../modules/chat/wsAuth.service"; import { ChatbotGateway } from "../modules/chatbot/chatbot.gateway"; import { ChatbotService } from "../modules/chatbot/providers/chatbot.service"; import { DataContextService } from "../modules/chatbot/providers/data-context.service"; import { LLMService } from "../modules/chatbot/providers/llm.service"; import { WebSocketAuthService } from "../modules/chatbot/providers/websocket-auth.service"; import { ContactUsRepo, CreateContactUsRepo } from "../modules/contact-us/contactUs.repository"; import { ContactUsService } from "../modules/contact-us/contactUs.service"; import { CouponRepo, CouponUsageRepo, createCouponRepo, createCouponUsageRepo } from "../modules/Coupon/coupon.repository"; import { CouponService } from "../modules/Coupon/coupon.service"; import { FaqRepo, createFaqRepo } from "../modules/faq/faq.repository"; import { FaqService } from "../modules/faq/faq.service"; import { FineService } from "../modules/fine/fine.service"; import { FineRepo, createFineRepo } from "../modules/fine/repository/fine.repository"; import { FineRuleRepo, createFineRuleRepo } from "../modules/fine/repository/fineRule.repository"; import { AsanPardakhtGateway } from "../modules/IPG/gateways/asanpardakht"; import { ZarinPalGateway } from "../modules/IPG/gateways/zarinpal"; import { PaymentGateway } from "../modules/IPG/PaymentGateway"; import { JobService } from "../modules/job/job.service"; import { JobRepo, createJobRepo } from "../modules/job/repository/job.repo"; import { ResumeRepo, createResumeRepo } from "../modules/job/repository/resume.repo"; import { LandingService } from "../modules/landing/landing.service"; import { LearningService } from "../modules/learning/learning.service"; import { CreateLearningRepo, LearningRepo } from "../modules/learning/repository/learning"; import { CreateLearningCategoryRepo, LearningCategoryRepo } from "../modules/learning/repository/learningCategory"; import { CreateLearningProgressRepo, LearningProgressRepo } from "../modules/learning/repository/learningProgress"; import { MediaService } from "../modules/media/media.service"; import { CreateNewsletterRepo, NewsletterRepo } from "../modules/newsletter/newsletter.repository"; import { NewsletterService } from "../modules/newsletter/newsletter.service"; import { NotificationRepo, createNotificationRepo } from "../modules/notification/notification.repository"; import { NotificationService } from "../modules/notification/notification.service"; import { OrderItemRepo, OrderRepository, createOrderItemRepo, createOrderRepo } from "../modules/order/order.repository"; import { OrderService } from "../modules/order/order.service"; import { CartPaymentRepository, PRPaymentRepository, PaymentMethodRepo, createCartPaymentRepo, createPRPaymentRepo, createPaymentMethodRepo, } from "../modules/payment/payment.repository"; import { PaymentService } from "../modules/payment/providers/payment.service"; import { PRPaymentService } from "../modules/payment/providers/PR-payment.service"; import { PricingRepository, createPricingRepo } from "../modules/pricing/pricing.repository"; import { PricingService } from "../modules/pricing/pricing.service"; import { ProductRequestService } from "../modules/product/providers/product-request.service"; import { ProductService } from "../modules/product/providers/product.service"; import { CommentRepository, createCommentRepo } from "../modules/product/Repository/comment"; import { IncredibleOffersRepo, createIncredibleOffersRepo } from "../modules/product/Repository/incredibleOffers"; import { PopularProductRepo, createPopularProductRepo } from "../modules/product/Repository/popularProduct"; import { PriceHistoryRepo, createPriceHistoryRepo } from "../modules/product/Repository/pricehistory"; import { ProductRepository, createProductRepo } from "../modules/product/Repository/product"; import { ProductAdRepo, createProductAdRepo } from "../modules/product/Repository/productAd"; import { ProductObserveRepo, createProductObserveRepo } from "../modules/product/Repository/productObserve"; import { ProductReportRepo, createProductReportRepo } from "../modules/product/Repository/productReport"; import { ProductRequestRepo, createProductRequestRepo } from "../modules/product/Repository/productRequest"; import { ProductVariantRepository, createProductVariantRepo } from "../modules/product/Repository/productVarinat"; import { QuestionRepository, createQuestionRepo } from "../modules/product/Repository/question"; import { ReportQuestionRepo, createReportQuestionRepo } from "../modules/product/Repository/reportQuestion"; import { ReturnOrderItemRepo, ReturnOrderRepo, ReturnReasonRepo, createReturnOrderItemRepo, createReturnOrderRepo, createReturnReasonRepo, } from "../modules/return/return.repository"; import { ReturnService } from "../modules/return/return.service"; import { DocumentTypeRepo, createDocumentTypeRepo } from "../modules/seller/repository/documentType.repository"; import { LegalSellerRepo, createLegalSellerRepo } from "../modules/seller/repository/legalSeller.repository"; import { RealSellerRepo, createRealSellerRepo } from "../modules/seller/repository/realSeller.repository"; import { SellerContractRepo, createSellerContractRepo } from "../modules/seller/repository/sellerContract.repository"; import { SellerDocumentRepo, createSellerDocumentRepo } from "../modules/seller/repository/sellerDocument.repository"; import { SellerStatusRepo, createSellerStatusRepo } from "../modules/seller/repository/sellerStatus.repository"; import { WholesaleRequestRepo, createWholesaleRequestRepo } from "../modules/seller/repository/wholesaleRequest.repositroy"; import { SellerRepository, createSellerRepository } from "../modules/seller/seller.repository"; import { SellerService } from "../modules/seller/seller.service"; import { ShipmentRepository, createShipmentRepository } from "../modules/shipment/shipment.repository"; import { ShipmentService } from "../modules/shipment/shipment.service"; import { ShopRepo, createShopRepo } from "../modules/shop/shop.repository"; import { ShopService } from "../modules/shop/shop.service"; import { CreateSiteSettingRepo, SiteSettingRepo } from "../modules/site-setting/siteSetting.repository"; import { SiteSettingService } from "../modules/site-setting/siteSetting.service"; import { TicketRepository, createTicketRepo } from "../modules/ticket/repository/ticket"; import { TicketCategoryRepository, createTicketCategoryRepo } from "../modules/ticket/repository/ticketCategory"; import { TicketMessageRepository, createTicketMessageRepo } from "../modules/ticket/repository/ticketMessage"; import { TicketService } from "../modules/ticket/ticket.service"; import { TokenRepository, createTokenRepository } from "../modules/token/token.repository"; import { TokenService } from "../modules/token/token.service"; import { UserRepository, WishlistRepo, createUserRepository, createWishlistRepo } from "../modules/user/user.repository"; import { UserService } from "../modules/user/user.service"; import { TransactionRepo, createTransactionRepo } from "../modules/wallet/repository/transaction.repo"; import { WalletRepo, createWalletRepo } from "../modules/wallet/repository/wallet.repo"; import { WithdrawalRepo, createWithdrawalRepo } from "../modules/wallet/repository/withdrawal.repo"; import { WalletService } from "../modules/wallet/wallet.service"; import { WarrantyRepository, createWarrantyRepository } from "../modules/warranty/warranty.repository"; import { WarrantyService } from "../modules/warranty/warranty.service"; import { CacheService } from "../utils/cache.service"; import { PassportAuth } from "../utils/passport.service"; import { RedisService } from "../utils/redis.service"; const containerModules = new AsyncContainerModule(async (bind) => { bind(IOCTYPES.PassportAuth).to(PassportAuth).inSingletonScope(); // bind(IOCTYPES.PassportAuth).to(PassportAuth).inSingletonScope(); bind(IOCTYPES.PaymentGateway).to(PaymentGateway).inSingletonScope(); bind(IOCTYPES.ZarinPalGateway).to(ZarinPalGateway).inSingletonScope(); bind(IOCTYPES.AsanPardakhtGateway).to(AsanPardakhtGateway).inSingletonScope(); // #region services bind(IOCTYPES.CategoryService).to(CategoryService).inSingletonScope(); bind(IOCTYPES.ThemeService).to(ThemeService).inSingletonScope(); bind(IOCTYPES.AuthService).to(AuthService).inSingletonScope(); bind(IOCTYPES.ChatGateway).to(ChatGateway).inSingletonScope(); bind(IOCTYPES.ChatService).to(ChatService).inSingletonScope(); bind(IOCTYPES.WsAuthService).to(WsAuthService).inSingletonScope(); bind(IOCTYPES.TokenService).to(TokenService).inSingletonScope(); bind(IOCTYPES.SellerService).to(SellerService).inSingletonScope(); bind(IOCTYPES.UserService).to(UserService).inSingletonScope(); bind(IOCTYPES.AdminService).to(AdminService).inSingletonScope(); bind(IOCTYPES.ProductService).to(ProductService).inSingletonScope(); bind(IOCTYPES.ProductRequestService).to(ProductRequestService).inSingletonScope(); bind(IOCTYPES.BrandService).to(BrandService).inSingletonScope(); bind(IOCTYPES.WarrantyService).to(WarrantyService).inSingletonScope(); bind(IOCTYPES.ShipmentService).to(ShipmentService).inSingletonScope(); bind(IOCTYPES.CartService).to(CartService).inSingletonScope(); bind(IOCTYPES.PaymentService).to(PaymentService).inSingletonScope(); bind(IOCTYPES.PRPaymentService).to(PRPaymentService).inSingletonScope(); bind(IOCTYPES.OrderService).to(OrderService).inSingletonScope(); bind(IOCTYPES.CouponService).to(CouponService).inSingletonScope(); bind(IOCTYPES.LandingService).to(LandingService).inSingletonScope(); bind(IOCTYPES.BlogService).to(BlogService).inSingletonScope(); bind(IOCTYPES.TicketService).to(TicketService).inSingletonScope(); bind(IOCTYPES.WalletService).to(WalletService).inSingletonScope(); bind(IOCTYPES.JobService).to(JobService).inSingletonScope(); bind(IOCTYPES.FaqService).to(FaqService).inSingletonScope(); bind(IOCTYPES.SiteSettingService).to(SiteSettingService).inSingletonScope(); bind(IOCTYPES.NotificationService).to(NotificationService).inSingletonScope(); bind(IOCTYPES.ReturnService).to(ReturnService).inSingletonScope(); bind(IOCTYPES.CancelService).to(CancelService).inSingletonScope(); bind(IOCTYPES.FineService).to(FineService).inSingletonScope(); bind(IOCTYPES.AddressService).to(AddressService).inSingletonScope(); bind(IOCTYPES.ShopService).to(ShopService).inSingletonScope(); bind(IOCTYPES.MediaService).to(MediaService).inSingletonScope(); bind(IOCTYPES.ContactUsService).to(ContactUsService).inSingletonScope(); bind(IOCTYPES.AboutUsService).to(AboutUsService).inSingletonScope(); bind(IOCTYPES.NewsletterService).to(NewsletterService).inSingletonScope(); bind(IOCTYPES.PricingService).to(PricingService).inSingletonScope(); bind(IOCTYPES.LearningService).to(LearningService).inSingletonScope(); bind(IOCTYPES.RedisService).to(RedisService).inSingletonScope(); bind(IOCTYPES.CacheService).to(CacheService).inSingletonScope(); bind(IOCTYPES.ChatbotService).to(ChatbotService).inSingletonScope(); bind(IOCTYPES.ChatbotLLMService).to(LLMService).inSingletonScope(); bind(IOCTYPES.ChatbotDataContextService).to(DataContextService).inSingletonScope(); bind(IOCTYPES.ChatbotWebSocketAuthService).to(WebSocketAuthService).inSingletonScope(); bind(IOCTYPES.ChatbotGateway).to(ChatbotGateway).inSingletonScope(); // #endregion // #region repository bind(IOCTYPES.CategoryRepository).toDynamicValue(createCategoryRepo).inSingletonScope(); bind(IOCTYPES.CategoryAttributeRepository).toDynamicValue(createCategoryAttributeRepo).inSingletonScope(); bind(IOCTYPES.AttributeValueRepository).toDynamicValue(createAttributeValueRepo).inSingletonScope(); bind(IOCTYPES.TokenRepository).toDynamicValue(createTokenRepository).inSingletonScope(); bind(IOCTYPES.UserRepository).toDynamicValue(createUserRepository).inSingletonScope(); bind(IOCTYPES.AdminRepository).toDynamicValue(createAdminRepository).inSingletonScope(); bind(IOCTYPES.SellerRepository).toDynamicValue(createSellerRepository).inSingletonScope(); bind(IOCTYPES.LegalSellerRepo).toDynamicValue(createLegalSellerRepo).inSingletonScope(); bind(IOCTYPES.RealSellerRepo).toDynamicValue(createRealSellerRepo).inSingletonScope(); bind(IOCTYPES.SellerDocumentRepo).toDynamicValue(createSellerDocumentRepo).inSingletonScope(); bind(IOCTYPES.SellerContractRepo).toDynamicValue(createSellerContractRepo).inSingletonScope(); bind(IOCTYPES.SellerStatusRepo).toDynamicValue(createSellerStatusRepo).inSingletonScope(); bind(IOCTYPES.DocumentTypeRepo).toDynamicValue(createDocumentTypeRepo).inSingletonScope(); bind(IOCTYPES.BrandRepository).toDynamicValue(createBrandRepository).inSingletonScope(); bind(IOCTYPES.WarrantyRepository).toDynamicValue(createWarrantyRepository).inSingletonScope(); bind(IOCTYPES.ProductRepository).toDynamicValue(createProductRepo).inSingletonScope(); bind(IOCTYPES.ShipmentRepository).toDynamicValue(createShipmentRepository).inSingletonScope(); bind(IOCTYPES.ProductVariantRepository).toDynamicValue(createProductVariantRepo).inSingletonScope(); bind(IOCTYPES.ThemeRepository).toDynamicValue(createThemeRepo).inSingletonScope(); bind(IOCTYPES.ThemeValueRepository).toDynamicValue(createThemeValueRepo).inSingletonScope(); bind(IOCTYPES.QuestionRepository).toDynamicValue(createQuestionRepo).inSingletonScope(); bind(IOCTYPES.CommentRepository).toDynamicValue(createCommentRepo).inSingletonScope(); bind(IOCTYPES.CartRepository).toDynamicValue(createCartRepo).inSingletonScope(); bind(IOCTYPES.CartPaymentRepo).toDynamicValue(createCartPaymentRepo).inSingletonScope(); bind(IOCTYPES.PRPaymentRepo).toDynamicValue(createPRPaymentRepo).inSingletonScope(); bind(IOCTYPES.OrderRepository).toDynamicValue(createOrderRepo).inSingletonScope(); bind(IOCTYPES.OrderItemRepo).toDynamicValue(createOrderItemRepo).inSingletonScope(); bind(IOCTYPES.ProductRequestRepo).toDynamicValue(createProductRequestRepo).inSingletonScope(); bind(IOCTYPES.PricingRepo).toDynamicValue(createPricingRepo).inSingletonScope(); bind(IOCTYPES.CartShipItemRepo).toDynamicValue(createCartShipItemRepo).inSingletonScope(); bind(IOCTYPES.PaymentMethodRepo).toDynamicValue(createPaymentMethodRepo).inSingletonScope(); bind(IOCTYPES.CouponRepo).toDynamicValue(createCouponRepo).inSingletonScope(); bind(IOCTYPES.CouponUsageRepo).toDynamicValue(createCouponUsageRepo).inSingletonScope(); bind(IOCTYPES.SliderRepository).toDynamicValue(createSliderRepo).inSingletonScope(); bind(IOCTYPES.BannerRepository).toDynamicValue(createBannerRepo).inSingletonScope(); bind(IOCTYPES.ReportQuestionRepo).toDynamicValue(createReportQuestionRepo).inSingletonScope(); bind(IOCTYPES.ContractRepository).toDynamicValue(createContractRepository).inSingletonScope(); bind(IOCTYPES.ProductReportRepo).toDynamicValue(createProductReportRepo).inSingletonScope(); bind(IOCTYPES.PriceHistoryRepo).toDynamicValue(createPriceHistoryRepo).inSingletonScope(); bind(IOCTYPES.ProductAdRepo).toDynamicValue(createProductAdRepo).inSingletonScope(); bind(IOCTYPES.PopularProductRepo).toDynamicValue(createPopularProductRepo).inSingletonScope(); bind(IOCTYPES.IncredibleOffersRepo).toDynamicValue(createIncredibleOffersRepo).inSingletonScope(); bind(IOCTYPES.ProductObserveRepo).toDynamicValue(createProductObserveRepo).inSingletonScope(); bind(IOCTYPES.BlogRepository).toDynamicValue(createBlogRepo).inSingletonScope(); bind(IOCTYPES.BlogCategoryRepo).toDynamicValue(createBlogCategoryRepo).inSingletonScope(); bind(IOCTYPES.LearningRepo).toDynamicValue(CreateLearningRepo).inSingletonScope(); bind(IOCTYPES.LearningProgressRepo).toDynamicValue(CreateLearningProgressRepo).inSingletonScope(); bind(IOCTYPES.LearningCategoryRepo).toDynamicValue(CreateLearningCategoryRepo).inSingletonScope(); bind(IOCTYPES.RoleRepository).toDynamicValue(createRoleRepo).inSingletonScope(); bind(IOCTYPES.PermissionRepository).toDynamicValue(createPermissionRepo).inSingletonScope(); bind(IOCTYPES.TicketRepository).toDynamicValue(createTicketRepo).inSingletonScope(); bind(IOCTYPES.TicketMessageRepository).toDynamicValue(createTicketMessageRepo).inSingletonScope(); bind(IOCTYPES.TicketCategoryRepository).toDynamicValue(createTicketCategoryRepo).inSingletonScope(); bind(IOCTYPES.ChatRepository).toDynamicValue(createChatRepo).inSingletonScope(); bind(IOCTYPES.ChatMessageRepository).toDynamicValue(createChatMessageRepo).inSingletonScope(); bind(IOCTYPES.WalletRepo).toDynamicValue(createWalletRepo).inSingletonScope(); bind(IOCTYPES.TransactionRepo).toDynamicValue(createTransactionRepo).inSingletonScope(); bind(IOCTYPES.WithdrawalRepo).toDynamicValue(createWithdrawalRepo).inSingletonScope(); bind(IOCTYPES.WishlistRepo).toDynamicValue(createWishlistRepo).inSingletonScope(); bind(IOCTYPES.JobRepo).toDynamicValue(createJobRepo).inSingletonScope(); bind(IOCTYPES.ResumeRepo).toDynamicValue(createResumeRepo).inSingletonScope(); bind(IOCTYPES.FaqRepo).toDynamicValue(createFaqRepo).inSingletonScope(); bind(IOCTYPES.NotificationRepo).toDynamicValue(createNotificationRepo).inSingletonScope(); bind(IOCTYPES.ReturnOrderRepo).toDynamicValue(createReturnOrderRepo).inSingletonScope(); bind(IOCTYPES.CancelOrderRepo).toDynamicValue(createCancelOrderRepo).inSingletonScope(); bind(IOCTYPES.ReturnOrderItemRepo).toDynamicValue(createReturnOrderItemRepo).inSingletonScope(); bind(IOCTYPES.CancelOrderItemRepo).toDynamicValue(createCancelOrderItemRepo).inSingletonScope(); bind(IOCTYPES.ReturnReasonRepo).toDynamicValue(createReturnReasonRepo).inSingletonScope(); bind(IOCTYPES.CancelReasonRepo).toDynamicValue(createCancelReasonRepo).inSingletonScope(); bind(IOCTYPES.FineRuleRepo).toDynamicValue(createFineRuleRepo).inSingletonScope(); bind(IOCTYPES.FineRepo).toDynamicValue(createFineRepo).inSingletonScope(); bind(IOCTYPES.ShopRepo).toDynamicValue(createShopRepo).inSingletonScope(); bind(IOCTYPES.WholesaleRequestRepo).toDynamicValue(createWholesaleRequestRepo).inSingletonScope(); bind(IOCTYPES.AddressRepo).toDynamicValue(createAddressRepo).inSingletonScope(); bind(IOCTYPES.CityRepo).toDynamicValue(createCityRepo).inSingletonScope(); bind(IOCTYPES.ProvinceRepo).toDynamicValue(createProvinceRepo).inSingletonScope(); bind(IOCTYPES.ContactUsRepo).toDynamicValue(CreateContactUsRepo).inSingletonScope(); bind(IOCTYPES.AboutUsRepo).toDynamicValue(CreateAboutUsRepo).inSingletonScope(); bind(IOCTYPES.SiteSettingRepo).toDynamicValue(CreateSiteSettingRepo).inSingletonScope(); bind(IOCTYPES.NewsletterRepo).toDynamicValue(CreateNewsletterRepo).inSingletonScope(); }); export { containerModules };