Browse Source

Task/refactor column definitions in AI service (#5834)

* Refactor column definitions in AI service

* Update changelog
pull/5839/merge
Vansh 4 days ago
committed by GitHub
parent
commit
7dc74fe681
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      CHANGELOG.md
  2. 79
      apps/api/src/app/endpoints/ai/ai.service.ts

2
CHANGELOG.md

@ -14,6 +14,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### Changed
- Refactored the generation of the holdings table in the _Copy AI prompt to clipboard for analysis_ action on the analysis page (experimental)
- Refactored the generation of the holdings table in the _Copy portfolio data to clipboard for AI prompt_ action on the analysis page (experimental)
- Improved the language localization for German (`de`) - Improved the language localization for German (`de`)
### Fixed ### Fixed

79
apps/api/src/app/endpoints/ai/ai.service.ts

@ -14,6 +14,27 @@ import type { ColumnDescriptor } from 'tablemark';
@Injectable() @Injectable()
export class AiService { export class AiService {
private static readonly HOLDINGS_TABLE_COLUMN_DEFINITIONS: ({
key:
| 'ALLOCATION_PERCENTAGE'
| 'ASSET_CLASS'
| 'ASSET_SUB_CLASS'
| 'CURRENCY'
| 'NAME'
| 'SYMBOL';
} & ColumnDescriptor)[] = [
{ key: 'NAME', name: 'Name' },
{ key: 'SYMBOL', name: 'Symbol' },
{ key: 'CURRENCY', name: 'Currency' },
{ key: 'ASSET_CLASS', name: 'Asset Class' },
{ key: 'ASSET_SUB_CLASS', name: 'Asset Sub Class' },
{
align: 'right',
key: 'ALLOCATION_PERCENTAGE',
name: 'Allocation in Percentage'
}
];
public constructor( public constructor(
private readonly portfolioService: PortfolioService, private readonly portfolioService: PortfolioService,
private readonly propertyService: PropertyService private readonly propertyService: PropertyService
@ -59,14 +80,10 @@ export class AiService {
userId userId
}); });
const holdingsTableColumns: ColumnDescriptor[] = [ const holdingsTableColumns: ColumnDescriptor[] =
{ name: 'Name' }, AiService.HOLDINGS_TABLE_COLUMN_DEFINITIONS.map(({ align, name }) => {
{ name: 'Symbol' }, return { name, align: align ?? 'left' };
{ name: 'Currency' }, });
{ name: 'Asset Class' },
{ name: 'Asset Sub Class' },
{ align: 'right', name: 'Allocation in Percentage' }
];
const holdingsTableRows = Object.values(holdings) const holdingsTableRows = Object.values(holdings)
.sort((a, b) => { .sort((a, b) => {
@ -78,17 +95,45 @@ export class AiService {
assetClass, assetClass,
assetSubClass, assetSubClass,
currency, currency,
name, name: label,
symbol symbol
}) => { }) => {
return { return AiService.HOLDINGS_TABLE_COLUMN_DEFINITIONS.reduce(
Name: name, (row, { key, name }) => {
Symbol: symbol, switch (key) {
Currency: currency, case 'ALLOCATION_PERCENTAGE':
'Asset Class': assetClass ?? '', row[name] = `${(allocationInPercentage * 100).toFixed(3)}%`;
'Asset Sub Class': assetSubClass ?? '', break;
'Allocation in Percentage': `${(allocationInPercentage * 100).toFixed(3)}%`
}; case 'ASSET_CLASS':
row[name] = assetClass ?? '';
break;
case 'ASSET_SUB_CLASS':
row[name] = assetSubClass ?? '';
break;
case 'CURRENCY':
row[name] = currency;
break;
case 'NAME':
row[name] = label;
break;
case 'SYMBOL':
row[name] = symbol;
break;
default:
row[name] = '';
break;
}
return row;
},
{} as Record<string, string>
);
} }
); );

Loading…
Cancel
Save