Browse Source

Extend accounts endpoint by accounts, assetClasses and tags filters

pull/7748/head
Thomas Kaul 13 hours ago
parent
commit
bb3ae9be1d
  1. 14
      apps/api/src/app/portfolio/portfolio.service.spec.ts
  2. 44
      apps/api/src/app/portfolio/portfolio.service.ts

14
apps/api/src/app/portfolio/portfolio.service.spec.ts

@ -118,10 +118,12 @@ describe('PortfolioService', () => {
describe('getAccounts', () => { describe('getAccounts', () => {
const tagId = 'd6bf8b4a-8ef9-4b3f-9e2c-0a1b2c3d4e5f'; const tagId = 'd6bf8b4a-8ef9-4b3f-9e2c-0a1b2c3d4e5f';
const whereTagsOfActivity = { some: { OR: [{ id: tagId }] } };
const whereActivityOfTag = { const whereActivityOfTag = {
OR: [ OR: [
{ tags: { some: { OR: [{ id: tagId }] } } }, { account: { tags: { some: { OR: [{ tagId }] } } } },
{ account: { tags: { some: { OR: [{ tagId }] } } } } { tags: whereTagsOfActivity }
] ]
}; };
@ -184,8 +186,8 @@ describe('PortfolioService', () => {
expect(where.AND).toEqual([ expect(where.AND).toEqual([
{ {
OR: [ OR: [
{ tags: { some: { OR: [{ tagId }] } } }, { activities: { some: { tags: whereTagsOfActivity } } },
{ activities: { some: whereActivityOfTag } } { tags: { some: { OR: [{ tagId }] } } }
] ]
} }
]); ]);
@ -234,8 +236,8 @@ describe('PortfolioService', () => {
{ activities: { some: whereActivityOfAssetClass } }, { activities: { some: whereActivityOfAssetClass } },
{ {
OR: [ OR: [
{ tags: { some: { OR: [{ tagId }] } } }, { activities: { some: { tags: whereTagsOfActivity } } },
{ activities: { some: whereActivityOfTag } } { tags: { some: { OR: [{ tagId }] } } }
] ]
} }
]); ]);

44
apps/api/src/app/portfolio/portfolio.service.ts

@ -143,7 +143,7 @@ export class PortfolioService {
const where: Prisma.AccountWhereInput = { userId }; const where: Prisma.AccountWhereInput = { userId };
const { const {
ACCOUNT: [filterByAccount] = [], ACCOUNT: filtersByAccount = [],
ASSET_CLASS: filtersByAssetClass = [], ASSET_CLASS: filtersByAssetClass = [],
DATA_SOURCE: [filterByDataSource] = [], DATA_SOURCE: [filterByDataSource] = [],
SYMBOL: [filterBySymbol] = [], SYMBOL: [filterBySymbol] = [],
@ -152,24 +152,28 @@ export class PortfolioService {
return type; return type;
}); });
if (filterByAccount) { if (filtersByAccount.length > 0) {
where.id = filterByAccount.id; where.id = {
in: filtersByAccount.map(({ id }) => {
return id;
})
};
} }
const whereAccountConditions: Prisma.AccountWhereInput[] = []; const whereAccountConditions: Prisma.AccountWhereInput[] = [];
const whereActivityConditions: Prisma.OrderWhereInput[] = []; const whereActivityConditions: Prisma.OrderWhereInput[] = [];
if (filtersByAssetClass.length > 0) { if (filtersByAssetClass.length > 0) {
const whereAssetClassConditions = filtersByAssetClass.map(({ id }) => {
return { assetClass: AssetClass[id] };
});
const whereActivityOfAssetClass: Prisma.OrderWhereInput = { const whereActivityOfAssetClass: Prisma.OrderWhereInput = {
SymbolProfile: { SymbolProfile: {
OR: [ OR: [
{ {
AND: [ AND: [
{ { OR: whereAssetClassConditions },
OR: filtersByAssetClass.map(({ id }) => {
return { assetClass: AssetClass[id] };
})
},
{ {
OR: [ OR: [
{ assetProfileOverrides: { is: null } }, { assetProfileOverrides: { is: null } },
@ -179,11 +183,7 @@ export class PortfolioService {
] ]
}, },
{ {
assetProfileOverrides: { assetProfileOverrides: { OR: whereAssetClassConditions }
OR: filtersByAssetClass.map(({ id }) => {
return { assetClass: AssetClass[id] };
})
}
} }
] ]
} }
@ -222,25 +222,25 @@ export class PortfolioService {
} }
}; };
const whereActivityOfTag: Prisma.OrderWhereInput = { const whereTagsOfActivity: Prisma.TagListRelationFilter = {
OR: [
{
tags: {
some: { some: {
OR: filtersByTag.map(({ id }) => { OR: filtersByTag.map(({ id }) => {
return { id }; return { id };
}) })
} }
} };
},
{ account: { tags: whereTagsOfAccount } } const whereActivityOfTag: Prisma.OrderWhereInput = {
OR: [
{ account: { tags: whereTagsOfAccount } },
{ tags: whereTagsOfActivity }
] ]
}; };
whereAccountConditions.push({ whereAccountConditions.push({
OR: [ OR: [
{ tags: whereTagsOfAccount }, { activities: { some: { tags: whereTagsOfActivity } } },
{ activities: { some: whereActivityOfTag } } { tags: whereTagsOfAccount }
] ]
}); });

Loading…
Cancel
Save