From e592fef4ad99078757ba669ac9489656b2891e22 Mon Sep 17 00:00:00 2001 From: behnam Date: Fri, 1 Nov 2024 16:33:19 +0300 Subject: [PATCH] Add module for fetch summary info --- src/feature/common/server-di.ts | 3 ++ .../data/module/summary-info-di.ts | 20 +++++++++++ .../domain/summary-info-module-key.ts | 1 + .../usecase/fetch-summary-info-usecase.ts | 34 +++++++++++++++++++ .../domain/value-object/summary-info.ts | 17 ++++++++++ 5 files changed, 75 insertions(+) create mode 100644 src/feature/core/summary-info/data/module/summary-info-di.ts create mode 100644 src/feature/core/summary-info/domain/summary-info-module-key.ts create mode 100644 src/feature/core/summary-info/domain/usecase/fetch-summary-info-usecase.ts create mode 100644 src/feature/core/summary-info/domain/value-object/summary-info.ts diff --git a/src/feature/common/server-di.ts b/src/feature/common/server-di.ts index af68905..b1653f9 100644 --- a/src/feature/common/server-di.ts +++ b/src/feature/common/server-di.ts @@ -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) diff --git a/src/feature/core/summary-info/data/module/summary-info-di.ts b/src/feature/core/summary-info/data/module/summary-info-di.ts new file mode 100644 index 0000000..cd181eb --- /dev/null +++ b/src/feature/core/summary-info/data/module/summary-info-di.ts @@ -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 +} \ No newline at end of file diff --git a/src/feature/core/summary-info/domain/summary-info-module-key.ts b/src/feature/core/summary-info/domain/summary-info-module-key.ts new file mode 100644 index 0000000..a2e027b --- /dev/null +++ b/src/feature/core/summary-info/domain/summary-info-module-key.ts @@ -0,0 +1 @@ +export const summaryInfoModuleKey = "summaryInfoModuleKey" \ No newline at end of file diff --git a/src/feature/core/summary-info/domain/usecase/fetch-summary-info-usecase.ts b/src/feature/core/summary-info/domain/usecase/fetch-summary-info-usecase.ts new file mode 100644 index 0000000..e0a6305 --- /dev/null +++ b/src/feature/core/summary-info/domain/usecase/fetch-summary-info-usecase.ts @@ -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 { + connection() + + try{ + const summaryInfoDi = serverDi(summaryInfoModuleKey) + const invoicesAmountPromise = summaryInfoDi.resolve(fetchAllInvoicesAmountUsecase.name)() + const customersAmountPromise = summaryInfoDi.resolve(fetchCustomersAmountUsecase.name)() + const invoiceSummaryPomise = summaryInfoDi.resolve(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.'); + } +} \ No newline at end of file diff --git a/src/feature/core/summary-info/domain/value-object/summary-info.ts b/src/feature/core/summary-info/domain/value-object/summary-info.ts new file mode 100644 index 0000000..9c30901 --- /dev/null +++ b/src/feature/core/summary-info/domain/value-object/summary-info.ts @@ -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 + } +} \ No newline at end of file