feature/research-di #1
@ -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)
|
||||
|
20
src/feature/core/summary-info/data/module/summary-info-di.ts
Normal file
20
src/feature/core/summary-info/data/module/summary-info-di.ts
Normal 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
|
||||
}
|
@ -0,0 +1 @@
|
||||
export const summaryInfoModuleKey = "summaryInfoModuleKey"
|
@ -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.');
|
||||
}
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user