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