feature/research-di #1

Merged
behnam merged 37 commits from feature/research-di into develop 2024-11-21 15:50:19 +00:00
5 changed files with 75 additions and 0 deletions
Showing only changes of commit e592fef4ad - Show all commits

View File

@ -7,6 +7,8 @@ import getTestModule from "@/feature/infra/test/module/test-module";
import getInvoiceDi from "@/feature/core/invoice/data/module/invoice-di";
import { invoiceModuleKey } from "@/feature/core/invoice/invoice-module-key";
import { DependencyContainer } from "tsyringe";
import { summaryInfoModuleKey } from "@/feature/core/summary-info/domain/summary-info-module-key";
import getSummaryInfoDi from "@/feature/core/summary-info/data/module/summary-info-di";
export default function serverDi(module: string): DependencyContainer {
const getDi = {
@ -14,6 +16,7 @@ export default function serverDi(module: string): DependencyContainer {
[customerKey]: getCustomerDi,
[customerInvoiceModuleKey]: getCustomerInvoiceDi,
[invoiceModuleKey]: getInvoiceDi,
[summaryInfoModuleKey]: getSummaryInfoDi,
}[module]
if (!getDi) throw new Error("Server Di didn't found for module: " + module)

View File

@ -0,0 +1,20 @@
import di from "@/bootstrap/di/init-di"
import fetchCustomersAmountUsecase from "@/feature/core/customer/domain/usecase/fetch-customers-amount-usecase"
import fetchAllInvoicesAmountUsecase from "@/feature/core/invoice/domain/usecase/fetch-all-invoices-amount-usecase"
import fetchInvoicesStatusSummary from "@/feature/core/invoice/domain/usecase/fetch-invoices-status-summary"
import fetchSummaryInfoUsecase from "@/feature/core/summary-info/domain/usecase/fetch-summary-info-usecase"
export default function getSummaryInfoDi() {
const summaryInfoDi = di.createChildContainer()
summaryInfoDi.register(fetchAllInvoicesAmountUsecase.name, {
useValue: fetchAllInvoicesAmountUsecase
})
summaryInfoDi.register(fetchCustomersAmountUsecase.name, {
useValue: fetchCustomersAmountUsecase
})
summaryInfoDi.register(fetchInvoicesStatusSummary.name, {
useValue: fetchSummaryInfoUsecase
})
return summaryInfoDi
}

View File

@ -0,0 +1 @@
export const summaryInfoModuleKey = "summaryInfoModuleKey"

View File

@ -0,0 +1,34 @@
import serverDi from "@/feature/common/server-di";
import fetchCustomersAmountUsecase from "@/feature/core/customer/domain/usecase/fetch-customers-amount-usecase";
import fetchAllInvoicesAmountUsecase from "@/feature/core/invoice/domain/usecase/fetch-all-invoices-amount-usecase";
import fetchInvoicesStatusSummary from "@/feature/core/invoice/domain/usecase/fetch-invoices-status-summary";
import { summaryInfoModuleKey } from "@/feature/core/summary-info/domain/summary-info-module-key";
import SummaryInfo from "@/feature/core/summary-info/domain/value-object/summary-info";
import { connection } from "next/server";
export default async function fetchSummaryInfoUsecase(): Promise<SummaryInfo> {
connection()
try{
const summaryInfoDi = serverDi(summaryInfoModuleKey)
const invoicesAmountPromise = summaryInfoDi.resolve<typeof fetchAllInvoicesAmountUsecase>(fetchAllInvoicesAmountUsecase.name)()
const customersAmountPromise = summaryInfoDi.resolve<typeof fetchCustomersAmountUsecase>(fetchCustomersAmountUsecase.name)()
const invoiceSummaryPomise = summaryInfoDi.resolve<typeof fetchInvoicesStatusSummary>(fetchInvoicesStatusSummary.name)()
const [invoicesAmount, customersAmount, invoicesSummary] = await Promise.all([
invoicesAmountPromise,
customersAmountPromise,
invoiceSummaryPomise,
]);
return new SummaryInfo({
invoicesNumber: invoicesAmount,
customersNumber: customersAmount,
invoicesSummary: invoicesSummary
})
} catch (error) {
console.error('Database Error:', error);
throw new Error('Failed to fetch card data.');
}
}

View File

@ -0,0 +1,17 @@
import InvoiceStatusSummary from "@/feature/core/invoice/domain/value-object/invoice-status";
export default class SummaryInfo {
customersNumber: number;
invoicesNumber: number;
invoicesSummary: InvoiceStatusSummary
constructor({
customersNumber,
invoicesNumber,
invoicesSummary
}: SummaryInfo) {
this.customersNumber = customersNumber
this.invoicesNumber = invoicesNumber
this.invoicesSummary = invoicesSummary
}
}