Skip to content

Commit

Permalink
Merge pull request #34 from LerianStudio/feature/mapper-refactor
Browse files Browse the repository at this point in the history
Refactored Mappers
  • Loading branch information
caioaletroca authored Nov 14, 2024
2 parents a46fc52 + 0bcb6ec commit 09f0f36
Show file tree
Hide file tree
Showing 45 changed files with 299 additions and 500 deletions.
13 changes: 3 additions & 10 deletions locales/extracted/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,8 @@
"ledgers.toast.copyId": "The id has been copied to your clipboard.",
"ledgers.toast.create.error": "Error creating Ledger",
"ledgers.toast.create.success": "Ledger {ledgerName} created successfully",
"ledgers.toast.delete.error": "Error deleting Ledger",
"ledgers.toast.delete.success": "Ledger successfully deleted",
"ledgers.toast.update.error": "Error updating Ledger",
"ledgers.toast.update.success": "Ledger changes saved successfully",
"notFound.backToHome": "Back to Home",
Expand Down Expand Up @@ -238,15 +240,6 @@
"settingsDropdown.security": "Security",
"settingsDropdown.settings": "Settings",
"settingsDropdown.system": "System",
"sheetCreate.button": "",
"sheetCreate.description": "",
"sheetCreate.title": "",
"sheetEdit.button": "",
"sheetEdit.description": "",
"sheetEdit.title": "",
"sheetView.button": "",
"sheetView.description": "",
"sheetView.title": "",
"sideBar.accountHolders.accounts": "Accounts",
"sideBar.accountHolders.portfolios": "Portfolios",
"sideBar.accountHolders.products": "Products",
Expand All @@ -265,4 +258,4 @@
"signIn.placeholderPassword": "******",
"signIn.titleLogin": "Welcome back!",
"signIn.toast.error": "Invalid credentials."
}
}
15 changes: 4 additions & 11 deletions locales/extracted/pt.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,15 +60,6 @@
"header.userDropdown.support": "Suporte",
"settingsDialog.description": "Faça as alterações desejadas e clique em “Salvar” quando finalizar.",
"settingsDialog.title": "Configurações",
"sheetCreate.button": "",
"sheetCreate.description": "",
"sheetCreate.title": "",
"sheetEdit.button": "",
"sheetEdit.description": "",
"sheetEdit.title": "",
"sheetView.button": "",
"sheetView.description": "",
"sheetView.title": "",
"sideBar.accountHolders.accounts": "Contas",
"sideBar.accountHolders.portfolios": "Portfólios",
"sideBar.accountHolders.products": "Produtos",
Expand Down Expand Up @@ -264,5 +255,7 @@
"ledgers.toast.create.error": "Erro ao criar o Ledger",
"ledgers.toast.create.success": "Ledger {ledgerName} criado com sucesso",
"ledgers.toast.update.error": "Erro ao atualizar o Ledger",
"ledgers.toast.update.success": "Alterações do Ledger salvas com sucesso"
}
"ledgers.toast.update.success": "Alterações do Ledger salvas com sucesso",
"ledgers.toast.delete.error": "Erro ao excluir o ledger",
"ledgers.toast.delete.success": "Ledger excluido com sucesso"
}
10 changes: 8 additions & 2 deletions scripts/i18n-extract.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { extract } from '@formatjs/cli-lib'
import { glob } from 'glob'
import { intlConfig } from '../intl.config'
import { mkdir, readFile, writeFile } from 'fs/promises'
import { mkdir, open, readFile, writeFile } from 'fs/promises'
import path from 'path'
import { existsSync } from 'fs'
import { omit, mapValues } from 'lodash'
Expand Down Expand Up @@ -79,7 +79,13 @@ async function extractLocale(locale: string, data: string) {
}

// Output into a file
await writeFile(localePath, output, 'utf-8')
try {
const fd = await open(localePath, 'w')

await writeFile(fd, output, 'utf-8')
} catch (e) {
console.error(`Error writing file ${localePath}: ${(e as Error).message}`)
}
}

async function main() {
Expand Down
2 changes: 1 addition & 1 deletion src/core/application/dto/create-ledger-dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ import { StatusDto } from './status.dto'
export interface CreateLedgerDto {
name: string
status: StatusDto
metadata: Record<string, string> | null
metadata: Record<string, any>
}
2 changes: 1 addition & 1 deletion src/core/application/dto/update-ledger-dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ import { StatusDto } from './status.dto'
export interface UpdateLedgerDto {
name?: string
status?: StatusDto
metadata?: Record<string, string> | null
metadata?: Record<string, any>
}
12 changes: 2 additions & 10 deletions src/core/application/mappers/account-mapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
UpdateAccountDto
} from '../dto/account-dto'
import { PaginationEntity } from '@/core/domain/entities/pagination-entity'
import { PaginationMapper } from './pagination-mapper'

