diff --git a/STRUCTURE.md b/STRUCTURE.md
index 41287ae3..cfae56db 100644
--- a/STRUCTURE.md
+++ b/STRUCTURE.md
@@ -23,7 +23,7 @@ The project is structured into several key directories, each serving specific ro
│ | | └── [id]
│ | | ├── accounts-and-portfolios
│ | | ├── overview
- │ | | └── products
+ │ | | └── segments
│ | ├── settings
│ | | └── organizations
│ └── api
@@ -40,8 +40,8 @@ The project is structured into several key directories, each serving specific ro
| | | | └── [assetId]
| | | ├── portfolios
| | | | └── [portfolioId]
- | | | └── products
- | | | └── [productId]
+ | | | └── segments
+ | | | └── [segmentId]
| | |
| | └── ledgers-assets
| └── utils
diff --git a/locales/compiled/en.json b/locales/compiled/en.json
index 243e0e08..c22d1a02 100644
--- a/locales/compiled/en.json
+++ b/locales/compiled/en.json
@@ -45,7 +45,7 @@
"common.new.account": "New Account",
"common.new.asset": "New Asset",
"common.new.portfolio": "New Portfolio",
- "common.new.product": "New Product",
+ "common.new.segment": "New Product",
"common.noOptions": "No options found.",
"common.none": "None",
"common.operations": "Operations",
@@ -372,4 +372,4 @@
"transactions.subtitle": "View, edit, and manage the transactions of a specific ledger.",
"transactions.tab.create": "New Transaction",
"transactions.title": "Transactions"
-}
\ No newline at end of file
+}
diff --git a/locales/extracted/en.json b/locales/extracted/en.json
index 20820330..551a0938 100644
--- a/locales/extracted/en.json
+++ b/locales/extracted/en.json
@@ -47,7 +47,7 @@
"common.new.account": "New Account",
"common.new.asset": "New Asset",
"common.new.portfolio": "New Portfolio",
- "common.new.product": "New Product",
+ "common.new.segment": "New Segment",
"common.noOptions": "No options found.",
"common.none": "None",
"common.operations": "Operations",
@@ -102,7 +102,7 @@
"entity.portfolio.description": "Enter the unique identifier for the entity associated with this portfolio",
"entity.portfolio.entityId": "Entity Id",
"entity.portfolio.name": "Portfolio Name",
- "entity.product.name": "Product Name",
+ "entity.segment.name": "Segment Name",
"entity.transaction.asset": "Asset",
"entity.transaction.value": "Value",
"entity.transactions.data": "Data",
@@ -115,7 +115,7 @@
"error.midaz.assetNameOrCodeDuplicate": "Error Midaz asset name or code duplicate",
"error.midaz.codeUpperCaseRequirement": "Error Midaz code upper case requirement",
"error.midaz.currencyCodeStandardCompliance": "Error Midaz currency code standard compliance",
- "error.midaz.duplicateProductNameError": "Error Midaz duplicate product name error",
+ "error.midaz.duplicateSegmentNameError": "Error Midaz duplicate segment name error",
"error.midaz.entityNotFound": "Error Midaz entity not found",
"error.midaz.invalidCodeFormat": "Error Midaz invalid code format",
"error.midaz.invalidCountryCode": "Error Midaz invalid country code",
@@ -185,8 +185,8 @@
"ledgers.account.field.name.tooltip": "Enter the name of the account",
"ledgers.account.field.portfolio": "Portfolio",
"ledgers.account.field.portfolio.tooltip": "Portfolio that will receive this account",
- "ledgers.account.field.product": "Product",
- "ledgers.account.field.product.tooltip": "Category (cluster) of clients with specific characteristics",
+ "ledgers.account.field.segment": "Segment",
+ "ledgers.account.field.segment.tooltip": "Category (cluster) of clients with specific characteristics",
"ledgers.account.field.type.tooltip": "The type of account",
"ledgers.account.sheet.create.description": "Fill in the details of the Account you want to create.",
"ledgers.account.sheet.create.title": "New Account",
@@ -228,7 +228,7 @@
"ledgers.portfolio.deleteDialog.description": "You will delete a portfolio",
"ledgers.portfolio.deleteDialog.title": "Are you sure?",
"ledgers.portfolio.sheet.description": "Fill in the details of the Portfolio you want to create.",
- "ledgers.portfolio.sheet.edit.description": "View and edit product fields.",
+ "ledgers.portfolio.sheet.edit.description": "View and edit segment fields.",
"ledgers.portfolio.sheet.edit.title": "Edit {portfolioName}",
"ledgers.portfolio.sheet.tabs.details": "Portfolio Details",
"ledgers.portfolio.sheet.title": "New Portfolio",
@@ -237,16 +237,16 @@
"ledgers.portfolio.tooltip": "Create portfolios and link accounts to manage more efficiently.",
"ledgers.portfolios.emptyResource": "You haven't created any Portfolios yet",
"ledgers.portfolios.showing": "{number, plural, =0 {No portfolios found} one {Showing {count} portfolio} other {Showing {count} portfolios}}.",
- "ledgers.products.emptyResource": "You haven't created any Products yet",
- "ledgers.products.sheet.description": "Fill in the details of the Product you want to create.",
- "ledgers.products.sheet.edit.description": "View and edit product fields.",
- "ledgers.products.sheet.edit.title": "Edit \"{productName}\"",
- "ledgers.products.sheet.tabs.details": "Product Details",
- "ledgers.products.sheet.title": "New Product",
- "ledgers.products.showing": "{number, plural, =0 {No products found} one {Showing {count} product} other {Showing {count} products}}.",
- "ledgers.products.subtitle": "Manage the products of this ledger.",
- "ledgers.products.title": "Products",
- "ledgers.products.tooltip": "Clustering or allocation of customers at different levels.",
+ "ledgers.segments.emptyResource": "You haven't created any Segments yet",
+ "ledgers.segments.sheet.description": "Fill in the details of the Segment you want to create.",
+ "ledgers.segments.sheet.edit.description": "View and edit segment fields.",
+ "ledgers.segments.sheet.edit.title": "Edit \"{segmentName}\"",
+ "ledgers.segments.sheet.tabs.details": "Segment Details",
+ "ledgers.segments.sheet.title": "New Segment",
+ "ledgers.segments.showing": "{number, plural, =0 {No segments found} one {Showing {count} segment} other {Showing {count} segments}}.",
+ "ledgers.segments.subtitle": "Manage the segments of this ledger.",
+ "ledgers.segments.title": "Segments",
+ "ledgers.segments.tooltip": "Clustering or allocation of customers at different levels.",
"ledgers.sheet.tabs.details": "Ledger Details",
"ledgers.sheetCreate.description": "Fill in the data of the Ledger you wish to create.",
"ledgers.sheetCreate.title": "New Ledger",
@@ -256,7 +256,7 @@
"ledgers.tab.assets": "Assets",
"ledgers.tab.overview": "Overview",
"ledgers.tab.portfolios": "Portfolios",
- "ledgers.tab.products": "Products",
+ "ledgers.tab.segments": "Segments",
"ledgers.title": "Ledgers",
"ledgers.toast.accountCreated": "{accountName} account successfully created",
"ledgers.toast.accountDeleted": "{accountName} account successfully deleted",
@@ -299,12 +299,12 @@
"organizations.title": "Settings",
"organizations.toast.create.success": "Organization created!",
"organizations.toast.update.success": "Organization updated successfully!",
- "products.delete.description": "You are about to permanently delete this product. This action cannot be undone. Do you wish to continue?",
+ "segments.delete.description": "You are about to permanently delete this segment. This action cannot be undone. Do you wish to continue?",
"settings.system.language": "Language",
"settings.system.locale.description": "Select the language you would like to use on Midaz.",
"settings.system.paper.description": "Adjust system preferences.",
"settings.tab.portfolios": "Portfolios",
- "settings.tab.products": "Products",
+ "settings.tab.segments": "Segments",
"settings.tabs.organizations": "Organizations",
"settings.tabs.system": "System",
"settings.title": "Settings",
@@ -316,7 +316,7 @@
"settingsDropdown.system": "System",
"sideBar.accountHolders.accounts": "Accounts",
"sideBar.accountHolders.portfolios": "Portfolios",
- "sideBar.accountHolders.products": "Products",
+ "sideBar.accountHolders.segments": "Segments",
"sideBar.accountHolders.title": "AccountHolders",
"sideBar.home": "Home",
"sideBar.ledgers": "Ledgers",
diff --git a/locales/extracted/pt.json b/locales/extracted/pt.json
index 333676e9..7bc668fa 100644
--- a/locales/extracted/pt.json
+++ b/locales/extracted/pt.json
@@ -50,7 +50,6 @@
"settingsDialog.title": "Configurações",
"sideBar.accountHolders.accounts": "Contas",
"sideBar.accountHolders.portfolios": "Portfólios",
- "sideBar.accountHolders.products": "Produtos",
"sideBar.accountHolders.title": "AccountHolders",
"sideBar.home": "Home",
"sideBar.ledgers": "Ledgers",
@@ -79,7 +78,6 @@
"error.midaz.invalidType": "O 'tipo' fornecido não é válido. Os tipos aceitos são moeda, criptografia, commodities ou outros. Forneça um tipo válido.",
"error.midaz.assetNameOrCodeDuplicate": "Já existe um ativo com o mesmo nome ou código em seu razão. Modifique o nome ou código do seu novo ativo.",
"error.midaz.invalidScriptError": "O script fornecido na sua solicitação é inválido ou está em um formato incompatível. Verifique o formato do script e tente novamente.",
- "error.midaz.duplicateProductNameError": "Já existe um produto com o nome para este ID contábil. Tente novamente com um razão ou nome diferente.",
"error.midaz.unauthorized": "O token fornecido está expirado, inválido ou malformado. Forneça um token válido e tente novamente.",
"error.midaz.accountIneligibilityError": "Uma ou mais contas listadas na transação não são elegíveis para participar. Revise o status da conta e tente novamente.",
"error.midaz.insufficientFundsError": "A transação não pôde ser concluída devido a fundos insuficientes na conta. Adicione fundos suficientes à sua conta e tente novamente.",
@@ -103,7 +101,6 @@
"common.name": "Nome",
"common.requiredFields": "(*) campos obrigatórios.",
"common.table.metadata": "{number, plural, =0 {-} one {# registro} other {# registros}}",
- "entity.product.name": "Nome do Produto",
"errors.custom.date.invalid": "Data inválida",
"errors.custom.one_lowercase_letter": "Campo deve conter pelo menos 1 letra minúscula",
"errors.custom.one_number": "Campo deve conter pelo menos 1 número",
@@ -123,20 +120,10 @@
"errors.too_small.string.exact": "Campo deve conter exatamente {minimum} {minimum, plural, =0 {caracteres} one {caractere} other {caracteres}}",
"errors.too_small.string.inclusive": "Campo deve conter no mínimo {minimum} {minimum, plural, =0 {caracteres} one {caractere} other {caracteres}}",
"errors.too_small.string.not_inclusive": "Campo deve conter mais de {minimum} {minimum, plural, =0 {caracteres} one {caractere} other {caracteres}}",
- "ledgers.products.sheet.description": "Preencha os dados do Produto que você deseja criar.",
- "ledgers.products.sheet.title": "Novo Produto",
- "ledgers.products.subtitle": "Gerencie os produtos deste ledger.",
- "ledgers.products.title": "Produtos",
- "ledgers.tab.products": "Produtos",
- "settings.tab.products": "Produtos",
- "ledgers.products.emptyResource": "Você ainda não criou um Produto.",
- "ledgers.products.sheet.edit.description": "Visualize e edite os campos do produto.",
- "ledgers.products.sheet.edit.title": "Editar \"{productName}\"",
"common.confirmDeletion": "Confirmar Exclusão",
"common.remove": "Remover",
"common.send": "Enviar",
"organizations.delete.description": "Você está prestes a excluir permanentemente esta organização. Essa ação não pode ser desfeita. Deseja continuar?",
- "products.delete.description": "Você está prestes a excluir permanentemente este produto. Essa ação não pode ser desfeita. Deseja continuar?",
"entity.address": "Endereço",
"entity.address.city": "Cidade",
"entity.address.complement": "Complemento",
@@ -207,8 +194,6 @@
"ledgers.account.field.name.tooltip": "Insira o nome da conta",
"ledgers.account.field.portfolio": "Portfólio",
"ledgers.account.field.portfolio.tooltip": "Portfólio que vai receber essa conta",
- "ledgers.account.field.product": "Produto",
- "ledgers.account.field.product.tooltip": "Categoria (cluster) de clientes com características específicas",
"ledgers.account.sheet.create.description": "Preencha os detalhes da Conta que deseja criar.",
"ledgers.account.sheet.create.title": "Nova Conta",
"ledgers.account.sheet.edit.description": "Visualizar e editar campos da conta.",
@@ -270,7 +255,6 @@
"ledgers.account.sheet.tabs.details": "Detalhes da Conta",
"ledgers.assets.sheet.tabs.details": "Detalhes do Ativo",
"ledgers.portfolio.sheet.tabs.details": "Detalhes do Portfólio",
- "ledgers.products.sheet.tabs.details": "Detalhes do Produto",
"ledgers.sheet.tabs.details": "Detalhes do Ledger",
"common.records": "registros",
"ledgers.tab.accounts": "Contas",
@@ -278,7 +262,6 @@
"settings.tab.portfolios": "Portfólios",
"notFound.backToHome": "Voltar para Home",
"ledgers.assets.showing": "{number, plural, =0 {Nenhum ativo encontrado} one {Mostrando {count} ativo} other {Mostrando {count} ativos}}.",
- "ledgers.products.showing": "{number, plural, =0 {Nenhum produto encontrado} one {Mostrando {count} produto} other {Mostrando {count} produtos}}.",
"ledgers.showing": "Mostrando {count} {number, plural, =0 {ledgers} one {ledger} other {ledgers}}.",
"ledgers.accounts.showing": "{number, plural, =0 {Nenhum conta encontrado} one {Mostrando {count} conta} other {Mostrando {count} contas}}.",
"ledgers.portfolios.showing": "{number, plural, =0 {Nenhum portfólio encontrado} one {Mostrando {count} portfólio} other {Mostrando {count} portfólios}}.",
@@ -340,8 +323,6 @@
"settings.tabs.system": "Sistema",
"notAuthorized.backToHome": "Voltar para Home",
"notAuthorized.title": "Você não tem autorização para acessar esta página.",
- "common.new.product": "Novo Produto",
- "ledgers.products.tooltip": "Clusterização ou alocação de clientes em diferentes níveis.",
"common.new.asset": "Novo Ativo",
"ledgers.assets.tooltip": "Moedas ou ativos de quaisquer naturezas transacionados neste Ledger.",
"common.new.portfolio": "Novo Portfólio",
@@ -386,5 +367,24 @@
"transactions.tab.operations": "Operações e Metadados",
"transactions.tab.summary": "Resumo",
"transactions.toast.update.success": "Transação atualizada com sucesso",
+ "common.new.segment": "Novo Segmento",
+ "entity.segment.name": "Nome do Segmento",
+ "error.midaz.duplicateSegmentNameError": "Já existe um segmento com o nome para este ID contábil. Tente novamente com um razão ou nome diferente.",
+ "ledgers.account.field.segment": "Segmento",
+ "ledgers.account.field.segment.tooltip": "Categoria (cluster) de clientes com características específicas",
+ "ledgers.segments.emptyResource": "Você ainda não criou um Segmento.",
+ "ledgers.segments.sheet.description": "Preencha os dados do Segmento que você deseja criar.",
+ "ledgers.segments.sheet.edit.description": "Visualize e edite os campos do segmento.",
+ "ledgers.segments.sheet.edit.title": "Editar \"{segmentName}\"",
+ "ledgers.segments.sheet.tabs.details": "Detalhes do Segmento",
+ "ledgers.segments.sheet.title": "Novo Segmento",
+ "ledgers.segments.showing": "{number, plural, =0 {Nenhum segmento encontrado} one {Mostrando {count} segmento} other {Mostrando {count} segmentos}}.",
+ "ledgers.segments.subtitle": "Gerencie os segmentos deste ledger.",
+ "ledgers.segments.title": "Segmentos",
+ "ledgers.segments.tooltip": "Clusterização ou alocação de clientes em diferentes níveis.",
+ "ledgers.tab.segments": "Segmentos",
+ "segments.delete.description": "Você está prestes a excluir permanentemente este segmento. Essa ação não pode ser desfeita. Deseja continuar?",
+ "settings.tab.segments": "Segmentos",
+ "sideBar.accountHolders.segments": "Segmentos",
"common.user": "Usuário"
}
diff --git a/src/app/(routes)/ledgers/[id]/accounts/accounts-sheet.tsx b/src/app/(routes)/ledgers/[id]/accounts/accounts-sheet.tsx
index f93e9f2e..cc1d182c 100644
--- a/src/app/(routes)/ledgers/[id]/accounts/accounts-sheet.tsx
+++ b/src/app/(routes)/ledgers/[id]/accounts/accounts-sheet.tsx
@@ -17,7 +17,7 @@ import { DialogProps } from '@radix-ui/react-dialog'
import { LoadingButton } from '@/components/ui/loading-button'
import { useOrganization } from '@/context/organization-provider/organization-provider-client'
import { MetadataField } from '@/components/form/metadata-field'
-import { useListProducts } from '@/client/products'
+import { useListSegments } from '@/client/segments'
import { useCreateAccount, useUpdateAccount } from '@/client/accounts'
import { useListPortfolios } from '@/client/portfolios'
import { isNil, omitBy } from 'lodash'
@@ -46,7 +46,7 @@ const initialValues = {
name: '',
entityId: '',
portfolioId: '',
- productId: '',
+ segmentId: '',
assetCode: '',
alias: '',
type: '',
@@ -70,7 +70,7 @@ export const AccountSheet = ({
const { id: ledgerId } = useParams<{ id: string }>()
const { currentOrganization } = useOrganization()
- const { data: rawProductListData } = useListProducts({
+ const { data: rawSegmentListData } = useListSegments({
organizationId: currentOrganization.id!,
ledgerId
})
@@ -89,14 +89,14 @@ export const AccountSheet = ({
)
}, [rawPortfolioData])
- const productListData = useMemo(() => {
+ const segmentListData = useMemo(() => {
return (
- rawProductListData?.items?.map((product) => ({
- value: product.id,
- label: product.name
+ rawSegmentListData?.items?.map((segment) => ({
+ value: segment.id,
+ label: segment.name
})) || []
)
- }, [rawProductListData])
+ }, [rawSegmentListData])
const { data: rawAssetListData } = useListAssets({
organizationId: currentOrganization.id!,
@@ -412,21 +412,21 @@ export const AccountSheet = ({
- {productListData?.map((product) => (
-
- {product.label}
+ {segmentListData?.map((segment) => (
+
+ {segment.label}
))}
diff --git a/src/app/(routes)/ledgers/[id]/accounts/accounts-tab-content.tsx b/src/app/(routes)/ledgers/[id]/accounts/accounts-tab-content.tsx
index 696790d0..6cca9d5c 100644
--- a/src/app/(routes)/ledgers/[id]/accounts/accounts-tab-content.tsx
+++ b/src/app/(routes)/ledgers/[id]/accounts/accounts-tab-content.tsx
@@ -57,7 +57,7 @@ export const AccountsTabContent = () => {
...account,
assetCode: account.assetCode,
parentAccountId: account.parentAccountId,
- productId: account.productId,
+ segmentId: account.segmentId,
metadata: account.metadata,
portfolioId: account.portfolio?.id,
portfolioName: account.portfolio?.name
diff --git a/src/app/(routes)/ledgers/[id]/ledger-details-view.tsx b/src/app/(routes)/ledgers/[id]/ledger-details-view.tsx
index 6bd80606..98889d80 100644
--- a/src/app/(routes)/ledgers/[id]/ledger-details-view.tsx
+++ b/src/app/(routes)/ledgers/[id]/ledger-details-view.tsx
@@ -6,7 +6,6 @@ import React from 'react'
import { cn } from '@/lib/utils'
import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs'
import { useIntl } from 'react-intl'
-import { ProductsTabContent } from './products/products-tab-content'
import { useTabs } from '@/hooks/use-tabs'
import { getBreadcrumbPaths } from '@/components/breadcrumb/get-breadcrumb-paths'
import { ILedgerType } from '@/types/ledgers-type'
@@ -15,11 +14,12 @@ import { OverviewTabContent } from './overview/overview-tab-content'
import { AssetsTabContent } from './assets/assets-tab-content'
import { PortfoliosTabContent } from './portfolios/portfolios-tab-content'
import { AccountsTabContent } from './accounts/accounts-tab-content'
+import { SegmentsTabContent } from './segments/segments-tab-content'
const TAB_VALUES = {
OVERVIEW: 'overview',
ASSETS: 'assets',
- PRODUCTS: 'products',
+ SEGMENTS: 'segments',
PORTFOLIOS: 'portfolios',
ACCOUNTS: 'accounts'
}
@@ -61,10 +61,10 @@ const LedgerDetailsView = ({ data }: LedgerDetailsViewProps) => {
},
{
name: intl.formatMessage({
- id: `settings.tab.products`,
- defaultMessage: 'Products'
+ id: `settings.tab.segments`,
+ defaultMessage: 'Segments'
}),
- active: () => activeTab === TAB_VALUES.PRODUCTS
+ active: () => activeTab === TAB_VALUES.SEGMENTS
},
{
name: intl.formatMessage({
@@ -121,10 +121,10 @@ const LedgerDetailsView = ({ data }: LedgerDetailsViewProps) => {
})}
-
+
{intl.formatMessage({
- id: 'ledgers.tab.products',
- defaultMessage: 'Products'
+ id: 'ledgers.tab.segments',
+ defaultMessage: 'Segments'
})}
@@ -151,8 +151,8 @@ const LedgerDetailsView = ({ data }: LedgerDetailsViewProps) => {
-
-
+
+
diff --git a/src/app/(routes)/ledgers/[id]/portfolios/portfolios-sheet.tsx b/src/app/(routes)/ledgers/[id]/portfolios/portfolios-sheet.tsx
index 24a93206..b0783c9c 100644
--- a/src/app/(routes)/ledgers/[id]/portfolios/portfolios-sheet.tsx
+++ b/src/app/(routes)/ledgers/[id]/portfolios/portfolios-sheet.tsx
@@ -147,7 +147,7 @@ export const PortfolioSheet = ({
{intl.formatMessage({
id: 'ledgers.portfolio.sheet.edit.description',
- defaultMessage: 'View and edit product fields.'
+ defaultMessage: 'View and edit segment fields.'
})}
diff --git a/src/app/(routes)/ledgers/[id]/products/products-sheet.tsx b/src/app/(routes)/ledgers/[id]/segments/segments-sheet.tsx
similarity index 77%
rename from src/app/(routes)/ledgers/[id]/products/products-sheet.tsx
rename to src/app/(routes)/ledgers/[id]/segments/segments-sheet.tsx
index 5f70efb2..3d68bac8 100644
--- a/src/app/(routes)/ledgers/[id]/products/products-sheet.tsx
+++ b/src/app/(routes)/ledgers/[id]/segments/segments-sheet.tsx
@@ -1,4 +1,3 @@
-import { useCreateProduct, useUpdateProduct } from '@/client/products'
import { InputField } from '@/components/form'
import { MetadataField } from '@/components/form/metadata-field'
import { Form } from '@/components/ui/form'
@@ -11,8 +10,7 @@ import {
SheetTitle
} from '@/components/ui/sheet'
import { useOrganization } from '@/context/organization-provider/organization-provider-client'
-import { ProductResponseDto } from '@/core/application/dto/product-dto'
-import { product } from '@/schema/product'
+import { segment } from '@/schema/segment'
import { zodResolver } from '@hookform/resolvers/zod'
import { DialogProps } from '@radix-ui/react-dialog'
import React from 'react'
@@ -22,11 +20,13 @@ import { z } from 'zod'
import { isNil } from 'lodash'
import { LoadingButton } from '@/components/ui/loading-button'
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
+import { useCreateSegment, useUpdateSegment } from '@/client/segments'
+import { SegmentResponseDto } from '@/core/application/dto/segment-dto'
-export type ProductsSheetProps = DialogProps & {
+export type SegmentsSheetProps = DialogProps & {
ledgerId: string
mode: 'create' | 'edit'
- data?: ProductResponseDto | null
+ data?: SegmentResponseDto | null
onSucess?: () => void
}
@@ -36,23 +36,23 @@ const defaultValues = {
}
const FormSchema = z.object({
- name: product.name,
- metadata: product.metadata
+ name: segment.name,
+ metadata: segment.metadata
})
type FormData = z.infer
-export const ProductsSheet = ({
+export const SegmentsSheet = ({
ledgerId,
mode,
data,
onSucess,
onOpenChange,
...others
-}: ProductsSheetProps) => {
+}: SegmentsSheetProps) => {
const intl = useIntl()
const { currentOrganization } = useOrganization()
- const { mutate: createProduct, isPending: createPending } = useCreateProduct({
+ const { mutate: createSegment, isPending: createPending } = useCreateSegment({
organizationId: currentOrganization.id!,
ledgerId,
onSuccess: () => {
@@ -60,10 +60,10 @@ export const ProductsSheet = ({
onOpenChange?.(false)
}
})
- const { mutate: updateProduct, isPending: updatePending } = useUpdateProduct({
+ const { mutate: updateSegment, isPending: updatePending } = useUpdateSegment({
organizationId: currentOrganization!.id!,
ledgerId,
- productId: data?.id!,
+ segmentId: data?.id!,
onSuccess: () => {
onSucess?.()
onOpenChange?.(false)
@@ -72,14 +72,14 @@ export const ProductsSheet = ({
const form = useForm({
resolver: zodResolver(FormSchema),
- defaultValues: Object.assign({}, defaultValues, product)
+ defaultValues: Object.assign({}, defaultValues, segment)
})
const handleSubmit = (data: FormData) => {
if (mode === 'create') {
- createProduct(data)
+ createSegment(data)
} else if (mode === 'edit') {
- updateProduct(data)
+ updateSegment(data)
}
form.reset(defaultValues)
@@ -106,15 +106,15 @@ export const ProductsSheet = ({
{intl.formatMessage({
- id: 'ledgers.products.sheet.title',
- defaultMessage: 'New Product'
+ id: 'ledgers.segments.sheet.title',
+ defaultMessage: 'New Segment'
})}
{intl.formatMessage({
- id: 'ledgers.products.sheet.description',
+ id: 'ledgers.segments.sheet.description',
defaultMessage:
- 'Fill in the details of the Product you want to create.'
+ 'Fill in the details of the Segment you want to create.'
})}
@@ -125,18 +125,18 @@ export const ProductsSheet = ({
{intl.formatMessage(
{
- id: 'ledgers.products.sheet.edit.title',
- defaultMessage: 'Edit "{productName}"'
+ id: 'ledgers.segments.sheet.edit.title',
+ defaultMessage: 'Edit "{segmentName}"'
},
{
- productName: data?.name
+ segmentName: data?.name
}
)}
{intl.formatMessage({
- id: 'ledgers.products.sheet.edit.description',
- defaultMessage: 'View and edit product fields.'
+ id: 'ledgers.segments.sheet.edit.description',
+ defaultMessage: 'View and edit segment fields.'
})}
@@ -151,8 +151,8 @@ export const ProductsSheet = ({
{intl.formatMessage({
- id: 'ledgers.products.sheet.tabs.details',
- defaultMessage: 'Product Details'
+ id: 'ledgers.segments.sheet.tabs.details',
+ defaultMessage: 'Segment Details'
})}
@@ -167,8 +167,8 @@ export const ProductsSheet = ({
{
+export const SegmentsTabContent = () => {
const intl = useIntl()
const { currentOrganization } = useOrganization()
const { id: ledgerId } = useParams<{ id: string }>()
@@ -58,7 +58,7 @@ export const ProductsTabContent = () => {
data,
refetch,
isPending: listLoading
- } = useListProducts({
+ } = useListSegments({
organizationId: currentOrganization.id!,
ledgerId,
...(searchValues as any)
@@ -68,7 +68,7 @@ export const ProductsTabContent = () => {
setTotal(data?.items.length || 0)
}, [data?.items.length])
- const { mutate: deleteMutate, isPending: deletePending } = useDeleteProduct({
+ const { mutate: deleteMutate, isPending: deletePending } = useDeleteSegment({
organizationId: currentOrganization.id!,
ledgerId,
onSuccess: () => {
@@ -84,7 +84,7 @@ export const ProductsTabContent = () => {
)
const { handleCreate, handleEdit, sheetProps } =
- useCreateUpdateSheet()
+ useCreateUpdateSheet()
const table = useReactTable({
data: data?.items!,
@@ -109,29 +109,29 @@ export const ProductsTabContent = () => {
defaultMessage: 'Confirm Deletion'
})}
description={intl.formatMessage({
- id: 'products.delete.description',
+ id: 'segments.delete.description',
defaultMessage:
- 'You are about to permanently delete this product. This action cannot be undone. Do you wish to continue?'
+ 'You are about to permanently delete this segment. This action cannot be undone. Do you wish to continue?'
})}
loading={deletePending}
{...dialogProps}
/>
-
+
{
@@ -160,14 +160,14 @@ export const ProductsTabContent = () => {
(data?.items.length === 0 && (
@@ -205,11 +205,11 @@ export const ProductsTabContent = () => {
- {table.getRowModel().rows.map((product) => (
-
-
- {product.original.name}
-
+ {table.getRowModel().rows.map((segment) => (
+
+
+ {segment.original.name}
+
@@ -222,7 +222,7 @@ export const ProductsTabContent = () => {
handleEdit(product.original)}
+ onClick={() => handleEdit(segment.original)}
>
{intl.formatMessage({
id: `common.edit`,
@@ -232,7 +232,7 @@ export const ProductsTabContent = () => {
- handleDialogOpen(product.original.id)
+ handleDialogOpen(segment.original.id)
}
>
{intl.formatMessage({
@@ -254,9 +254,9 @@ export const ProductsTabContent = () => {
{intl.formatMessage(
{
- id: 'ledgers.products.showing',
+ id: 'ledgers.segments.showing',
defaultMessage:
- '{number, plural, =0 {No products found} one {Showing {count} product} other {Showing {count} products}}.'
+ '{number, plural, =0 {No segments found} one {Showing {count} segment} other {Showing {count} segments}}.'
},
{
number: data?.items?.length || 0,
diff --git a/src/app/api/organizations/[id]/ledgers/[ledgerId]/products/[productId]/route.ts b/src/app/api/organizations/[id]/ledgers/[ledgerId]/segments/[segmentId]/route.ts
similarity index 55%
rename from src/app/api/organizations/[id]/ledgers/[ledgerId]/products/[productId]/route.ts
rename to src/app/api/organizations/[id]/ledgers/[ledgerId]/segments/[segmentId]/route.ts
index 52e39ce0..73645a08 100644
--- a/src/app/api/organizations/[id]/ledgers/[ledgerId]/products/[productId]/route.ts
+++ b/src/app/api/organizations/[id]/ledgers/[ledgerId]/segments/[segmentId]/route.ts
@@ -1,34 +1,34 @@
import { container } from '@/core/infrastructure/container-registry/container-registry'
import { apiErrorHandler } from '@/app/api/utils/api-error-handler'
import {
- DeleteProduct,
- DeleteProductUseCase
-} from '@/core/application/use-cases/product/delete-product-use-case'
+ DeleteSegment,
+ DeleteSegmentUseCase
+} from '@/core/application/use-cases/segment/delete-segment-use-case'
import {
- FetchProductById,
- FetchProductByIdUseCase
-} from '@/core/application/use-cases/product/fetch-product-by-id-use-case'
+ FetchSegmentById,
+ FetchSegmentByIdUseCase
+} from '@/core/application/use-cases/segment/fetch-segment-by-id-use-case'
import {
- UpdateProduct,
- UpdateProductUseCase
-} from '@/core/application/use-cases/product/update-product-use-case'
+ UpdateSegment,
+ UpdateSegmentUseCase
+} from '@/core/application/use-cases/segment/update-segment-use-case'
import { NextResponse } from 'next/server'
import { applyMiddleware } from '@/lib/applymiddleware/apply-middleware'
import { loggerMiddleware } from '@/utils/logger-middleware-config'
-const fetchProductById: FetchProductById = container.get(
- FetchProductByIdUseCase
+const fetchSegmentById: FetchSegmentById = container.get(
+ FetchSegmentByIdUseCase
)
-const deleteProductUseCase: DeleteProduct =
- container.get(DeleteProductUseCase)
+const deleteSegmentUseCase: DeleteSegment =
+ container.get(DeleteSegmentUseCase)
-const updateProductUseCase: UpdateProduct =
- container.get(UpdateProductUseCase)
+const updateSegmentUseCase: UpdateSegment =
+ container.get(UpdateSegmentUseCase)
export async function GET(
request: Request,
- { params }: { params: { id: string; ledgerId: string; productId: string } }
+ { params }: { params: { id: string; ledgerId: string; segmentId: string } }
) {
try {
const { searchParams } = new URL(request.url)
@@ -36,15 +36,15 @@ export async function GET(
const page = Number(searchParams.get('page')) || 1
const organizationId = params.id
const ledgerId = params.ledgerId
- const productId = params.productId
+ const segmentId = params.segmentId
- const products = await fetchProductById.execute(
+ const segments = await fetchSegmentById.execute(
organizationId,
ledgerId,
- productId
+ segmentId
)
- return NextResponse.json(products)
+ return NextResponse.json(segments)
} catch (error: any) {
const { message, status } = await apiErrorHandler(error)
@@ -52,24 +52,24 @@ export async function GET(
}
}
-interface ProductParams {
+interface SegmentParams {
id: string
ledgerId: string
- productId: string
+ segmentId: string
}
export const DELETE = applyMiddleware(
[
loggerMiddleware({
- operationName: 'deleteProduct',
+ operationName: 'deleteSegment',
method: 'DELETE'
})
],
- async (request: Request, { params }: { params: ProductParams }) => {
+ async (request: Request, { params }: { params: SegmentParams }) => {
try {
- const { id: organizationId, ledgerId, productId } = params
+ const { id: organizationId, ledgerId, segmentId } = params
- await deleteProductUseCase.execute(organizationId, ledgerId, productId)
+ await deleteSegmentUseCase.execute(organizationId, ledgerId, segmentId)
return NextResponse.json({}, { status: 200 })
} catch (error: any) {
@@ -82,22 +82,22 @@ export const DELETE = applyMiddleware(
export async function PATCH(
request: Request,
- { params }: { params: { id: string; ledgerId: string; productId: string } }
+ { params }: { params: { id: string; ledgerId: string; segmentId: string } }
) {
try {
const body = await request.json()
const organizationId = params.id
const ledgerId = params.ledgerId
- const productId = params.productId
+ const segmentId = params.segmentId
- const productUpdated = await updateProductUseCase.execute(
+ const segmentUpdated = await updateSegmentUseCase.execute(
organizationId,
ledgerId,
- productId,
+ segmentId,
body
)
- return NextResponse.json(productUpdated)
+ return NextResponse.json(segmentUpdated)
} catch (error: any) {
const { message, status } = await apiErrorHandler(error)
diff --git a/src/app/api/organizations/[id]/ledgers/[ledgerId]/products/route.ts b/src/app/api/organizations/[id]/ledgers/[ledgerId]/segments/route.ts
similarity index 62%
rename from src/app/api/organizations/[id]/ledgers/[ledgerId]/products/route.ts
rename to src/app/api/organizations/[id]/ledgers/[ledgerId]/segments/route.ts
index 72693a54..3bb1e825 100644
--- a/src/app/api/organizations/[id]/ledgers/[ledgerId]/products/route.ts
+++ b/src/app/api/organizations/[id]/ledgers/[ledgerId]/segments/route.ts
@@ -1,18 +1,18 @@
import { container } from '@/core/infrastructure/container-registry/container-registry'
import { apiErrorHandler } from '@/app/api/utils/api-error-handler'
import {
- CreateProduct,
- CreateProductUseCase
-} from '@/core/application/use-cases/product/create-product-use-case'
+ CreateSegment,
+ CreateSegmentUseCase
+} from '@/core/application/use-cases/segment/create-segment-use-case'
import {
- FetchAllProducts,
- FetchAllProductsUseCase
-} from '@/core/application/use-cases/product/fetch-all-products-use-case'
+ FetchAllSegments,
+ FetchAllSegmentsUseCase
+} from '@/core/application/use-cases/segment/fetch-all-segments-use-case'
import { NextRequest, NextResponse } from 'next/server'
import { applyMiddleware } from '@/lib/applymiddleware/apply-middleware'
import { loggerMiddleware } from '@/utils/logger-middleware-config'
-interface ProductParams {
+interface SegmentParams {
id: string
ledgerId: string
}
@@ -20,26 +20,26 @@ interface ProductParams {
export const POST = applyMiddleware(
[
loggerMiddleware({
- operationName: 'createProduct',
+ operationName: 'createSegment',
method: 'POST'
})
],
- async (request: NextRequest, { params }: { params: ProductParams }) => {
+ async (request: NextRequest, { params }: { params: SegmentParams }) => {
try {
- const createProductUseCase: CreateProduct =
- container.get(CreateProductUseCase)
+ const createSegmentUseCase: CreateSegment =
+ container.get(CreateSegmentUseCase)
const body = await request.json()
const organizationId = params.id
const ledgerId = params.ledgerId
- const productCreated = await createProductUseCase.execute(
+ const segmentCreated = await createSegmentUseCase.execute(
organizationId,
ledgerId,
body
)
- return NextResponse.json(productCreated)
+ return NextResponse.json(segmentCreated)
} catch (error: any) {
const { message, status } = await apiErrorHandler(error)
@@ -51,28 +51,28 @@ export const POST = applyMiddleware(
export const GET = applyMiddleware(
[
loggerMiddleware({
- operationName: 'fetchAllProducts',
+ operationName: 'fetchAllSegments',
method: 'GET'
})
],
- async (request: NextRequest, { params }: { params: ProductParams }) => {
+ async (request: NextRequest, { params }: { params: SegmentParams }) => {
try {
- const fetchAllProductsUseCase: FetchAllProducts =
- container.get(FetchAllProductsUseCase)
+ const fetchAllSegmentsUseCase: FetchAllSegments =
+ container.get(FetchAllSegmentsUseCase)
const { searchParams } = new URL(request.url)
const limit = Number(searchParams.get('limit')) || 10
const page = Number(searchParams.get('page')) || 1
const organizationId = params.id
const ledgerId = params.ledgerId
- const products = await fetchAllProductsUseCase.execute(
+ const segments = await fetchAllSegmentsUseCase.execute(
organizationId,
ledgerId,
limit,
page
)
- return NextResponse.json(products)
+ return NextResponse.json(segments)
} catch (error: any) {
const { message, status } = await apiErrorHandler(error)
diff --git a/src/client/products.ts b/src/client/segments.ts
similarity index 67%
rename from src/client/products.ts
rename to src/client/segments.ts
index cdfb2232..bf8f0c18 100644
--- a/src/client/products.ts
+++ b/src/client/segments.ts
@@ -1,5 +1,5 @@
import { PaginationDto } from '@/core/application/dto/pagination-dto'
-import { ProductResponseDto } from '@/core/application/dto/product-dto'
+import { SegmentResponseDto } from '@/core/application/dto/segment-dto'
import {
deleteFetcher,
getFetcher,
@@ -19,37 +19,37 @@ import {
* TODO: Find a way to avoid the
*/
-type UseCreateProductProps = UseMutationOptions & {
+type UseCreateSegmentProps = UseMutationOptions & {
organizationId: string
ledgerId: string
}
-export const useCreateProduct = ({
+export const useCreateSegment = ({
organizationId,
ledgerId,
...options
-}: UseCreateProductProps) => {
+}: UseCreateSegmentProps) => {
return useMutation({
mutationFn: postFetcher(
- `/api/organizations/${organizationId}/ledgers/${ledgerId}/products`
+ `/api/organizations/${organizationId}/ledgers/${ledgerId}/segments`
),
...options
})
}
-type UseListProductsProps = UseCreateProductProps & PaginationRequest
+type UseListSegmentsProps = UseCreateSegmentProps & PaginationRequest
-export const useListProducts = ({
+export const useListSegments = ({
organizationId,
ledgerId,
limit,
page,
...options
-}: UseListProductsProps) => {
- return useQuery>({
+}: UseListSegmentsProps) => {
+ return useQuery>({
queryKey: [organizationId, ledgerId, limit, page],
queryFn: getPaginatedFetcher(
- `/api/organizations/${organizationId}/ledgers/${ledgerId}/products`,
+ `/api/organizations/${organizationId}/ledgers/${ledgerId}/segments`,
{ limit, page }
),
placeholderData: keepPreviousData,
@@ -57,41 +57,41 @@ export const useListProducts = ({
})
}
-type UseUpdateProductProps = UseMutationOptions & {
+type UseUpdateSegmentProps = UseMutationOptions & {
organizationId: string
ledgerId: string
- productId: string
+ segmentId: string
}
-export const useUpdateProduct = ({
+export const useUpdateSegment = ({
organizationId,
ledgerId,
- productId,
+ segmentId,
...options
-}: UseUpdateProductProps) => {
+}: UseUpdateSegmentProps) => {
return useMutation({
- mutationKey: [organizationId, ledgerId, productId],
+ mutationKey: [organizationId, ledgerId, segmentId],
mutationFn: patchFetcher(
- `/api/organizations/${organizationId}/ledgers/${ledgerId}/products/${productId}`
+ `/api/organizations/${organizationId}/ledgers/${ledgerId}/segments/${segmentId}`
),
...options
})
}
-type UseDeleteProductProps = UseMutationOptions & {
+type UseDeleteSegmentProps = UseMutationOptions & {
organizationId: string
ledgerId: string
}
-export const useDeleteProduct = ({
+export const useDeleteSegment = ({
organizationId,
ledgerId,
...options
-}: UseDeleteProductProps) => {
+}: UseDeleteSegmentProps) => {
return useMutation({
mutationKey: [organizationId, ledgerId],
mutationFn: deleteFetcher(
- `/api/organizations/${organizationId}/ledgers/${ledgerId}/products`
+ `/api/organizations/${organizationId}/ledgers/${ledgerId}/segments`
),
...options
})
diff --git a/src/components/sidebar/index.tsx b/src/components/sidebar/index.tsx
index 2a5a6447..c14989cb 100644
--- a/src/components/sidebar/index.tsx
+++ b/src/components/sidebar/index.tsx
@@ -84,11 +84,11 @@ export const Sidebar = () => {
}
- href="/products"
+ href="/segments"
/>
AccountHolders
- } href="/products" />
+ } href="/segments" />
} href="/accounts" />
maxHeight) {
textAreaElement.style.height = `${maxHeight}px`
textAreaElement.style.overflowY = 'auto'
diff --git a/src/core/application/decorators/log-operation.ts b/src/core/application/decorators/log-operation.ts
index 0df667ad..7e212dc5 100644
--- a/src/core/application/decorators/log-operation.ts
+++ b/src/core/application/decorators/log-operation.ts
@@ -21,7 +21,7 @@ export function LogOperation(options: {
const originalMethod = descriptor.value
// If operation is not provided, use the class name as operation
- // Example: FetchAllProductsUseCase -> fetch_all_products
+ // Example: FetchAllSegmentsUseCase -> fetch_all_segments
if (!options.operation) {
options.operation = snakeCase(
target.constructor.name.replace('UseCase', '')
diff --git a/src/core/application/dto/account-dto.ts b/src/core/application/dto/account-dto.ts
index 604b3c03..116fd50a 100644
--- a/src/core/application/dto/account-dto.ts
+++ b/src/core/application/dto/account-dto.ts
@@ -8,7 +8,7 @@ export interface CreateAccountDto {
entityId?: string | null
parentAccountId?: string | null
portfolioId?: string | null
- productId?: string
+ segmentId?: string
allowSending?: boolean
allowReceiving?: boolean
status: {
@@ -29,7 +29,7 @@ export interface AccountResponseDto {
entityId: string
parentAccountId: string
portfolioId?: string | null
- productId: string
+ segmentId: string
status: StatusDto
allowSending?: boolean
allowReceiving?: boolean
@@ -46,7 +46,7 @@ export interface UpdateAccountDto {
type?: string
entityId?: string
parentAccountId?: string
- productId?: string
+ segmentId?: string
portfolioId?: string
allowSending?: boolean
allowReceiving?: boolean
diff --git a/src/core/application/dto/product-dto.ts b/src/core/application/dto/segment-dto.ts
similarity index 77%
rename from src/core/application/dto/product-dto.ts
rename to src/core/application/dto/segment-dto.ts
index 433fce25..f4f7b455 100644
--- a/src/core/application/dto/product-dto.ts
+++ b/src/core/application/dto/segment-dto.ts
@@ -1,12 +1,12 @@
import { StatusDto } from './status.dto'
-export interface CreateProductDto {
+export interface CreateSegmentDto {
name: string
status: StatusDto
metadata: Record
}
-export interface ProductResponseDto {
+export interface SegmentResponseDto {
id: string
ledgerId: string
organizationId: string
@@ -18,7 +18,7 @@ export interface ProductResponseDto {
deletedAt: Date | null
}
-export interface UpdateProductDto {
+export interface UpdateSegmentDto {
name?: string
status?: StatusDto
metadata?: Record
diff --git a/src/core/application/mappers/account-mapper.ts b/src/core/application/mappers/account-mapper.ts
index f99bffc3..93b5ea0f 100644
--- a/src/core/application/mappers/account-mapper.ts
+++ b/src/core/application/mappers/account-mapper.ts
@@ -27,7 +27,7 @@ export class AccountMapper {
alias: account.alias,
assetCode: account.assetCode,
parentAccountId: account.parentAccountId!,
- productId: account.productId!,
+ segmentId: account.segmentId!,
portfolioId: account.portfolioId,
allowSending: account.allowSending,
allowReceiving: account.allowReceiving
@@ -45,7 +45,7 @@ export class AccountMapper {
assetCode: dto.assetCode!,
status: dto.status!,
parentAccountId: dto.parentAccountId,
- productId: dto.productId,
+ segmentId: dto.segmentId,
portfolioId: dto.portfolioId,
allowSending: dto.allowSending,
allowReceiving: dto.allowReceiving,
diff --git a/src/core/application/mappers/ledger-mapper.ts b/src/core/application/mappers/ledger-mapper.ts
index c26746b0..1a44e5eb 100644
--- a/src/core/application/mappers/ledger-mapper.ts
+++ b/src/core/application/mappers/ledger-mapper.ts
@@ -1,13 +1,13 @@
import { LedgerEntity } from '@/core/domain/entities/ledger-entity'
import { CreateLedgerDto } from '../dto/create-ledger-dto'
import { LedgerResponseDto } from '../dto/ledger-response-dto'
-import { UpdateProductDto } from '../dto/product-dto'
+import { UpdateSegmentDto } from '../dto/segment-dto'
import { PaginationEntity } from '@/core/domain/entities/pagination-entity'
import { PaginationMapper } from './pagination-mapper'
export class LedgerMapper {
public static toDomain(
- dto: CreateLedgerDto | UpdateProductDto
+ dto: CreateLedgerDto | UpdateSegmentDto
): LedgerEntity {
return {
name: dto.name!,
diff --git a/src/core/application/mappers/product-mapper.ts b/src/core/application/mappers/product-mapper.ts
deleted file mode 100644
index e90ce2a6..00000000
--- a/src/core/application/mappers/product-mapper.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { ProductEntity } from '@/core/domain/entities/product-entity'
-import {
- CreateProductDto,
- ProductResponseDto,
- UpdateProductDto
-} from '../dto/product-dto'
-import { PaginationEntity } from '@/core/domain/entities/pagination-entity'
-import { PaginationMapper } from './pagination-mapper'
-
-export class ProductMapper {
- static toDomain(dto: CreateProductDto | UpdateProductDto): ProductEntity {
- return {
- name: dto.name!,
- status: dto.status!,
- metadata: dto.metadata!
- }
- }
-
- static toResponseDto(product: ProductEntity): ProductResponseDto {
- return {
- id: product.id!,
- organizationId: product.organizationId!,
- ledgerId: product.ledgerId!,
- name: product.name,
- status: {
- code: product.status.code,
- description: product.status.description ?? ''
- },
- metadata: product.metadata ?? {},
- createdAt: product.createdAt!,
- updatedAt: product.updatedAt!,
- deletedAt: product.deletedAt!
- }
- }
-
- static toPaginationResponseDto(
- result: PaginationEntity
- ): PaginationEntity {
- return PaginationMapper.toResponseDto(result, ProductMapper.toResponseDto)
- }
-}
diff --git a/src/core/application/mappers/segment-mapper.ts b/src/core/application/mappers/segment-mapper.ts
new file mode 100644
index 00000000..34e7b34f
--- /dev/null
+++ b/src/core/application/mappers/segment-mapper.ts
@@ -0,0 +1,41 @@
+import { SegmentEntity } from '@/core/domain/entities/segment-entity'
+import {
+ CreateSegmentDto,
+ SegmentResponseDto,
+ UpdateSegmentDto
+} from '../dto/segment-dto'
+import { PaginationEntity } from '@/core/domain/entities/pagination-entity'
+import { PaginationMapper } from './pagination-mapper'
+
+export class SegmentMapper {
+ static toDomain(dto: CreateSegmentDto | UpdateSegmentDto): SegmentEntity {
+ return {
+ name: dto.name!,
+ status: dto.status!,
+ metadata: dto.metadata!
+ }
+ }
+
+ static toResponseDto(segment: SegmentEntity): SegmentResponseDto {
+ return {
+ id: segment.id!,
+ organizationId: segment.organizationId!,
+ ledgerId: segment.ledgerId!,
+ name: segment.name,
+ status: {
+ code: segment.status.code,
+ description: segment.status.description ?? ''
+ },
+ metadata: segment.metadata ?? {},
+ createdAt: segment.createdAt!,
+ updatedAt: segment.updatedAt!,
+ deletedAt: segment.deletedAt!
+ }
+ }
+
+ static toPaginationResponseDto(
+ result: PaginationEntity
+ ): PaginationEntity {
+ return PaginationMapper.toResponseDto(result, SegmentMapper.toResponseDto)
+ }
+}
diff --git a/src/core/application/use-cases/product/create-product-use-case.ts b/src/core/application/use-cases/product/create-product-use-case.ts
deleted file mode 100644
index d84a283c..00000000
--- a/src/core/application/use-cases/product/create-product-use-case.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import { ProductEntity } from '@/core/domain/entities/product-entity'
-import type {
- CreateProductDto,
- ProductResponseDto
-} from '../../dto/product-dto'
-import { ProductMapper } from '../../mappers/product-mapper'
-import { CreateProductRepository } from '@/core/domain/repositories/products/create-product-repository'
-import { inject, injectable } from 'inversify'
-import { LogOperation } from '../../decorators/log-operation'
-
-export interface CreateProduct {
- execute: (
- organizationId: string,
- ledgerId: string,
- product: CreateProductDto
- ) => Promise
-}
-
-@injectable()
-export class CreateProductUseCase implements CreateProduct {
- constructor(
- @inject(CreateProductRepository)
- private readonly createProductRepository: CreateProductRepository
- ) {}
-
- @LogOperation({ layer: 'application' })
- async execute(
- organizationId: string,
- ledgerId: string,
- product: CreateProductDto
- ): Promise {
- const productEntity: ProductEntity = ProductMapper.toDomain(product)
-
- const productCreated = await this.createProductRepository.create(
- organizationId,
- ledgerId,
- productEntity
- )
-
- const productResponseDto: ProductResponseDto =
- ProductMapper.toResponseDto(productCreated)
-
- return productResponseDto
- }
-}
diff --git a/src/core/application/use-cases/product/fetch-all-products-use-case.ts b/src/core/application/use-cases/product/fetch-all-products-use-case.ts
deleted file mode 100644
index 09dd372e..00000000
--- a/src/core/application/use-cases/product/fetch-all-products-use-case.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { FetchAllProductsRepository } from '@/core/domain/repositories/products/fetch-all-products-repository'
-import { PaginationDto } from '../../dto/pagination-dto'
-import { ProductResponseDto } from '../../dto/product-dto'
-import { ProductMapper } from '../../mappers/product-mapper'
-import { inject, injectable } from 'inversify'
-import { LogOperation } from '../../decorators/log-operation'
-
-export interface FetchAllProducts {
- execute: (
- organizationId: string,
- ledgerId: string,
- limit: number,
- page: number
- ) => Promise>
-}
-
-@injectable()
-export class FetchAllProductsUseCase implements FetchAllProducts {
- constructor(
- @inject(FetchAllProductsRepository)
- private readonly fetchAllProductsRepository: FetchAllProductsRepository
- ) {}
-
- @LogOperation({ layer: 'application' })
- async execute(
- organizationId: string,
- ledgerId: string,
- limit: number,
- page: number
- ): Promise> {
- const productsResult = await this.fetchAllProductsRepository.fetchAll(
- organizationId,
- ledgerId,
- limit,
- page
- )
-
- return ProductMapper.toPaginationResponseDto(productsResult)
- }
-}
diff --git a/src/core/application/use-cases/product/fetch-product-by-id-use-case.ts b/src/core/application/use-cases/product/fetch-product-by-id-use-case.ts
deleted file mode 100644
index 1ea9bd74..00000000
--- a/src/core/application/use-cases/product/fetch-product-by-id-use-case.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { FetchProductByIdRepository } from '@/core/domain/repositories/products/fetch-product-by-id-repository'
-import { ProductResponseDto } from '../../dto/product-dto'
-import { ProductMapper } from '../../mappers/product-mapper'
-import { inject, injectable } from 'inversify'
-
-export interface FetchProductById {
- execute: (
- organizationId: string,
- ledgerId: string,
- productId: string
- ) => Promise
-}
-
-@injectable()
-export class FetchProductByIdUseCase implements FetchProductById {
- constructor(
- @inject(FetchProductByIdRepository)
- private readonly fetchProductByIdRepository: FetchProductByIdRepository
- ) {}
-
- async execute(
- organizationId: string,
- ledgerId: string,
- productId: string
- ): Promise {
- const product = await this.fetchProductByIdRepository.fetchById(
- organizationId,
- ledgerId,
- productId
- )
-
- return ProductMapper.toResponseDto(product)
- }
-}
diff --git a/src/core/application/use-cases/product/update-product-use-case.ts b/src/core/application/use-cases/product/update-product-use-case.ts
deleted file mode 100644
index 48e78b87..00000000
--- a/src/core/application/use-cases/product/update-product-use-case.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { UpdateProductRepository } from '@/core/domain/repositories/products/update-product-repository'
-import { ProductResponseDto, UpdateProductDto } from '../../dto/product-dto'
-import { ProductEntity } from '@/core/domain/entities/product-entity'
-import { ProductMapper } from '../../mappers/product-mapper'
-import { inject, injectable } from 'inversify'
-
-export interface UpdateProduct {
- execute: (
- organizationId: string,
- ledgerId: string,
- productId: string,
- product: Partial
- ) => Promise
-}
-
-@injectable()
-export class UpdateProductUseCase implements UpdateProduct {
- constructor(
- @inject(UpdateProductRepository)
- private readonly updateProductRepository: UpdateProductRepository
- ) {}
-
- async execute(
- organizationId: string,
- ledgerId: string,
- productId: string,
- product: Partial
- ): Promise {
- const productEntity: Partial =
- ProductMapper.toDomain(product)
-
- const updatedProduct: ProductEntity =
- await this.updateProductRepository.update(
- organizationId,
- ledgerId,
- productId,
- productEntity
- )
-
- return ProductMapper.toResponseDto(updatedProduct)
- }
-}
diff --git a/src/core/application/use-cases/segment/create-segment-use-case.ts b/src/core/application/use-cases/segment/create-segment-use-case.ts
new file mode 100644
index 00000000..863b0225
--- /dev/null
+++ b/src/core/application/use-cases/segment/create-segment-use-case.ts
@@ -0,0 +1,45 @@
+import { SegmentEntity } from '@/core/domain/entities/segment-entity'
+import type {
+ CreateSegmentDto,
+ SegmentResponseDto
+} from '../../dto/segment-dto'
+import { SegmentMapper } from '../../mappers/segment-mapper'
+import { CreateSegmentRepository } from '@/core/domain/repositories/segments/create-segment-repository'
+import { inject, injectable } from 'inversify'
+import { LogOperation } from '../../decorators/log-operation'
+
+export interface CreateSegment {
+ execute: (
+ organizationId: string,
+ ledgerId: string,
+ segment: CreateSegmentDto
+ ) => Promise
+}
+
+@injectable()
+export class CreateSegmentUseCase implements CreateSegment {
+ constructor(
+ @inject(CreateSegmentRepository)
+ private readonly createSegmentRepository: CreateSegmentRepository
+ ) {}
+
+ @LogOperation({ layer: 'application' })
+ async execute(
+ organizationId: string,
+ ledgerId: string,
+ segment: CreateSegmentDto
+ ): Promise {
+ const segmentEntity: SegmentEntity = SegmentMapper.toDomain(segment)
+
+ const segmentCreated = await this.createSegmentRepository.create(
+ organizationId,
+ ledgerId,
+ segmentEntity
+ )
+
+ const segmentResponseDto: SegmentResponseDto =
+ SegmentMapper.toResponseDto(segmentCreated)
+
+ return segmentResponseDto
+ }
+}
diff --git a/src/core/application/use-cases/product/delete-product-use-case.ts b/src/core/application/use-cases/segment/delete-segment-use-case.ts
similarity index 50%
rename from src/core/application/use-cases/product/delete-product-use-case.ts
rename to src/core/application/use-cases/segment/delete-segment-use-case.ts
index d814f2cb..0d7d96b3 100644
--- a/src/core/application/use-cases/product/delete-product-use-case.ts
+++ b/src/core/application/use-cases/segment/delete-segment-use-case.ts
@@ -1,31 +1,31 @@
-import { DeleteProductRepository } from '@/core/domain/repositories/products/delete-product-repository'
+import { DeleteSegmentRepository } from '@/core/domain/repositories/segments/delete-segment-repository'
import { inject, injectable } from 'inversify'
import { LogOperation } from '../../decorators/log-operation'
-export interface DeleteProduct {
+export interface DeleteSegment {
execute: (
organizationId: string,
ledgerId: string,
- productId: string
+ segmentId: string
) => Promise
}
@injectable()
-export class DeleteProductUseCase implements DeleteProduct {
+export class DeleteSegmentUseCase implements DeleteSegment {
constructor(
- @inject(DeleteProductRepository)
- private readonly deleteProductRepository: DeleteProductRepository
+ @inject(DeleteSegmentRepository)
+ private readonly deleteSegmentRepository: DeleteSegmentRepository
) {}
@LogOperation({ layer: 'application' })
async execute(
organizationId: string,
ledgerId: string,
- productId: string
+ segmentId: string
): Promise {
- await this.deleteProductRepository.delete(
+ await this.deleteSegmentRepository.delete(
organizationId,
ledgerId,
- productId
+ segmentId
)
}
}
diff --git a/src/core/application/use-cases/segment/fetch-all-segments-use-case.ts b/src/core/application/use-cases/segment/fetch-all-segments-use-case.ts
new file mode 100644
index 00000000..75a29e34
--- /dev/null
+++ b/src/core/application/use-cases/segment/fetch-all-segments-use-case.ts
@@ -0,0 +1,40 @@
+import { FetchAllSegmentsRepository } from '@/core/domain/repositories/segments/fetch-all-segments-repository'
+import { PaginationDto } from '../../dto/pagination-dto'
+import { SegmentResponseDto } from '../../dto/segment-dto'
+import { SegmentMapper } from '../../mappers/segment-mapper'
+import { inject, injectable } from 'inversify'
+import { LogOperation } from '../../decorators/log-operation'
+
+export interface FetchAllSegments {
+ execute: (
+ organizationId: string,
+ ledgerId: string,
+ limit: number,
+ page: number
+ ) => Promise>
+}
+
+@injectable()
+export class FetchAllSegmentsUseCase implements FetchAllSegments {
+ constructor(
+ @inject(FetchAllSegmentsRepository)
+ private readonly fetchAllSegmentsRepository: FetchAllSegmentsRepository
+ ) {}
+
+ @LogOperation({ layer: 'application' })
+ async execute(
+ organizationId: string,
+ ledgerId: string,
+ limit: number,
+ page: number
+ ): Promise> {
+ const segmentsResult = await this.fetchAllSegmentsRepository.fetchAll(
+ organizationId,
+ ledgerId,
+ limit,
+ page
+ )
+
+ return SegmentMapper.toPaginationResponseDto(segmentsResult)
+ }
+}
diff --git a/src/core/application/use-cases/segment/fetch-segment-by-id-use-case.ts b/src/core/application/use-cases/segment/fetch-segment-by-id-use-case.ts
new file mode 100644
index 00000000..5c26f00a
--- /dev/null
+++ b/src/core/application/use-cases/segment/fetch-segment-by-id-use-case.ts
@@ -0,0 +1,34 @@
+import { FetchSegmentByIdRepository } from '@/core/domain/repositories/segments/fetch-segment-by-id-repository'
+import { SegmentResponseDto } from '../../dto/segment-dto'
+import { SegmentMapper } from '../../mappers/segment-mapper'
+import { inject, injectable } from 'inversify'
+
+export interface FetchSegmentById {
+ execute: (
+ organizationId: string,
+ ledgerId: string,
+ segmentId: string
+ ) => Promise
+}
+
+@injectable()
+export class FetchSegmentByIdUseCase implements FetchSegmentById {
+ constructor(
+ @inject(FetchSegmentByIdRepository)
+ private readonly fetchSegmentByIdRepository: FetchSegmentByIdRepository
+ ) {}
+
+ async execute(
+ organizationId: string,
+ ledgerId: string,
+ segmentId: string
+ ): Promise {
+ const segment = await this.fetchSegmentByIdRepository.fetchById(
+ organizationId,
+ ledgerId,
+ segmentId
+ )
+
+ return SegmentMapper.toResponseDto(segment)
+ }
+}
diff --git a/src/core/application/use-cases/segment/update-segment-use-case.ts b/src/core/application/use-cases/segment/update-segment-use-case.ts
new file mode 100644
index 00000000..a875416f
--- /dev/null
+++ b/src/core/application/use-cases/segment/update-segment-use-case.ts
@@ -0,0 +1,42 @@
+import { UpdateSegmentRepository } from '@/core/domain/repositories/segments/update-segment-repository'
+import { SegmentResponseDto, UpdateSegmentDto } from '../../dto/segment-dto'
+import { SegmentEntity } from '@/core/domain/entities/segment-entity'
+import { SegmentMapper } from '../../mappers/segment-mapper'
+import { inject, injectable } from 'inversify'
+
+export interface UpdateSegment {
+ execute: (
+ organizationId: string,
+ ledgerId: string,
+ segmentId: string,
+ segment: Partial
+ ) => Promise
+}
+
+@injectable()
+export class UpdateSegmentUseCase implements UpdateSegment {
+ constructor(
+ @inject(UpdateSegmentRepository)
+ private readonly updateSegmentRepository: UpdateSegmentRepository
+ ) {}
+
+ async execute(
+ organizationId: string,
+ ledgerId: string,
+ segmentId: string,
+ segment: Partial
+ ): Promise {
+ const segmentEntity: Partial =
+ SegmentMapper.toDomain(segment)
+
+ const updatedSegment: SegmentEntity =
+ await this.updateSegmentRepository.update(
+ organizationId,
+ ledgerId,
+ segmentId,
+ segmentEntity
+ )
+
+ return SegmentMapper.toResponseDto(updatedSegment)
+ }
+}
diff --git a/src/core/domain/entities/account-entity.ts b/src/core/domain/entities/account-entity.ts
index ddfeeed5..6c8a56fd 100644
--- a/src/core/domain/entities/account-entity.ts
+++ b/src/core/domain/entities/account-entity.ts
@@ -5,7 +5,7 @@ export type AccountEntity = {
ledgerId?: string
organizationId?: string
parentAccountId?: string | null
- productId?: string | null
+ segmentId?: string | null
portfolioId?: string | null
entityId?: string | null
name: string
diff --git a/src/core/domain/entities/product-entity.ts b/src/core/domain/entities/segment-entity.ts
similarity index 88%
rename from src/core/domain/entities/product-entity.ts
rename to src/core/domain/entities/segment-entity.ts
index 3b4641bc..66ec65b2 100644
--- a/src/core/domain/entities/product-entity.ts
+++ b/src/core/domain/entities/segment-entity.ts
@@ -1,6 +1,6 @@
import { StatusEntity } from './status-entity'
-export interface ProductEntity {
+export interface SegmentEntity {
id?: string
ledgerId?: string
organizationId?: string
diff --git a/src/core/domain/repositories/portfolios/create-portfolio-repository.ts b/src/core/domain/repositories/portfolios/create-portfolio-repository.ts
index 437418dd..e210ee06 100644
--- a/src/core/domain/repositories/portfolios/create-portfolio-repository.ts
+++ b/src/core/domain/repositories/portfolios/create-portfolio-repository.ts
@@ -4,6 +4,6 @@ export abstract class CreatePortfolioRepository {
abstract create: (
organizationId: string,
ledgerId: string,
- product: PortfolioEntity
+ segment: PortfolioEntity
) => Promise
}
diff --git a/src/core/domain/repositories/products/create-product-repository.ts b/src/core/domain/repositories/products/create-product-repository.ts
deleted file mode 100644
index 8773a28c..00000000
--- a/src/core/domain/repositories/products/create-product-repository.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { ProductEntity } from '../../entities/product-entity'
-
-export abstract class CreateProductRepository {
- abstract create: (
- organizationId: string,
- ledgerId: string,
- product: ProductEntity
- ) => Promise
-}
diff --git a/src/core/domain/repositories/products/delete-product-repository.test.ts b/src/core/domain/repositories/products/delete-product-repository.test.ts
deleted file mode 100644
index 9850a0e8..00000000
--- a/src/core/domain/repositories/products/delete-product-repository.test.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import { DeleteProductRepository } from './delete-product-repository'
-
-describe('DeleteProductRepository', () => {
- let deleteProductRepository: DeleteProductRepository
-
- beforeEach(() => {
- deleteProductRepository = {
- delete: jest.fn()
- }
- })
-
- it('should call delete with correct parameters', async () => {
- const organizationId = 'org123'
- const ledgerId = 'ledger123'
- const productId = 'product123'
-
- await deleteProductRepository.delete(organizationId, ledgerId, productId)
-
- expect(deleteProductRepository.delete).toHaveBeenCalledWith(
- organizationId,
- ledgerId,
- productId
- )
- })
-
- it('should return a promise that resolves to void', async () => {
- const organizationId = 'org123'
- const ledgerId = 'ledger123'
- const productId = 'product123'
-
- ;(deleteProductRepository.delete as jest.Mock).mockResolvedValueOnce(
- undefined
- )
-
- await expect(
- deleteProductRepository.delete(organizationId, ledgerId, productId)
- ).resolves.toBeUndefined()
- })
-})
diff --git a/src/core/domain/repositories/products/fetch-product-by-id-repository.test.ts b/src/core/domain/repositories/products/fetch-product-by-id-repository.test.ts
deleted file mode 100644
index 34b0d42b..00000000
--- a/src/core/domain/repositories/products/fetch-product-by-id-repository.test.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { FetchProductByIdRepository } from './fetch-product-by-id-repository'
-import { ProductEntity } from '../../entities/product-entity'
-
-const product: ProductEntity = {
- id: '1',
- name: 'Test Product',
- organizationId: 'org123',
- ledgerId: 'ledger123',
- metadata: { key: 'value' },
- status: { code: 'active', description: 'Active' },
- createdAt: new Date(),
- updatedAt: new Date(),
- deletedAt: null
-}
-
-class MockFetchProductByIdRepository implements FetchProductByIdRepository {
- fetchById(
- organizationId: string,
- ledgerId: string,
- productId: string
- ): Promise {
- return Promise.resolve(product)
- }
-}
-
-describe('FetchProductByIdRepository', () => {
- let repository: FetchProductByIdRepository
-
- beforeEach(() => {
- repository = new MockFetchProductByIdRepository()
- })
-
- it('should fetch product by id', async () => {
- const organizationId = 'org123'
- const ledgerId = 'ledger123'
- const productId = '1'
-
- const product = await repository.fetchById(
- organizationId,
- ledgerId,
- productId
- )
-
- expect(product).toEqual(product)
- })
-
- it('should return a product with the correct id', async () => {
- const organizationId = 'org123'
- const ledgerId = 'ledger123'
- const productId = '1'
-
- const product = await repository.fetchById(
- organizationId,
- ledgerId,
- productId
- )
-
- expect(product.id).toBe(productId)
- })
-})
diff --git a/src/core/domain/repositories/products/fetch-product-by-id-repository.ts b/src/core/domain/repositories/products/fetch-product-by-id-repository.ts
deleted file mode 100644
index 7752c202..00000000
--- a/src/core/domain/repositories/products/fetch-product-by-id-repository.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { ProductEntity } from '../../entities/product-entity'
-
-export abstract class FetchProductByIdRepository {
- abstract fetchById: (
- organizationId: string,
- ledgerId: string,
- productId: string
- ) => Promise
-}
diff --git a/src/core/domain/repositories/products/update-product-repository.test.ts b/src/core/domain/repositories/products/update-product-repository.test.ts
deleted file mode 100644
index ef4bae35..00000000
--- a/src/core/domain/repositories/products/update-product-repository.test.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-import { UpdateProductRepository } from './update-product-repository'
-import { ProductEntity } from '../../entities/product-entity'
-
-describe('UpdateProductRepository', () => {
- let updateProductRepository: UpdateProductRepository
-
- beforeEach(() => {
- updateProductRepository = {
- update: jest.fn()
- }
- })
-
- it('should update a product successfully', async () => {
- const organizationId = 'org123'
- const ledgerId = 'ledger123'
- const productId = 'product123'
- const product: Partial = { name: 'Updated Product' }
- const updatedProduct: ProductEntity = {
- id: productId,
- name: 'Updated Product',
- organizationId,
- ledgerId,
- metadata: {},
- status: { code: 'active', description: 'Active' },
- createdAt: new Date(),
- updatedAt: new Date(),
- deletedAt: null
- }
-
- ;(updateProductRepository.update as jest.Mock).mockResolvedValue(
- updatedProduct
- )
-
- const result = await updateProductRepository.update(
- organizationId,
- ledgerId,
- productId,
- product
- )
-
- expect(result).toEqual(updatedProduct)
- expect(updateProductRepository.update).toHaveBeenCalledWith(
- organizationId,
- ledgerId,
- productId,
- product
- )
- })
-
- it('should throw an error if update fails', async () => {
- const organizationId = 'org123'
- const ledgerId = 'ledger123'
- const productId = 'product123'
- const product: Partial = { name: 'Updated Product' }
- const errorMessage = 'Update failed'
-
- ;(updateProductRepository.update as jest.Mock).mockRejectedValue(
- new Error(errorMessage)
- )
-
- await expect(
- updateProductRepository.update(
- organizationId,
- ledgerId,
- productId,
- product
- )
- ).rejects.toThrow(errorMessage)
- expect(updateProductRepository.update).toHaveBeenCalledWith(
- organizationId,
- ledgerId,
- productId,
- product
- )
- })
-})
diff --git a/src/core/domain/repositories/products/update-product-repository.ts b/src/core/domain/repositories/products/update-product-repository.ts
deleted file mode 100644
index fda412f5..00000000
--- a/src/core/domain/repositories/products/update-product-repository.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { ProductEntity } from '../../entities/product-entity'
-
-export abstract class UpdateProductRepository {
- abstract update: (
- organizationId: string,
- ledgerId: string,
- productId: string,
- product: Partial
- ) => Promise
-}
diff --git a/src/core/domain/repositories/products/create-product-repository.test.ts b/src/core/domain/repositories/segments/create-segment-repository.test.ts
similarity index 51%
rename from src/core/domain/repositories/products/create-product-repository.test.ts
rename to src/core/domain/repositories/segments/create-segment-repository.test.ts
index 89a0839b..09d521d7 100644
--- a/src/core/domain/repositories/products/create-product-repository.test.ts
+++ b/src/core/domain/repositories/segments/create-segment-repository.test.ts
@@ -1,25 +1,25 @@
-import { CreateProductRepository } from './create-product-repository'
-import { ProductEntity } from '../../entities/product-entity'
+import { CreateSegmentRepository } from './create-segment-repository'
+import { SegmentEntity } from '../../entities/segment-entity'
-class MockCreateProductRepository implements CreateProductRepository {
+class MockCreateSegmentRepository implements CreateSegmentRepository {
async create(
organizationId: string,
ledgerId: string,
- product: ProductEntity
- ): Promise {
- return product
+ segment: SegmentEntity
+ ): Promise {
+ return segment
}
}
-describe('CreateProductRepository', () => {
- let repository: CreateProductRepository
- let mockProduct: ProductEntity
+describe('CreateSegmentRepository', () => {
+ let repository: CreateSegmentRepository
+ let mockSegment: SegmentEntity
beforeEach(() => {
- repository = new MockCreateProductRepository()
- mockProduct = {
+ repository = new MockCreateSegmentRepository()
+ mockSegment = {
id: '1',
- name: 'Test Product',
+ name: 'Test Segment',
organizationId: 'org123',
ledgerId: 'ledger123',
metadata: {
@@ -35,7 +35,7 @@ describe('CreateProductRepository', () => {
}
})
- it('should create a product successfully', async () => {
+ it('should create a segment successfully', async () => {
const organizationId = 'org123'
const ledgerId = 'ledger123'
@@ -44,24 +44,24 @@ describe('CreateProductRepository', () => {
const result = await repository.create(
organizationId,
ledgerId,
- mockProduct
+ mockSegment
)
- expect(result).toEqual(mockProduct)
+ expect(result).toEqual(mockSegment)
expect(spyCreate).toHaveBeenCalledWith(
organizationId,
ledgerId,
- mockProduct
+ mockSegment
)
})
- it('should throw an error if product creation fails', async () => {
- const failingRepository: CreateProductRepository = {
+ it('should throw an error if segment creation fails', async () => {
+ const failingRepository: CreateSegmentRepository = {
create: jest.fn().mockRejectedValue(new Error('Creation failed'))
}
await expect(
- failingRepository.create('org123', 'ledger123', mockProduct)
+ failingRepository.create('org123', 'ledger123', mockSegment)
).rejects.toThrow('Creation failed')
})
})
diff --git a/src/core/domain/repositories/segments/create-segment-repository.ts b/src/core/domain/repositories/segments/create-segment-repository.ts
new file mode 100644
index 00000000..380c1b27
--- /dev/null
+++ b/src/core/domain/repositories/segments/create-segment-repository.ts
@@ -0,0 +1,9 @@
+import { SegmentEntity } from '../../entities/segment-entity'
+
+export abstract class CreateSegmentRepository {
+ abstract create: (
+ organizationId: string,
+ ledgerId: string,
+ segment: SegmentEntity
+ ) => Promise
+}
diff --git a/src/core/domain/repositories/segments/delete-segment-repository.test.ts b/src/core/domain/repositories/segments/delete-segment-repository.test.ts
new file mode 100644
index 00000000..5a692ca1
--- /dev/null
+++ b/src/core/domain/repositories/segments/delete-segment-repository.test.ts
@@ -0,0 +1,39 @@
+import { DeleteSegmentRepository } from './delete-segment-repository'
+
+describe('DeleteSegmentRepository', () => {
+ let deleteSegmentRepository: DeleteSegmentRepository
+
+ beforeEach(() => {
+ deleteSegmentRepository = {
+ delete: jest.fn()
+ }
+ })
+
+ it('should call delete with correct parameters', async () => {
+ const organizationId = 'org123'
+ const ledgerId = 'ledger123'
+ const segmentId = 'segment123'
+
+ await deleteSegmentRepository.delete(organizationId, ledgerId, segmentId)
+
+ expect(deleteSegmentRepository.delete).toHaveBeenCalledWith(
+ organizationId,
+ ledgerId,
+ segmentId
+ )
+ })
+
+ it('should return a promise that resolves to void', async () => {
+ const organizationId = 'org123'
+ const ledgerId = 'ledger123'
+ const segmentId = 'segment123'
+
+ ;(deleteSegmentRepository.delete as jest.Mock).mockResolvedValueOnce(
+ undefined
+ )
+
+ await expect(
+ deleteSegmentRepository.delete(organizationId, ledgerId, segmentId)
+ ).resolves.toBeUndefined()
+ })
+})
diff --git a/src/core/domain/repositories/products/delete-product-repository.ts b/src/core/domain/repositories/segments/delete-segment-repository.ts
similarity index 57%
rename from src/core/domain/repositories/products/delete-product-repository.ts
rename to src/core/domain/repositories/segments/delete-segment-repository.ts
index 4ac3e2d2..b94e4702 100644
--- a/src/core/domain/repositories/products/delete-product-repository.ts
+++ b/src/core/domain/repositories/segments/delete-segment-repository.ts
@@ -1,7 +1,7 @@
-export abstract class DeleteProductRepository {
+export abstract class DeleteSegmentRepository {
abstract delete: (
organizationId: string,
ledgerId: string,
- productId: string
+ segmentId: string
) => Promise
}
diff --git a/src/core/domain/repositories/products/fetch-all-products-repository.test.ts b/src/core/domain/repositories/segments/fetch-all-segments-repository.test.ts
similarity index 55%
rename from src/core/domain/repositories/products/fetch-all-products-repository.test.ts
rename to src/core/domain/repositories/segments/fetch-all-segments-repository.test.ts
index 180c809e..17bcdac5 100644
--- a/src/core/domain/repositories/products/fetch-all-products-repository.test.ts
+++ b/src/core/domain/repositories/segments/fetch-all-segments-repository.test.ts
@@ -1,26 +1,26 @@
-import { FetchAllProductsRepository } from './fetch-all-products-repository'
+import { FetchAllSegmentsRepository } from './fetch-all-segments-repository'
import { PaginationEntity } from '../../entities/pagination-entity'
-import { ProductEntity } from '../../entities/product-entity'
+import { SegmentEntity } from '../../entities/segment-entity'
-describe('FetchAllProductsRepository', () => {
- let fetchAllProductsRepository: FetchAllProductsRepository
+describe('FetchAllSegmentsRepository', () => {
+ let fetchAllSegmentsRepository: FetchAllSegmentsRepository
beforeEach(() => {
- fetchAllProductsRepository = {
+ fetchAllSegmentsRepository = {
fetchAll: jest.fn()
}
})
- it('should fetch all products with given organizationId and ledgerId', async () => {
+ it('should fetch all segments with given organizationId and ledgerId', async () => {
const organizationId = 'org123'
const ledgerId = 'ledger123'
const limit = 10
const page = 1
- const expectedProducts: PaginationEntity = {
+ const expectedSegments: PaginationEntity = {
items: [
{
id: '1',
- name: 'Test Product',
+ name: 'Test Segment',
organizationId: 'org123',
ledgerId: 'ledger123',
metadata: { key: 'value' },
@@ -31,7 +31,7 @@ describe('FetchAllProductsRepository', () => {
},
{
id: '2',
- name: 'Test Product 2',
+ name: 'Test Segment 2',
organizationId: 'org123',
ledgerId: 'ledger123',
metadata: { key: 'value' },
@@ -44,37 +44,37 @@ describe('FetchAllProductsRepository', () => {
page: 1,
limit: 10
}
- ;(fetchAllProductsRepository.fetchAll as jest.Mock).mockResolvedValue(
- expectedProducts
+ ;(fetchAllSegmentsRepository.fetchAll as jest.Mock).mockResolvedValue(
+ expectedSegments
)
- const result = await fetchAllProductsRepository.fetchAll(
+ const result = await fetchAllSegmentsRepository.fetchAll(
organizationId,
ledgerId,
limit,
page
)
- expect(fetchAllProductsRepository.fetchAll).toHaveBeenCalledWith(
+ expect(fetchAllSegmentsRepository.fetchAll).toHaveBeenCalledWith(
organizationId,
ledgerId,
limit,
page
)
- expect(result).toEqual(expectedProducts)
+ expect(result).toEqual(expectedSegments)
})
- it('should handle errors when fetching products', async () => {
+ it('should handle errors when fetching segments', async () => {
const organizationId = 'org123'
const ledgerId = 'ledger123'
const limit = 10
const page = 1
- const error = new Error('Failed to fetch products')
+ const error = new Error('Failed to fetch segments')
- ;(fetchAllProductsRepository.fetchAll as jest.Mock).mockRejectedValue(error)
+ ;(fetchAllSegmentsRepository.fetchAll as jest.Mock).mockRejectedValue(error)
await expect(
- fetchAllProductsRepository.fetchAll(organizationId, ledgerId, limit, page)
- ).rejects.toThrow('Failed to fetch products')
+ fetchAllSegmentsRepository.fetchAll(organizationId, ledgerId, limit, page)
+ ).rejects.toThrow('Failed to fetch segments')
})
})
diff --git a/src/core/domain/repositories/products/fetch-all-products-repository.ts b/src/core/domain/repositories/segments/fetch-all-segments-repository.ts
similarity index 52%
rename from src/core/domain/repositories/products/fetch-all-products-repository.ts
rename to src/core/domain/repositories/segments/fetch-all-segments-repository.ts
index 15303ad8..de08a3dc 100644
--- a/src/core/domain/repositories/products/fetch-all-products-repository.ts
+++ b/src/core/domain/repositories/segments/fetch-all-segments-repository.ts
@@ -1,11 +1,11 @@
import { PaginationEntity } from '../../entities/pagination-entity'
-import { ProductEntity } from '../../entities/product-entity'
+import { SegmentEntity } from '../../entities/segment-entity'
-export abstract class FetchAllProductsRepository {
+export abstract class FetchAllSegmentsRepository {
abstract fetchAll: (
organizationId: string,
ledgerId: string,
limit: number,
page: number
- ) => Promise>
+ ) => Promise>
}
diff --git a/src/core/domain/repositories/segments/fetch-segment-by-id-repository.test.ts b/src/core/domain/repositories/segments/fetch-segment-by-id-repository.test.ts
new file mode 100644
index 00000000..47fac37d
--- /dev/null
+++ b/src/core/domain/repositories/segments/fetch-segment-by-id-repository.test.ts
@@ -0,0 +1,60 @@
+import { FetchSegmentByIdRepository } from './fetch-segment-by-id-repository'
+import { SegmentEntity } from '../../entities/segment-entity'
+
+const segment: SegmentEntity = {
+ id: '1',
+ name: 'Test Segment',
+ organizationId: 'org123',
+ ledgerId: 'ledger123',
+ metadata: { key: 'value' },
+ status: { code: 'active', description: 'Active' },
+ createdAt: new Date(),
+ updatedAt: new Date(),
+ deletedAt: null
+}
+
+class MockFetchSegmentByIdRepository implements FetchSegmentByIdRepository {
+ fetchById(
+ organizationId: string,
+ ledgerId: string,
+ segmentId: string
+ ): Promise {
+ return Promise.resolve(segment)
+ }
+}
+
+describe('FetchSegmentByIdRepository', () => {
+ let repository: FetchSegmentByIdRepository
+
+ beforeEach(() => {
+ repository = new MockFetchSegmentByIdRepository()
+ })
+
+ it('should fetch segment by id', async () => {
+ const organizationId = 'org123'
+ const ledgerId = 'ledger123'
+ const segmentId = '1'
+
+ const segment = await repository.fetchById(
+ organizationId,
+ ledgerId,
+ segmentId
+ )
+
+ expect(segment).toEqual(segment)
+ })
+
+ it('should return a segment with the correct id', async () => {
+ const organizationId = 'org123'
+ const ledgerId = 'ledger123'
+ const segmentId = '1'
+
+ const segment = await repository.fetchById(
+ organizationId,
+ ledgerId,
+ segmentId
+ )
+
+ expect(segment.id).toBe(segmentId)
+ })
+})
diff --git a/src/core/domain/repositories/segments/fetch-segment-by-id-repository.ts b/src/core/domain/repositories/segments/fetch-segment-by-id-repository.ts
new file mode 100644
index 00000000..0e5c3dd2
--- /dev/null
+++ b/src/core/domain/repositories/segments/fetch-segment-by-id-repository.ts
@@ -0,0 +1,9 @@
+import { SegmentEntity } from '../../entities/segment-entity'
+
+export abstract class FetchSegmentByIdRepository {
+ abstract fetchById: (
+ organizationId: string,
+ ledgerId: string,
+ segmentId: string
+ ) => Promise
+}
diff --git a/src/core/domain/repositories/segments/update-segment-repository.test.ts b/src/core/domain/repositories/segments/update-segment-repository.test.ts
new file mode 100644
index 00000000..5e281abb
--- /dev/null
+++ b/src/core/domain/repositories/segments/update-segment-repository.test.ts
@@ -0,0 +1,76 @@
+import { UpdateSegmentRepository } from './update-segment-repository'
+import { SegmentEntity } from '../../entities/segment-entity'
+
+describe('UpdateSegmentRepository', () => {
+ let updateSegmentRepository: UpdateSegmentRepository
+
+ beforeEach(() => {
+ updateSegmentRepository = {
+ update: jest.fn()
+ }
+ })
+
+ it('should update a segment successfully', async () => {
+ const organizationId = 'org123'
+ const ledgerId = 'ledger123'
+ const segmentId = 'segment123'
+ const segment: Partial = { name: 'Updated Segment' }
+ const updatedSegment: SegmentEntity = {
+ id: segmentId,
+ name: 'Updated Segment',
+ organizationId,
+ ledgerId,
+ metadata: {},
+ status: { code: 'active', description: 'Active' },
+ createdAt: new Date(),
+ updatedAt: new Date(),
+ deletedAt: null
+ }
+
+ ;(updateSegmentRepository.update as jest.Mock).mockResolvedValue(
+ updatedSegment
+ )
+
+ const result = await updateSegmentRepository.update(
+ organizationId,
+ ledgerId,
+ segmentId,
+ segment
+ )
+
+ expect(result).toEqual(updatedSegment)
+ expect(updateSegmentRepository.update).toHaveBeenCalledWith(
+ organizationId,
+ ledgerId,
+ segmentId,
+ segment
+ )
+ })
+
+ it('should throw an error if update fails', async () => {
+ const organizationId = 'org123'
+ const ledgerId = 'ledger123'
+ const segmentId = 'segment123'
+ const segment: Partial = { name: 'Updated Segment' }
+ const errorMessage = 'Update failed'
+
+ ;(updateSegmentRepository.update as jest.Mock).mockRejectedValue(
+ new Error(errorMessage)
+ )
+
+ await expect(
+ updateSegmentRepository.update(
+ organizationId,
+ ledgerId,
+ segmentId,
+ segment
+ )
+ ).rejects.toThrow(errorMessage)
+ expect(updateSegmentRepository.update).toHaveBeenCalledWith(
+ organizationId,
+ ledgerId,
+ segmentId,
+ segment
+ )
+ })
+})
diff --git a/src/core/domain/repositories/segments/update-segment-repository.ts b/src/core/domain/repositories/segments/update-segment-repository.ts
new file mode 100644
index 00000000..b7198ed3
--- /dev/null
+++ b/src/core/domain/repositories/segments/update-segment-repository.ts
@@ -0,0 +1,10 @@
+import { SegmentEntity } from '../../entities/segment-entity'
+
+export abstract class UpdateSegmentRepository {
+ abstract update: (
+ organizationId: string,
+ ledgerId: string,
+ segmentId: string,
+ segment: Partial
+ ) => Promise
+}
diff --git a/src/core/infrastructure/container-registry/container-registry.ts b/src/core/infrastructure/container-registry/container-registry.ts
index 93255ecf..c892a4eb 100644
--- a/src/core/infrastructure/container-registry/container-registry.ts
+++ b/src/core/infrastructure/container-registry/container-registry.ts
@@ -7,7 +7,7 @@ import { LedgerUseCaseModule } from './use-cases/ledger-module'
import { PortfolioUseCaseModule } from './use-cases/portfolios-module'
import { AccountUseCaseModule } from './use-cases/account-module'
import { AssetUseCaseModule } from './use-cases/asset-module'
-import { ProductUseCaseModule } from './use-cases/product-module'
+import { SegmentUseCaseModule } from './use-cases/segment-module'
import { CasdoorModule } from '../casdoor/module/casdoor-module'
import { AuthUseCaseModule } from './use-cases/auth-module'
import { LoggerModule } from '../logger/module/logger-module'
@@ -29,7 +29,7 @@ container.load(LedgerUseCaseModule)
container.load(PortfolioUseCaseModule)
container.load(AccountUseCaseModule)
container.load(AssetUseCaseModule)
-container.load(ProductUseCaseModule)
+container.load(SegmentUseCaseModule)
container.load(LoggerApplicationModule)
container.load(TransactionUseCaseModule)
diff --git a/src/core/infrastructure/container-registry/use-cases/product-module.ts b/src/core/infrastructure/container-registry/use-cases/product-module.ts
deleted file mode 100644
index c5b6ed09..00000000
--- a/src/core/infrastructure/container-registry/use-cases/product-module.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { Container, ContainerModule } from '../../utils/di/container'
-
-import {
- CreateProduct,
- CreateProductUseCase
-} from '@/core/application/use-cases/product/create-product-use-case'
-import {
- DeleteProduct,
- DeleteProductUseCase
-} from '@/core/application/use-cases/product/delete-product-use-case'
-import {
- FetchAllProducts,
- FetchAllProductsUseCase
-} from '@/core/application/use-cases/product/fetch-all-products-use-case'
-import {
- FetchProductById,
- FetchProductByIdUseCase
-} from '@/core/application/use-cases/product/fetch-product-by-id-use-case'
-import {
- UpdateProduct,
- UpdateProductUseCase
-} from '@/core/application/use-cases/product/update-product-use-case'
-
-export const ProductUseCaseModule = new ContainerModule(
- (container: Container) => {
- container.bind(CreateProductUseCase).toSelf()
- container.bind(FetchAllProductsUseCase).toSelf()
- container.bind(UpdateProductUseCase).toSelf()
- container.bind(DeleteProductUseCase).toSelf()
- container.bind(FetchProductByIdUseCase).toSelf()
- }
-)
diff --git a/src/core/infrastructure/container-registry/use-cases/segment-module.ts b/src/core/infrastructure/container-registry/use-cases/segment-module.ts
new file mode 100644
index 00000000..aecdb4f8
--- /dev/null
+++ b/src/core/infrastructure/container-registry/use-cases/segment-module.ts
@@ -0,0 +1,32 @@
+import { Container, ContainerModule } from '../../utils/di/container'
+
+import {
+ CreateSegment,
+ CreateSegmentUseCase
+} from '@/core/application/use-cases/segment/create-segment-use-case'
+import {
+ DeleteSegment,
+ DeleteSegmentUseCase
+} from '@/core/application/use-cases/segment/delete-segment-use-case'
+import {
+ FetchAllSegments,
+ FetchAllSegmentsUseCase
+} from '@/core/application/use-cases/segment/fetch-all-segments-use-case'
+import {
+ FetchSegmentById,
+ FetchSegmentByIdUseCase
+} from '@/core/application/use-cases/segment/fetch-segment-by-id-use-case'
+import {
+ UpdateSegment,
+ UpdateSegmentUseCase
+} from '@/core/application/use-cases/segment/update-segment-use-case'
+
+export const SegmentUseCaseModule = new ContainerModule(
+ (container: Container) => {
+ container.bind(CreateSegmentUseCase).toSelf()
+ container.bind(FetchAllSegmentsUseCase).toSelf()
+ container.bind(UpdateSegmentUseCase).toSelf()
+ container.bind(DeleteSegmentUseCase).toSelf()
+ container.bind(FetchSegmentByIdUseCase).toSelf()
+ }
+)
diff --git a/src/core/infrastructure/midaz/module/midaz-module.ts b/src/core/infrastructure/midaz/module/midaz-module.ts
index 4d2ebab3..cde610a9 100644
--- a/src/core/infrastructure/midaz/module/midaz-module.ts
+++ b/src/core/infrastructure/midaz/module/midaz-module.ts
@@ -4,7 +4,7 @@ import { MidazAssetModule } from './asset-module'
import { MidazLedgerModule } from './ledger-module'
import { MidazOrganizationModule } from './organization-module'
import { MidazPortfolioModule } from './portfolio-module'
-import { MidazProductModule } from './product-module'
+import { MidazSegmentModule } from './segment-module'
import { MidazTransactionModule } from './transaction-module'
export const MidazModule = new ContainerModule((container: Container) => {
@@ -13,6 +13,6 @@ export const MidazModule = new ContainerModule((container: Container) => {
container.load(MidazPortfolioModule)
container.load(MidazAccountModule)
container.load(MidazAssetModule)
- container.load(MidazProductModule)
+ container.load(MidazSegmentModule)
container.load(MidazTransactionModule)
})
diff --git a/src/core/infrastructure/midaz/module/product-module.ts b/src/core/infrastructure/midaz/module/product-module.ts
deleted file mode 100644
index e72cf6d6..00000000
--- a/src/core/infrastructure/midaz/module/product-module.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { Container, ContainerModule } from '../../utils/di/container'
-
-import { CreateProductRepository } from '@/core/domain/repositories/products/create-product-repository'
-import { DeleteProductRepository } from '@/core/domain/repositories/products/delete-product-repository'
-import { FetchAllProductsRepository } from '@/core/domain/repositories/products/fetch-all-products-repository'
-import { FetchProductByIdRepository } from '@/core/domain/repositories/products/fetch-product-by-id-repository'
-import { UpdateProductRepository } from '@/core/domain/repositories/products/update-product-repository'
-
-import { MidazCreateProductRepository } from '../product/midaz-create-product-repository'
-import { MidazFetchAllProductsRepository } from '../product/midaz-fetch-all-products-repository'
-import { MidazUpdateProductRepository } from '../product/midaz-update-product-repository'
-import { MidazDeleteProductRepository } from '../product/midaz-delete-product-repository'
-import { MidazFetchProductByIdRepository } from '../product/midaz-fetch-product-by-id-repository'
-
-export const MidazProductModule = new ContainerModule(
- (container: Container) => {
- container
- .bind(CreateProductRepository)
- .to(MidazCreateProductRepository)
-
- container
- .bind(FetchAllProductsRepository)
- .to(MidazFetchAllProductsRepository)
-
- container
- .bind(UpdateProductRepository)
- .to(MidazUpdateProductRepository)
-
- container
- .bind(DeleteProductRepository)
- .to(MidazDeleteProductRepository)
-
- container
- .bind(FetchProductByIdRepository)
- .to(MidazFetchProductByIdRepository)
- }
-)
diff --git a/src/core/infrastructure/midaz/module/segment-module.ts b/src/core/infrastructure/midaz/module/segment-module.ts
new file mode 100644
index 00000000..3d7484fd
--- /dev/null
+++ b/src/core/infrastructure/midaz/module/segment-module.ts
@@ -0,0 +1,37 @@
+import { Container, ContainerModule } from '../../utils/di/container'
+
+import { CreateSegmentRepository } from '@/core/domain/repositories/segments/create-segment-repository'
+import { DeleteSegmentRepository } from '@/core/domain/repositories/segments/delete-segment-repository'
+import { FetchAllSegmentsRepository } from '@/core/domain/repositories/segments/fetch-all-segments-repository'
+import { FetchSegmentByIdRepository } from '@/core/domain/repositories/segments/fetch-segment-by-id-repository'
+import { UpdateSegmentRepository } from '@/core/domain/repositories/segments/update-segment-repository'
+
+import { MidazCreateSegmentRepository } from '../segments/midaz-create-segment-repository'
+import { MidazFetchAllSegmentsRepository } from '../segments/midaz-fetch-all-segments-repository'
+import { MidazUpdateSegmentRepository } from '../segments/midaz-update-segment-repository'
+import { MidazDeleteSegmentRepository } from '../segments/midaz-delete-segment-repository'
+import { MidazFetchSegmentByIdRepository } from '../segments/midaz-fetch-segment-by-id-repository'
+
+export const MidazSegmentModule = new ContainerModule(
+ (container: Container) => {
+ container
+ .bind(CreateSegmentRepository)
+ .to(MidazCreateSegmentRepository)
+
+ container
+ .bind(FetchAllSegmentsRepository)
+ .to(MidazFetchAllSegmentsRepository)
+
+ container
+ .bind(UpdateSegmentRepository)
+ .to(MidazUpdateSegmentRepository)
+
+ container
+ .bind(DeleteSegmentRepository)
+ .to(MidazDeleteSegmentRepository)
+
+ container
+ .bind(FetchSegmentByIdRepository)
+ .to(MidazFetchSegmentByIdRepository)
+ }
+)
diff --git a/src/core/infrastructure/midaz/product/midaz-create-product-repository.test.ts b/src/core/infrastructure/midaz/segments/midaz-create-segment-repository.test.ts
similarity index 62%
rename from src/core/infrastructure/midaz/product/midaz-create-product-repository.test.ts
rename to src/core/infrastructure/midaz/segments/midaz-create-segment-repository.test.ts
index edeaabd8..9b4ab9ee 100644
--- a/src/core/infrastructure/midaz/product/midaz-create-product-repository.test.ts
+++ b/src/core/infrastructure/midaz/segments/midaz-create-segment-repository.test.ts
@@ -1,5 +1,5 @@
-import { MidazCreateProductRepository } from './midaz-create-product-repository'
-import { ProductEntity } from '@/core/domain/entities/product-entity'
+import { MidazCreateSegmentRepository } from './midaz-create-segment-repository'
+import { SegmentEntity } from '@/core/domain/entities/segment-entity'
import { HTTP_METHODS } from '../../utils/http-fetch-utils'
jest.mock('../../utils/http-fetch-utils', () => ({
@@ -9,45 +9,45 @@ jest.mock('../../utils/http-fetch-utils', () => ({
}
}))
-describe('MidazCreateProductRepository', () => {
- let repository: MidazCreateProductRepository
+describe('MidazCreateSegmentRepository', () => {
+ let repository: MidazCreateSegmentRepository
let mockHttpFetchUtils: { httpMidazAuthFetch: jest.Mock }
beforeEach(() => {
mockHttpFetchUtils = { httpMidazAuthFetch: jest.fn() }
- repository = new MidazCreateProductRepository(mockHttpFetchUtils as any)
+ repository = new MidazCreateSegmentRepository(mockHttpFetchUtils as any)
jest.clearAllMocks()
})
- it('should create a product successfully', async () => {
+ it('should create a segment successfully', async () => {
const organizationId = '1'
const ledgerId = '1'
- const product: ProductEntity = {
+ const segment: SegmentEntity = {
id: '1',
- name: 'Test Product',
+ name: 'Test Segment',
status: { code: 'ACTIVE', description: '' },
metadata: {}
}
- const response: ProductEntity = { ...product }
+ const response: SegmentEntity = { ...segment }
mockHttpFetchUtils.httpMidazAuthFetch.mockResolvedValueOnce(response)
- const result = await repository.create(organizationId, ledgerId, product)
+ const result = await repository.create(organizationId, ledgerId, segment)
expect(mockHttpFetchUtils.httpMidazAuthFetch).toHaveBeenCalledWith({
- url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/products`,
+ url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/segments`,
method: HTTP_METHODS.POST,
- body: JSON.stringify(product)
+ body: JSON.stringify(segment)
})
expect(result).toEqual(response)
})
- it('should handle errors when creating a product', async () => {
+ it('should handle errors when creating a segment', async () => {
const organizationId = '1'
const ledgerId = '1'
- const product: ProductEntity = {
+ const segment: SegmentEntity = {
id: '1',
- name: 'Test Product',
+ name: 'Test Segment',
status: { code: 'ACTIVE', description: '' },
metadata: {}
}
@@ -56,13 +56,13 @@ describe('MidazCreateProductRepository', () => {
mockHttpFetchUtils.httpMidazAuthFetch.mockRejectedValueOnce(error)
await expect(
- repository.create(organizationId, ledgerId, product)
+ repository.create(organizationId, ledgerId, segment)
).rejects.toThrow('Error occurred')
expect(mockHttpFetchUtils.httpMidazAuthFetch).toHaveBeenCalledWith({
- url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/products`,
+ url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/segments`,
method: HTTP_METHODS.POST,
- body: JSON.stringify(product)
+ body: JSON.stringify(segment)
})
})
})
diff --git a/src/core/infrastructure/midaz/product/midaz-create-product-repository.ts b/src/core/infrastructure/midaz/segments/midaz-create-segment-repository.ts
similarity index 59%
rename from src/core/infrastructure/midaz/product/midaz-create-product-repository.ts
rename to src/core/infrastructure/midaz/segments/midaz-create-segment-repository.ts
index b6c10cbe..9f5e584c 100644
--- a/src/core/infrastructure/midaz/product/midaz-create-product-repository.ts
+++ b/src/core/infrastructure/midaz/segments/midaz-create-segment-repository.ts
@@ -1,10 +1,11 @@
-import { ProductEntity } from '@/core/domain/entities/product-entity'
-import { CreateProductRepository } from '@/core/domain/repositories/products/create-product-repository'
+import { SegmentEntity } from '@/core/domain/entities/segment-entity'
+import { CreateSegmentRepository } from '@/core/domain/repositories/segments/create-segment-repository'
import { HTTP_METHODS, MidazHttpFetchUtils } from '../../utils/http-fetch-utils'
import { injectable, inject } from 'inversify'
import { ContainerTypeMidazHttpFetch } from '../../container-registry/midaz-http-fetch-module'
+
@injectable()
-export class MidazCreateProductRepository implements CreateProductRepository {
+export class MidazCreateSegmentRepository implements CreateSegmentRepository {
private baseUrl: string = process.env.MIDAZ_BASE_PATH as string
constructor(
@@ -15,14 +16,14 @@ export class MidazCreateProductRepository implements CreateProductRepository {
async create(
organizationId: string,
ledgerId: string,
- product: ProductEntity
- ): Promise {
- const url = `${this.baseUrl}/organizations/${organizationId}/ledgers/${ledgerId}/products`
+ segment: SegmentEntity
+ ): Promise {
+ const url = `${this.baseUrl}/organizations/${organizationId}/ledgers/${ledgerId}/segments`
const response =
- await this.midazHttpFetchUtils.httpMidazAuthFetch({
+ await this.midazHttpFetchUtils.httpMidazAuthFetch({
url,
method: HTTP_METHODS.POST,
- body: JSON.stringify(product)
+ body: JSON.stringify(segment)
})
return response
diff --git a/src/core/infrastructure/midaz/product/midaz-delete-product-repository.test.ts b/src/core/infrastructure/midaz/segments/midaz-delete-segment-repository.test.ts
similarity index 63%
rename from src/core/infrastructure/midaz/product/midaz-delete-product-repository.test.ts
rename to src/core/infrastructure/midaz/segments/midaz-delete-segment-repository.test.ts
index 49d25463..c6114d5c 100644
--- a/src/core/infrastructure/midaz/product/midaz-delete-product-repository.test.ts
+++ b/src/core/infrastructure/midaz/segments/midaz-delete-segment-repository.test.ts
@@ -1,4 +1,4 @@
-import { MidazDeleteProductRepository } from './midaz-delete-product-repository'
+import { MidazDeleteSegmentRepository } from './midaz-delete-segment-repository'
import { HTTP_METHODS } from '../../utils/http-fetch-utils'
jest.mock('../../utils/http-fetch-utils', () => ({
@@ -8,45 +8,45 @@ jest.mock('../../utils/http-fetch-utils', () => ({
}
}))
-describe('MidazDeleteProductRepository', () => {
- let repository: MidazDeleteProductRepository
+describe('MidazDeleteSegmentRepository', () => {
+ let repository: MidazDeleteSegmentRepository
let mockHttpFetchUtils: { httpMidazAuthFetch: jest.Mock }
beforeEach(() => {
mockHttpFetchUtils = { httpMidazAuthFetch: jest.fn() }
- repository = new MidazDeleteProductRepository(mockHttpFetchUtils as any)
+ repository = new MidazDeleteSegmentRepository(mockHttpFetchUtils as any)
jest.clearAllMocks()
})
- it('should delete a product successfully', async () => {
+ it('should delete a segment successfully', async () => {
const organizationId = '1'
const ledgerId = '1'
- const productId = '1'
+ const segmentId = '1'
mockHttpFetchUtils.httpMidazAuthFetch.mockResolvedValueOnce(undefined)
- await repository.delete(organizationId, ledgerId, productId)
+ await repository.delete(organizationId, ledgerId, segmentId)
expect(mockHttpFetchUtils.httpMidazAuthFetch).toHaveBeenCalledWith({
- url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/products/${productId}`,
+ url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/segments/${segmentId}`,
method: HTTP_METHODS.DELETE
})
})
- it('should handle errors when deleting a product', async () => {
+ it('should handle errors when deleting a segment', async () => {
const organizationId = '1'
const ledgerId = '1'
- const productId = '1'
+ const segmentId = '1'
const error = new Error('Error occurred')
mockHttpFetchUtils.httpMidazAuthFetch.mockRejectedValueOnce(error)
await expect(
- repository.delete(organizationId, ledgerId, productId)
+ repository.delete(organizationId, ledgerId, segmentId)
).rejects.toThrow('Error occurred')
expect(mockHttpFetchUtils.httpMidazAuthFetch).toHaveBeenCalledWith({
- url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/products/${productId}`,
+ url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/segments/${segmentId}`,
method: HTTP_METHODS.DELETE
})
})
diff --git a/src/core/infrastructure/midaz/product/midaz-delete-product-repository.ts b/src/core/infrastructure/midaz/segments/midaz-delete-segment-repository.ts
similarity index 72%
rename from src/core/infrastructure/midaz/product/midaz-delete-product-repository.ts
rename to src/core/infrastructure/midaz/segments/midaz-delete-segment-repository.ts
index bde51c0f..e8effbe6 100644
--- a/src/core/infrastructure/midaz/product/midaz-delete-product-repository.ts
+++ b/src/core/infrastructure/midaz/segments/midaz-delete-segment-repository.ts
@@ -1,10 +1,10 @@
-import { DeleteProductRepository } from '@/core/domain/repositories/products/delete-product-repository'
+import { DeleteSegmentRepository } from '@/core/domain/repositories/segments/delete-segment-repository'
import { HTTP_METHODS, MidazHttpFetchUtils } from '../../utils/http-fetch-utils'
import { inject, injectable } from 'inversify'
import { ContainerTypeMidazHttpFetch } from '../../container-registry/midaz-http-fetch-module'
@injectable()
-export class MidazDeleteProductRepository implements DeleteProductRepository {
+export class MidazDeleteSegmentRepository implements DeleteSegmentRepository {
private baseUrl: string = process.env.MIDAZ_BASE_PATH as string
constructor(
@inject(ContainerTypeMidazHttpFetch.MidazHttpFetchUtils)
@@ -13,9 +13,9 @@ export class MidazDeleteProductRepository implements DeleteProductRepository {
async delete(
organizationId: string,
ledgerId: string,
- productId: string
+ segmentId: string
): Promise {
- const url = `${this.baseUrl}/organizations/${organizationId}/ledgers/${ledgerId}/products/${productId}`
+ const url = `${this.baseUrl}/organizations/${organizationId}/ledgers/${ledgerId}/segments/${segmentId}`
await this.midazHttpFetchUtils.httpMidazAuthFetch({
url,
diff --git a/src/core/infrastructure/midaz/product/midaz-fetch-all-products-repository.test.ts b/src/core/infrastructure/midaz/segments/midaz-fetch-all-segments-repository.test.ts
similarity index 72%
rename from src/core/infrastructure/midaz/product/midaz-fetch-all-products-repository.test.ts
rename to src/core/infrastructure/midaz/segments/midaz-fetch-all-segments-repository.test.ts
index 0c13e9a7..7c0e39c0 100644
--- a/src/core/infrastructure/midaz/product/midaz-fetch-all-products-repository.test.ts
+++ b/src/core/infrastructure/midaz/segments/midaz-fetch-all-segments-repository.test.ts
@@ -1,5 +1,5 @@
-import { MidazFetchAllProductsRepository } from './midaz-fetch-all-products-repository'
-import { ProductEntity } from '@/core/domain/entities/product-entity'
+import { MidazFetchAllSegmentsRepository } from './midaz-fetch-all-segments-repository'
+import { SegmentEntity } from '@/core/domain/entities/segment-entity'
import { PaginationEntity } from '@/core/domain/entities/pagination-entity'
import { HTTP_METHODS } from '../../utils/http-fetch-utils'
@@ -10,32 +10,32 @@ jest.mock('../../utils/http-fetch-utils', () => ({
}
}))
-describe('MidazFetchAllProductsRepository', () => {
- let repository: MidazFetchAllProductsRepository
+describe('MidazFetchAllSegmentsRepository', () => {
+ let repository: MidazFetchAllSegmentsRepository
let mockHttpFetchUtils: { httpMidazAuthFetch: jest.Mock }
beforeEach(() => {
mockHttpFetchUtils = { httpMidazAuthFetch: jest.fn() }
- repository = new MidazFetchAllProductsRepository(mockHttpFetchUtils as any)
+ repository = new MidazFetchAllSegmentsRepository(mockHttpFetchUtils as any)
jest.clearAllMocks()
})
- it('should fetch all products successfully', async () => {
+ it('should fetch all segments successfully', async () => {
const organizationId = '1'
const ledgerId = '1'
const limit = 10
const page = 1
- const response: PaginationEntity = {
+ const response: PaginationEntity = {
items: [
{
id: '1',
- name: 'Test Product',
+ name: 'Test Segment',
status: { code: 'ACTIVE', description: '' },
metadata: {}
},
{
id: '2',
- name: 'Test Product 2',
+ name: 'Test Segment 2',
status: { code: 'ACTIVE', description: '' },
metadata: {}
}
@@ -54,13 +54,13 @@ describe('MidazFetchAllProductsRepository', () => {
)
expect(mockHttpFetchUtils.httpMidazAuthFetch).toHaveBeenCalledWith({
- url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/products?limit=${limit}&page=${page}`,
+ url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/segments?limit=${limit}&page=${page}`,
method: HTTP_METHODS.GET
})
expect(result).toEqual(response)
})
- it('should handle errors when fetching all products', async () => {
+ it('should handle errors when fetching all segments', async () => {
const organizationId = '1'
const ledgerId = '1'
const limit = 10
@@ -74,7 +74,7 @@ describe('MidazFetchAllProductsRepository', () => {
).rejects.toThrow('Error occurred')
expect(mockHttpFetchUtils.httpMidazAuthFetch).toHaveBeenCalledWith({
- url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/products?limit=${limit}&page=${page}`,
+ url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/segments?limit=${limit}&page=${page}`,
method: HTTP_METHODS.GET
})
})
diff --git a/src/core/infrastructure/midaz/product/midaz-fetch-all-products-repository.ts b/src/core/infrastructure/midaz/segments/midaz-fetch-all-segments-repository.ts
similarity index 66%
rename from src/core/infrastructure/midaz/product/midaz-fetch-all-products-repository.ts
rename to src/core/infrastructure/midaz/segments/midaz-fetch-all-segments-repository.ts
index e5fae83a..97658815 100644
--- a/src/core/infrastructure/midaz/product/midaz-fetch-all-products-repository.ts
+++ b/src/core/infrastructure/midaz/segments/midaz-fetch-all-segments-repository.ts
@@ -1,13 +1,13 @@
import { PaginationEntity } from '@/core/domain/entities/pagination-entity'
-import { ProductEntity } from '@/core/domain/entities/product-entity'
-import { FetchAllProductsRepository } from '@/core/domain/repositories/products/fetch-all-products-repository'
+import { SegmentEntity } from '@/core/domain/entities/segment-entity'
+import { FetchAllSegmentsRepository } from '@/core/domain/repositories/segments/fetch-all-segments-repository'
import { HTTP_METHODS, MidazHttpFetchUtils } from '../../utils/http-fetch-utils'
import { inject, injectable } from 'inversify'
import { ContainerTypeMidazHttpFetch } from '../../container-registry/midaz-http-fetch-module'
@injectable()
-export class MidazFetchAllProductsRepository
- implements FetchAllProductsRepository
+export class MidazFetchAllSegmentsRepository
+ implements FetchAllSegmentsRepository
{
private baseUrl: string = process.env.MIDAZ_BASE_PATH as string
constructor(
@@ -19,11 +19,11 @@ export class MidazFetchAllProductsRepository
ledgerId: string,
limit: number,
page: number
- ): Promise> {
- const url = `${this.baseUrl}/organizations/${organizationId}/ledgers/${ledgerId}/products?limit=${limit}&page=${page}`
+ ): Promise> {
+ const url = `${this.baseUrl}/organizations/${organizationId}/ledgers/${ledgerId}/segments?limit=${limit}&page=${page}`
const response = await this.midazHttpFetchUtils.httpMidazAuthFetch<
- PaginationEntity
+ PaginationEntity
>({
url,
method: HTTP_METHODS.GET
diff --git a/src/core/infrastructure/midaz/product/midaz-fetch-product-by-id-repository.test.ts b/src/core/infrastructure/midaz/segments/midaz-fetch-segment-by-id-repository.test.ts
similarity index 63%
rename from src/core/infrastructure/midaz/product/midaz-fetch-product-by-id-repository.test.ts
rename to src/core/infrastructure/midaz/segments/midaz-fetch-segment-by-id-repository.test.ts
index f830a63e..97c341e3 100644
--- a/src/core/infrastructure/midaz/product/midaz-fetch-product-by-id-repository.test.ts
+++ b/src/core/infrastructure/midaz/segments/midaz-fetch-segment-by-id-repository.test.ts
@@ -1,5 +1,5 @@
-import { MidazFetchProductByIdRepository } from './midaz-fetch-product-by-id-repository'
-import { ProductEntity } from '@/core/domain/entities/product-entity'
+import { MidazFetchSegmentByIdRepository } from './midaz-fetch-segment-by-id-repository'
+import { SegmentEntity } from '@/core/domain/entities/segment-entity'
import { HTTP_METHODS } from '../../utils/http-fetch-utils'
jest.mock('../../utils/http-fetch-utils', () => ({
@@ -9,23 +9,23 @@ jest.mock('../../utils/http-fetch-utils', () => ({
}
}))
-describe('MidazFetchProductByIdRepository', () => {
- let repository: MidazFetchProductByIdRepository
+describe('MidazFetchSegmentByIdRepository', () => {
+ let repository: MidazFetchSegmentByIdRepository
let mockHttpFetchUtils: { httpMidazAuthFetch: jest.Mock }
beforeEach(() => {
mockHttpFetchUtils = { httpMidazAuthFetch: jest.fn() }
- repository = new MidazFetchProductByIdRepository(mockHttpFetchUtils as any)
+ repository = new MidazFetchSegmentByIdRepository(mockHttpFetchUtils as any)
jest.clearAllMocks()
})
- it('should fetch a product by id successfully', async () => {
+ it('should fetch a segment by id successfully', async () => {
const organizationId = '1'
const ledgerId = '1'
- const productId = '1'
- const response: ProductEntity = {
+ const segmentId = '1'
+ const response: SegmentEntity = {
id: '1',
- name: 'Test Product',
+ name: 'Test Segment',
status: { code: 'ACTIVE', description: '' },
metadata: {}
}
@@ -35,30 +35,30 @@ describe('MidazFetchProductByIdRepository', () => {
const result = await repository.fetchById(
organizationId,
ledgerId,
- productId
+ segmentId
)
expect(mockHttpFetchUtils.httpMidazAuthFetch).toHaveBeenCalledWith({
- url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/products/${productId}`,
+ url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/segments/${segmentId}`,
method: HTTP_METHODS.GET
})
expect(result).toEqual(response)
})
- it('should handle errors when fetching a product by id', async () => {
+ it('should handle errors when fetching a segment by id', async () => {
const organizationId = '1'
const ledgerId = '1'
- const productId = '1'
+ const segmentId = '1'
const error = new Error('Error occurred')
mockHttpFetchUtils.httpMidazAuthFetch.mockRejectedValueOnce(error)
await expect(
- repository.fetchById(organizationId, ledgerId, productId)
+ repository.fetchById(organizationId, ledgerId, segmentId)
).rejects.toThrow('Error occurred')
expect(mockHttpFetchUtils.httpMidazAuthFetch).toHaveBeenCalledWith({
- url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/products/${productId}`,
+ url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/segments/${segmentId}`,
method: HTTP_METHODS.GET
})
})
diff --git a/src/core/infrastructure/midaz/product/midaz-fetch-product-by-id-repository.ts b/src/core/infrastructure/midaz/segments/midaz-fetch-segment-by-id-repository.ts
similarity index 60%
rename from src/core/infrastructure/midaz/product/midaz-fetch-product-by-id-repository.ts
rename to src/core/infrastructure/midaz/segments/midaz-fetch-segment-by-id-repository.ts
index dbc23bf0..efc75e33 100644
--- a/src/core/infrastructure/midaz/product/midaz-fetch-product-by-id-repository.ts
+++ b/src/core/infrastructure/midaz/segments/midaz-fetch-segment-by-id-repository.ts
@@ -1,12 +1,12 @@
-import { FetchProductByIdRepository } from '@/core/domain/repositories/products/fetch-product-by-id-repository'
+import { FetchSegmentByIdRepository } from '@/core/domain/repositories/segments/fetch-segment-by-id-repository'
import { HTTP_METHODS, MidazHttpFetchUtils } from '../../utils/http-fetch-utils'
-import { ProductEntity } from '@/core/domain/entities/product-entity'
+import { SegmentEntity } from '@/core/domain/entities/segment-entity'
import { injectable, inject } from 'inversify'
import { ContainerTypeMidazHttpFetch } from '../../container-registry/midaz-http-fetch-module'
@injectable()
-export class MidazFetchProductByIdRepository
- implements FetchProductByIdRepository
+export class MidazFetchSegmentByIdRepository
+ implements FetchSegmentByIdRepository
{
private baseUrl: string = process.env.MIDAZ_BASE_PATH as string
@@ -18,12 +18,12 @@ export class MidazFetchProductByIdRepository
async fetchById(
organizationId: string,
ledgerId: string,
- productId: string
- ): Promise {
- const url = `${this.baseUrl}/organizations/${organizationId}/ledgers/${ledgerId}/products/${productId}`
+ segmentId: string
+ ): Promise {
+ const url = `${this.baseUrl}/organizations/${organizationId}/ledgers/${ledgerId}/segments/${segmentId}`
const response =
- await this.midazHttpFetchUtils.httpMidazAuthFetch({
+ await this.midazHttpFetchUtils.httpMidazAuthFetch({
url,
method: HTTP_METHODS.GET
})
diff --git a/src/core/infrastructure/midaz/product/midaz-update-product-repository.test.ts b/src/core/infrastructure/midaz/segments/midaz-update-segment-repository.test.ts
similarity index 56%
rename from src/core/infrastructure/midaz/product/midaz-update-product-repository.test.ts
rename to src/core/infrastructure/midaz/segments/midaz-update-segment-repository.test.ts
index d5f6184a..d9449a6d 100644
--- a/src/core/infrastructure/midaz/product/midaz-update-product-repository.test.ts
+++ b/src/core/infrastructure/midaz/segments/midaz-update-segment-repository.test.ts
@@ -1,5 +1,5 @@
-import { MidazUpdateProductRepository } from './midaz-update-product-repository'
-import { ProductEntity } from '@/core/domain/entities/product-entity'
+import { MidazUpdateSegmentRepository } from './midaz-update-segment-repository'
+import { SegmentEntity } from '@/core/domain/entities/segment-entity'
import { HTTP_METHODS } from '../../utils/http-fetch-utils'
jest.mock('../../utils/http-fetch-utils', () => ({
@@ -9,24 +9,24 @@ jest.mock('../../utils/http-fetch-utils', () => ({
}
}))
-describe('MidazUpdateProductRepository', () => {
- let repository: MidazUpdateProductRepository
+describe('MidazUpdateSegmentRepository', () => {
+ let repository: MidazUpdateSegmentRepository
let mockHttpFetchUtils: { httpMidazAuthFetch: jest.Mock }
beforeEach(() => {
mockHttpFetchUtils = { httpMidazAuthFetch: jest.fn() }
- repository = new MidazUpdateProductRepository(mockHttpFetchUtils as any)
+ repository = new MidazUpdateSegmentRepository(mockHttpFetchUtils as any)
jest.clearAllMocks()
})
- it('should update a product successfully', async () => {
+ it('should update a segment successfully', async () => {
const organizationId = '1'
const ledgerId = '1'
- const productId = '1'
- const productData: Partial = { name: 'Updated Product' }
- const response: ProductEntity = {
- id: productId,
- name: 'Updated Product',
+ const segmentId = '1'
+ const segmentData: Partial = { name: 'Updated Segment' }
+ const response: SegmentEntity = {
+ id: segmentId,
+ name: 'Updated Segment',
status: { code: 'ACTIVE', description: '' },
metadata: {}
}
@@ -36,35 +36,35 @@ describe('MidazUpdateProductRepository', () => {
const result = await repository.update(
organizationId,
ledgerId,
- productId,
- productData
+ segmentId,
+ segmentData
)
expect(mockHttpFetchUtils.httpMidazAuthFetch).toHaveBeenCalledWith({
- url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/products/${productId}`,
+ url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/segments/${segmentId}`,
method: HTTP_METHODS.PATCH,
- body: JSON.stringify(productData)
+ body: JSON.stringify(segmentData)
})
expect(result).toEqual(response)
})
- it('should handle errors when updating a product', async () => {
+ it('should handle errors when updating a segment', async () => {
const organizationId = '1'
const ledgerId = '1'
- const productId = '1'
- const productData: Partial = { name: 'Updated Product' }
+ const segmentId = '1'
+ const segmentData: Partial = { name: 'Updated Segment' }
const error = new Error('Error occurred')
mockHttpFetchUtils.httpMidazAuthFetch.mockRejectedValueOnce(error)
await expect(
- repository.update(organizationId, ledgerId, productId, productData)
+ repository.update(organizationId, ledgerId, segmentId, segmentData)
).rejects.toThrow('Error occurred')
expect(mockHttpFetchUtils.httpMidazAuthFetch).toHaveBeenCalledWith({
- url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/products/${productId}`,
+ url: `${process.env.MIDAZ_BASE_PATH}/organizations/${organizationId}/ledgers/${ledgerId}/segments/${segmentId}`,
method: HTTP_METHODS.PATCH,
- body: JSON.stringify(productData)
+ body: JSON.stringify(segmentData)
})
})
})
diff --git a/src/core/infrastructure/midaz/product/midaz-update-product-repository.ts b/src/core/infrastructure/midaz/segments/midaz-update-segment-repository.ts
similarity index 57%
rename from src/core/infrastructure/midaz/product/midaz-update-product-repository.ts
rename to src/core/infrastructure/midaz/segments/midaz-update-segment-repository.ts
index 98845c73..ffa645d1 100644
--- a/src/core/infrastructure/midaz/product/midaz-update-product-repository.ts
+++ b/src/core/infrastructure/midaz/segments/midaz-update-segment-repository.ts
@@ -1,11 +1,11 @@
-import { ProductEntity } from '@/core/domain/entities/product-entity'
-import { UpdateProductRepository } from '@/core/domain/repositories/products/update-product-repository'
+import { SegmentEntity } from '@/core/domain/entities/segment-entity'
+import { UpdateSegmentRepository } from '@/core/domain/repositories/segments/update-segment-repository'
import { HTTP_METHODS, MidazHttpFetchUtils } from '../../utils/http-fetch-utils'
import { injectable, inject } from 'inversify'
import { ContainerTypeMidazHttpFetch } from '../../container-registry/midaz-http-fetch-module'
@injectable()
-export class MidazUpdateProductRepository implements UpdateProductRepository {
+export class MidazUpdateSegmentRepository implements UpdateSegmentRepository {
private baseUrl: string = process.env.MIDAZ_BASE_PATH as string
constructor(
@@ -16,16 +16,16 @@ export class MidazUpdateProductRepository implements UpdateProductRepository {
async update(
organizationId: string,
ledgerId: string,
- productId: string,
- product: Partial
- ): Promise {
- const url = `${this.baseUrl}/organizations/${organizationId}/ledgers/${ledgerId}/products/${productId}`
+ segmentId: string,
+ segment: Partial
+ ): Promise {
+ const url = `${this.baseUrl}/organizations/${organizationId}/ledgers/${ledgerId}/segments/${segmentId}`
const response =
- await this.midazHttpFetchUtils.httpMidazAuthFetch({
+ await this.midazHttpFetchUtils.httpMidazAuthFetch({
url,
method: HTTP_METHODS.PATCH,
- body: JSON.stringify(product)
+ body: JSON.stringify(segment)
})
return response
diff --git a/src/core/infrastructure/utils/midaz-error-handler.ts b/src/core/infrastructure/utils/midaz-error-handler.ts
index 703bffc0..d6dce144 100644
--- a/src/core/infrastructure/utils/midaz-error-handler.ts
+++ b/src/core/infrastructure/utils/midaz-error-handler.ts
@@ -71,8 +71,8 @@ export async function handleMidazError(
case '0015':
throw new MidazError(
intl.formatMessage({
- id: 'error.midaz.duplicateProductNameError',
- defaultMessage: 'Error Midaz duplicate product name error'
+ id: 'error.midaz.duplicateSegmentNameError',
+ defaultMessage: 'Error Midaz duplicate segment name error'
})
)
diff --git a/src/schema/account.ts b/src/schema/account.ts
index 362f7373..1ee712cf 100644
--- a/src/schema/account.ts
+++ b/src/schema/account.ts
@@ -11,7 +11,7 @@ const assetCode = z.string()
const portfolioId = z.string().nullable().optional()
-const productId = z.string().nullable().optional()
+const segmentId = z.string().nullable().optional()
const type = z.string()
@@ -25,7 +25,7 @@ export const accountSchema = z.object({
entityId,
assetCode,
portfolioId,
- productId,
+ segmentId,
metadata,
type,
allowSending,
diff --git a/src/schema/product.ts b/src/schema/segment.ts
similarity index 71%
rename from src/schema/product.ts
rename to src/schema/segment.ts
index fc830ca7..ee746ca1 100644
--- a/src/schema/product.ts
+++ b/src/schema/segment.ts
@@ -3,4 +3,4 @@ import { metadata } from './metadata'
const name = z.string().min(1).max(255)
-export const product = { name, metadata }
+export const segment = { name, metadata }
diff --git a/src/types/accounts-type.ts b/src/types/accounts-type.ts
index 3dd05966..51c88db2 100644
--- a/src/types/accounts-type.ts
+++ b/src/types/accounts-type.ts
@@ -13,7 +13,7 @@ export type AccountType = {
portfolioId?: string | null
portfolio: Pick
portfolioName?: string
- productId: string
+ segmentId: string
status: {
code: string
description: string