Browse Source

Refactoring

pull/7146/head
Thomas Kaul 3 weeks ago
parent
commit
2f6c4f7ffb
  1. 9
      apps/api/src/app/endpoints/public/public.controller.ts
  2. 110
      apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts
  3. 2
      apps/client/src/app/components/user-account-access/user-account-access.component.ts
  4. 5
      libs/common/src/lib/interfaces/access-settings.interface.ts
  5. 6
      libs/common/src/lib/interfaces/access.interface.ts
  6. 3
      libs/common/src/lib/interfaces/index.ts

9
apps/api/src/app/endpoints/public/public.controller.ts

@ -69,8 +69,7 @@ export class PublicController {
hasDetails = user.subscription.type === SubscriptionType.Premium;
}
const { filters: portfolioFilters = [] } = (access.settings ??
{}) as AccessSettings;
const { filters } = (access.settings ?? {}) as AccessSettings;
const [
{ createdAt, holdings, markets },
@ -79,7 +78,7 @@ export class PublicController {
{ performance: performanceYtd }
] = await Promise.all([
this.portfolioService.getDetails({
filters: portfolioFilters.length > 0 ? portfolioFilters : undefined,
filters,
impersonationId: access.userId,
userId: user.id,
withMarkets: true
@ -87,7 +86,7 @@ export class PublicController {
...['1d', 'max', 'ytd'].map((dateRange) => {
return this.portfolioService.getPerformance({
dateRange,
filters: portfolioFilters.length > 0 ? portfolioFilters : undefined,
filters,
impersonationId: undefined,
userId: user.id
});
@ -95,7 +94,7 @@ export class PublicController {
]);
const { activities } = await this.activitiesService.getActivities({
filters: portfolioFilters.length > 0 ? portfolioFilters : undefined,
filters,
sortColumn: 'date',
sortDirection: 'desc',
take: 10,

110
apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts

@ -259,58 +259,6 @@ export class GfCreateOrUpdateAccessDialogComponent implements OnInit {
});
}
private updateFiltersFormControl(existingFilters: Filter[] | undefined) {
if (!existingFilters?.length) {
return;
}
const filterValue: Partial<PortfolioFilterFormValue> = {};
const accountFilter = existingFilters.find(({ type }) => {
return type === 'ACCOUNT';
});
if (accountFilter && this.accounts.length > 0) {
filterValue.account = accountFilter.id;
}
const assetClassFilter = existingFilters.find(({ type }) => {
return type === 'ASSET_CLASS';
});
if (assetClassFilter && this.assetClasses.length > 0) {
filterValue.assetClass = assetClassFilter.id;
}
const dataSourceFilter = existingFilters.find(({ type }) => {
return type === 'DATA_SOURCE';
});
const symbolFilter = existingFilters.find(({ type }) => {
return type === 'SYMBOL';
});
if (dataSourceFilter && symbolFilter && this.holdings.length > 0) {
const holding = this.holdings.find(({ assetProfile }) => {
return (
assetProfile.dataSource === dataSourceFilter.id &&
assetProfile.symbol === symbolFilter.id
);
});
if (holding) {
filterValue.holding = holding;
}
}
const tagFilter = existingFilters.find(({ type }) => {
return type === 'TAG';
});
if (tagFilter && this.tags.length > 0) {
filterValue.tag = tagFilter.id;
}
if (Object.keys(filterValue).length > 0) {
this.accessForm.get('filters')?.setValue(filterValue);
this.changeDetectorRef.markForCheck();
}
}
private async createAccess() {
const filters = this.buildFilters();
@ -395,4 +343,62 @@ export class GfCreateOrUpdateAccessDialogComponent implements OnInit {
console.error(error);
}
}
private updateFiltersFormControl(existingFilters: Filter[] | undefined) {
if (!existingFilters?.length) {
return;
}
const filterValue: Partial<PortfolioFilterFormValue> = {};
const accountFilter = existingFilters.find(({ type }) => {
return type === 'ACCOUNT';
});
if (accountFilter && this.accounts.length > 0) {
filterValue.account = accountFilter.id;
}
const assetClassFilter = existingFilters.find(({ type }) => {
return type === 'ASSET_CLASS';
});
if (assetClassFilter && this.assetClasses.length > 0) {
filterValue.assetClass = assetClassFilter.id;
}
const dataSourceFilter = existingFilters.find(({ type }) => {
return type === 'DATA_SOURCE';
});
const symbolFilter = existingFilters.find(({ type }) => {
return type === 'SYMBOL';
});
if (dataSourceFilter && symbolFilter && this.holdings.length > 0) {
const holding = this.holdings.find(({ assetProfile }) => {
return (
assetProfile.dataSource === dataSourceFilter.id &&
assetProfile.symbol === symbolFilter.id
);
});
if (holding) {
filterValue.holding = holding;
}
}
const tagFilter = existingFilters.find(({ type }) => {
return type === 'TAG';
});
if (tagFilter && this.tags.length > 0) {
filterValue.tag = tagFilter.id;
}
if (Object.keys(filterValue).length > 0) {
this.accessForm.get('filters')?.setValue(filterValue);
this.changeDetectorRef.markForCheck();
}
}
}

2
apps/client/src/app/components/user-account-access/user-account-access.component.ts

@ -128,7 +128,7 @@ export class GfUserAccountAccessComponent implements OnInit {
if (params['createDialog']) {
this.openCreateAccessDialog();
} else if (params['editDialog'] && params['accessId']) {
this.openUpdateAccessDialog(params['accessId'] as string);
this.openUpdateAccessDialog(params['accessId']);
}
});

5
libs/common/src/lib/interfaces/access-settings.interface.ts

@ -0,0 +1,5 @@
import { Filter } from './filter.interface';
export interface AccessSettings {
filters?: Filter[];
}

6
libs/common/src/lib/interfaces/access.interface.ts

@ -2,11 +2,7 @@ import { AccessType } from '@ghostfolio/common/types';
import { AccessPermission } from '@prisma/client';
import { Filter } from './filter.interface';
export interface AccessSettings {
filters?: Filter[];
}
import { AccessSettings } from './access-settings.interface';
export interface Access {
alias?: string;

3
libs/common/src/lib/interfaces/index.ts

@ -1,4 +1,5 @@
import type { Access, AccessSettings } from './access.interface';
import type { AccessSettings } from './access-settings.interface';
import type { Access } from './access.interface';
import type { AccountBalance } from './account-balance.interface';
import type { Activity, ActivityError } from './activities.interface';
import type { AdminData } from './admin-data.interface';

Loading…
Cancel
Save