export class AccountMapper {
public static toDto(account: AccountEntity): AccountResponseDto {
Expand Down Expand Up @@ -50,15 +51,6 @@ export class AccountMapper {
static toPaginationResponseDto(
result: PaginationEntity<AccountEntity>
): PaginationEntity<AccountResponseDto> {
const entityDto =
result.items && result.items !== null
? result.items.map(AccountMapper.toDto)
: []

return {
items: entityDto,
limit: result.limit,
page: result.page
}
return PaginationMapper.toResponseDto(result, AccountMapper.toDto)
}
}
63 changes: 32 additions & 31 deletions src/core/application/mappers/asset-mapper.ts
Original file line number Diff line number Diff line change
@@ -1,41 +1,42 @@
import { AssetEntity } from '@/core/domain/entities/asset-entity'
import { AssetResponseDto } from '../dto/asset-response-dto'
import { CreateAssetDto } from '../dto/create-asset-dto'
import { UpdateAssetDto } from '../dto/update-asset-dto'
import { PaginationEntity } from '@/core/domain/entities/pagination-entity'
import { PaginationMapper } from './pagination-mapper'

export function assetEntityToDto(asset: AssetEntity): AssetResponseDto {
return {
id: asset.id!,
organizationId: asset.organizationId!,
ledgerId: asset.ledgerId!,
name: asset.name,
type: asset.type,
code: asset.code,
status: {
...asset.status,
description: asset.status.description ?? ''
},
metadata: asset.metadata,
createdAt: asset.createdAt!,
updatedAt: asset.updatedAt!,
deletedAt: asset.deletedAt!
export class AssetMapper {
public static toDomain(dto: CreateAssetDto): AssetEntity {
return {
name: dto.name!,
type: dto.type!,
code: dto.code!,
status: dto.status!,
metadata: dto.metadata!
}
}
}

export function assetDtoToEntity(dto: CreateAssetDto): AssetEntity {
return {
name: dto.name,
type: dto.type,
code: dto.code,
status: dto.status,
metadata: dto.metadata
public static toResponseDto(entity: AssetEntity): AssetResponseDto {
return {
id: entity.id!,
organizationId: entity.organizationId!,
ledgerId: entity.ledgerId!,
name: entity.name,
type: entity.type,
code: entity.code,
status: {
...entity.status,
description: entity.status.description ?? ''
},
metadata: entity.metadata,
createdAt: entity.createdAt!,
updatedAt: entity.updatedAt!,
deletedAt: entity.deletedAt!
}
}
}

export function assetUpdateDtoToEntity(
dto: Partial<UpdateAssetDto>
): Partial<AssetEntity> {
return {
...dto
public static toPaginationResponseDto(
result: PaginationEntity<AssetEntity>
): PaginationEntity<AssetResponseDto> {
return PaginationMapper.toResponseDto(result, AssetMapper.toResponseDto)
}
}
55 changes: 30 additions & 25 deletions src/core/application/mappers/ledger-mapper.ts
Original file line number Diff line number Diff line change
@@ -1,35 +1,40 @@
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 { PaginationEntity } from '@/core/domain/entities/pagination-entity'
import { PaginationMapper } from './pagination-mapper'

export function ledgerDtoToEntity(dto: CreateLedgerDto): LedgerEntity {
return {
name: dto.name,
status: dto.status,
metadata: dto.metadata
export class LedgerMapper {
public static toDomain(
dto: CreateLedgerDto | UpdateProductDto
): LedgerEntity {
return {
name: dto.name!,
status: dto.status!,
metadata: dto.metadata!
}
}
}

export function ledgerEntityToDto(entity: LedgerEntity): LedgerResponseDto {
return {
id: entity.id!,
organizationId: entity.organizationId!,
name: entity.name,
status: {
code: entity.status.code,
description: entity.status.description ?? ''
},
metadata: entity.metadata ?? {},
createdAt: entity.createdAt!,
updatedAt: entity.updatedAt!,
deletedAt: entity.deletedAt!
public static toResponseDto(ledger: LedgerEntity): LedgerResponseDto {
return {
id: ledger.id!,
organizationId: ledger.organizationId!,
name: ledger.name,
status: {
code: ledger.status.code,
description: ledger.status.description ?? ''
},
metadata: ledger.metadata ?? {},
createdAt: ledger.createdAt!,
updatedAt: ledger.updatedAt!,
deletedAt: ledger.deletedAt!
}
}
}

export function ledgerUpdateDtoToEntity(
dto: Partial<CreateLedgerDto>
): Partial<LedgerEntity> {
return {
...dto
public static toPaginationResponseDto(
result: PaginationEntity<LedgerEntity>
): PaginationEntity<LedgerResponseDto> {
return PaginationMapper.toResponseDto(result, LedgerMapper.toResponseDto)
}
}
76 changes: 39 additions & 37 deletions src/core/application/mappers/organization-mapper.ts
Original file line number Diff line number Diff line change
@@ -1,47 +1,49 @@
import { OrganizationEntity } from '@/core/domain/entities/organization-entity'
import { CreateOrganizationDto } from '../dto/create-organization-dto'
import { OrganizationResponseDto } from '../dto/organization-response-dto'
import { UpdateOrganizationDto } from '../dto/update-organization-dto'
import { PaginationMapper } from './pagination-mapper'
import { PaginationEntity } from '@/core/domain/entities/pagination-entity'

export function organizationDtoToEntity(
dto: CreateOrganizationDto
): OrganizationEntity {
return {
legalName: dto.legalName,
parentOrganizationId: dto.parentOrganizationId,
doingBusinessAs: dto.doingBusinessAs,
legalDocument: dto.legalDocument,
address: dto.address,
metadata: dto.metadata,
status: dto.status
export class OrganizationMapper {
public static toDomain(dto: CreateOrganizationDto): OrganizationEntity {
return {
legalName: dto.legalName!,
parentOrganizationId: dto.parentOrganizationId,
doingBusinessAs: dto.doingBusinessAs!,
legalDocument: dto.legalDocument!,
address: dto.address!,
metadata: dto.metadata!,
status: dto.status!
}
}
}

export function organizationEntityToDto(
entity: OrganizationEntity
): OrganizationResponseDto {
return {
id: entity.id!,
legalName: entity.legalName,
parentOrganizationId: entity.parentOrganizationId,
doingBusinessAs: entity.doingBusinessAs,
legalDocument: entity.legalDocument,
address: entity.address,
status: {
code: entity.status.code,
description: entity.status.description ?? ''
},
metadata: entity.metadata ?? {},
createdAt: entity.createdAt!,
updatedAt: entity.updatedAt!,
deletedAt: entity.deletedAt
public static toResponseDto(
entity: OrganizationEntity
): OrganizationResponseDto {
return {
id: entity.id!,
legalName: entity.legalName,
parentOrganizationId: entity.parentOrganizationId!,
doingBusinessAs: entity.doingBusinessAs,
legalDocument: entity.legalDocument,
address: entity.address,
status: {
code: entity.status.code,
description: entity.status.description ?? ''
},
metadata: entity.metadata ?? {},
createdAt: entity.createdAt!,
updatedAt: entity.updatedAt!,
deletedAt: entity.deletedAt!
}
}
}

export function organizationUpdateDtoToEntity(
dto: Partial<UpdateOrganizationDto>
): Partial<OrganizationEntity> {
return {
...dto
public static toPaginationResponseDto(
result: PaginationEntity<OrganizationEntity>
): PaginationEntity<OrganizationResponseDto> {
return PaginationMapper.toResponseDto(
result,
OrganizationMapper.toResponseDto
)
}
}
27 changes: 16 additions & 11 deletions src/core/application/mappers/pagination-mapper.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
import { PaginationEntity } from '@/core/domain/entities/pagination-entity'
import { PaginationDto } from '../dto/pagination-dto'

// export async function paginationEntityToDto<T>(
// paginationEntity: PaginationEntity<T>,
// mapperItem = (item: T) => Promise<T>
// ): Promise<PaginationDto<T>> {
export class PaginationMapper {
static toResponseDto<T, R = T>(
paginationEntity: PaginationEntity<T>,
mapper = (item: T) => item as unknown as R
): PaginationDto<R> {
const items =
paginationEntity.items && paginationEntity.items !== null
? paginationEntity.items.map(mapper)
: []

// const items = paginationEntity.items.map(mapperItem)
// return {
// items: items,
// limit: paginationEntity.limit,
// page: paginationEntity.page
// }
// }
return {
items: items,
limit: paginationEntity.limit,
page: paginationEntity.page
}
}
}
Loading

0 comments on commit 09f0f36

Please sign in to comment.