Browse Source

Rename Account to account in Order database schema

pull/5052/head
Thomas Kaul 3 days ago
parent
commit
2498d94c0b
  1. 18
      apps/api/src/app/import/import.service.ts
  2. 2
      apps/api/src/app/order/interfaces/activities.interface.ts
  3. 2
      apps/api/src/app/order/order.controller.ts
  4. 17
      apps/api/src/app/order/order.service.ts
  5. 20
      apps/api/src/app/portfolio/portfolio.service.ts
  6. 2
      libs/common/src/lib/types/order-with-account.type.ts
  7. 2
      libs/ui/src/lib/account-balances/account-balances.component.html
  8. 10
      libs/ui/src/lib/activities-table/activities-table.component.html
  9. 2
      libs/ui/src/lib/activities-table/activities-table.component.ts
  10. 2
      prisma/schema.prisma

18
apps/api/src/app/import/import.service.ts

@ -71,14 +71,14 @@ export class ImportService {
]); ]);
const accounts = activities const accounts = activities
.filter(({ Account }) => { .filter(({ account }) => {
return !!Account; return !!account;
}) })
.map(({ Account }) => { .map(({ account }) => {
return Account; return account;
}); });
const Account = this.isUniqueAccount(accounts) ? accounts[0] : undefined; const account = this.isUniqueAccount(accounts) ? accounts[0] : undefined;
return await Promise.all( return await Promise.all(
Object.entries(dividends).map(async ([dateString, { marketPrice }]) => { Object.entries(dividends).map(async ([dateString, { marketPrice }]) => {
@ -92,7 +92,7 @@ export class ImportService {
const date = parseDate(dateString); const date = parseDate(dateString);
const isDuplicate = activities.some((activity) => { const isDuplicate = activities.some((activity) => {
return ( return (
activity.accountId === Account?.id && activity.accountId === account?.id &&
activity.SymbolProfile.currency === assetProfile.currency && activity.SymbolProfile.currency === assetProfile.currency &&
activity.SymbolProfile.dataSource === assetProfile.dataSource && activity.SymbolProfile.dataSource === assetProfile.dataSource &&
isSameSecond(activity.date, date) && isSameSecond(activity.date, date) &&
@ -108,12 +108,12 @@ export class ImportService {
: undefined; : undefined;
return { return {
Account, account,
date, date,
error, error,
quantity, quantity,
value, value,
accountId: Account?.id, accountId: account?.id,
accountUserId: undefined, accountUserId: undefined,
comment: undefined, comment: undefined,
currency: undefined, currency: undefined,
@ -129,7 +129,7 @@ export class ImportService {
unitPrice: marketPrice, unitPrice: marketPrice,
unitPriceInAssetProfileCurrency: marketPrice, unitPriceInAssetProfileCurrency: marketPrice,
updatedAt: undefined, updatedAt: undefined,
userId: Account?.userId, userId: account?.userId,
valueInBaseCurrency: value valueInBaseCurrency: value
}; };
}) })

2
apps/api/src/app/order/interfaces/activities.interface.ts

@ -9,7 +9,7 @@ export interface Activities {
} }
export interface Activity extends Order { export interface Activity extends Order {
Account?: AccountWithPlatform; account?: AccountWithPlatform;
error?: ActivityError; error?: ActivityError;
feeInAssetProfileCurrency: number; feeInAssetProfileCurrency: number;
feeInBaseCurrency: number; feeInBaseCurrency: number;

2
apps/api/src/app/order/order.controller.ts

@ -269,7 +269,7 @@ export class OrderController {
data: { data: {
...data, ...data,
date, date,
Account: { account: {
connect: { connect: {
id_userId: { id: accountId, userId: this.request.user.id } id_userId: { id: accountId, userId: this.request.user.id }
} }

17
apps/api/src/app/order/order.service.ts

@ -100,10 +100,10 @@ export class OrderService {
userId: string; userId: string;
} }
): Promise<Order> { ): Promise<Order> {
let Account: Prisma.AccountCreateNestedOneWithoutActivitiesInput; let account: Prisma.AccountCreateNestedOneWithoutActivitiesInput;
if (data.accountId) { if (data.accountId) {
Account = { account = {
connect: { connect: {
id_userId: { id_userId: {
userId: data.userId, userId: data.userId,
@ -179,7 +179,7 @@ export class OrderService {
const order = await this.prismaService.order.create({ const order = await this.prismaService.order.create({
data: { data: {
...orderData, ...orderData,
Account, account,
isDraft, isDraft,
tags: { tags: {
connect: tags.map(({ id }) => { connect: tags.map(({ id }) => {
@ -475,8 +475,8 @@ export class OrderService {
if (withExcludedAccounts === false) { if (withExcludedAccounts === false) {
where.OR = [ where.OR = [
{ Account: null }, { account: null },
{ Account: { NOT: { isExcluded: true } } } { account: { NOT: { isExcluded: true } } }
]; ];
} }
@ -487,8 +487,7 @@ export class OrderService {
take, take,
where, where,
include: { include: {
// eslint-disable-next-line @typescript-eslint/naming-convention account: {
Account: {
include: { include: {
platform: true platform: true
} }
@ -650,8 +649,8 @@ export class OrderService {
if (['FEE', 'INTEREST', 'ITEM', 'LIABILITY'].includes(data.type)) { if (['FEE', 'INTEREST', 'ITEM', 'LIABILITY'].includes(data.type)) {
delete data.SymbolProfile.connect; delete data.SymbolProfile.connect;
if (data.Account?.connect?.id_userId?.id === null) { if (data.account?.connect?.id_userId?.id === null) {
data.Account = { disconnect: true }; data.account = { disconnect: true };
} }
} else { } else {
delete data.SymbolProfile.update; delete data.SymbolProfile.update;

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

@ -1883,7 +1883,7 @@ export class PortfolioService {
const nonExcludedActivities: Activity[] = []; const nonExcludedActivities: Activity[] = [];
for (const activity of activities) { for (const activity of activities) {
if (activity.Account?.isExcluded) { if (activity.account?.isExcluded) {
excludedActivities.push(activity); excludedActivities.push(activity);
} else { } else {
nonExcludedActivities.push(activity); nonExcludedActivities.push(activity);
@ -2190,7 +2190,7 @@ export class PortfolioService {
} }
for (const { for (const {
Account, account,
quantity, quantity,
SymbolProfile, SymbolProfile,
type type
@ -2201,27 +2201,27 @@ export class PortfolioService {
(portfolioItemsNow[SymbolProfile.symbol]?.marketPriceInBaseCurrency ?? (portfolioItemsNow[SymbolProfile.symbol]?.marketPriceInBaseCurrency ??
0); 0);
if (accounts[Account?.id || UNKNOWN_KEY]?.valueInBaseCurrency) { if (accounts[account?.id || UNKNOWN_KEY]?.valueInBaseCurrency) {
accounts[Account?.id || UNKNOWN_KEY].valueInBaseCurrency += accounts[account?.id || UNKNOWN_KEY].valueInBaseCurrency +=
currentValueOfSymbolInBaseCurrency; currentValueOfSymbolInBaseCurrency;
} else { } else {
accounts[Account?.id || UNKNOWN_KEY] = { accounts[account?.id || UNKNOWN_KEY] = {
balance: 0, balance: 0,
currency: Account?.currency, currency: account?.currency,
name: account.name, name: account.name,
valueInBaseCurrency: currentValueOfSymbolInBaseCurrency valueInBaseCurrency: currentValueOfSymbolInBaseCurrency
}; };
} }
if ( if (
platforms[Account?.platformId || UNKNOWN_KEY]?.valueInBaseCurrency platforms[account?.platformId || UNKNOWN_KEY]?.valueInBaseCurrency
) { ) {
platforms[Account?.platformId || UNKNOWN_KEY].valueInBaseCurrency += platforms[account?.platformId || UNKNOWN_KEY].valueInBaseCurrency +=
currentValueOfSymbolInBaseCurrency; currentValueOfSymbolInBaseCurrency;
} else { } else {
platforms[Account?.platformId || UNKNOWN_KEY] = { platforms[account?.platformId || UNKNOWN_KEY] = {
balance: 0, balance: 0,
currency: Account?.currency, currency: account?.currency,
name: account.platform?.name, name: account.platform?.name,
valueInBaseCurrency: currentValueOfSymbolInBaseCurrency valueInBaseCurrency: currentValueOfSymbolInBaseCurrency
}; };

2
libs/common/src/lib/types/order-with-account.type.ts

@ -3,7 +3,7 @@ import { Order, SymbolProfile, Tag } from '@prisma/client';
import { AccountWithPlatform } from './account-with-platform.type'; import { AccountWithPlatform } from './account-with-platform.type';
export type OrderWithAccount = Order & { export type OrderWithAccount = Order & {
Account?: AccountWithPlatform; account?: AccountWithPlatform;
SymbolProfile?: SymbolProfile; SymbolProfile?: SymbolProfile;
tags?: Tag[]; tags?: Tag[];
}; };

2
libs/ui/src/lib/account-balances/account-balances.component.html

@ -38,7 +38,7 @@
<gf-value <gf-value
[isCurrency]="true" [isCurrency]="true"
[locale]="locale" [locale]="locale"
[unit]="element?.Account?.currency" [unit]="element?.account?.currency"
[value]="element?.value" [value]="element?.value"
/> />
</div> </div>

10
libs/ui/src/lib/activities-table/activities-table.component.html

@ -309,14 +309,14 @@
</th> </th>
<td *matCellDef="let element" class="px-1" mat-cell> <td *matCellDef="let element" class="px-1" mat-cell>
<div class="d-flex"> <div class="d-flex">
@if (element.Account?.platform?.url) { @if (element.account?.platform?.url) {
<gf-entity-logo <gf-entity-logo
class="mr-1" class="mr-1"
[tooltip]="element.Account?.platform?.name" [tooltip]="element.account?.platform?.name"
[url]="element.Account?.platform?.url" [url]="element.account?.platform?.url"
/> />
} }
<span class="d-none d-lg-block">{{ element.Account?.name }}</span> <span class="d-none d-lg-block">{{ element.account?.name }}</span>
</div> </div>
</td> </td>
</ng-container> </ng-container>
@ -468,7 +468,7 @@
[ngClass]="{ [ngClass]="{
'cursor-pointer': 'cursor-pointer':
hasPermissionToOpenDetails && hasPermissionToOpenDetails &&
row.Account?.isExcluded !== true && row.account?.isExcluded !== true &&
row.isDraft === false && row.isDraft === false &&
['BUY', 'DIVIDEND', 'SELL'].includes(row.type) ['BUY', 'DIVIDEND', 'SELL'].includes(row.type)
}" }"

2
libs/ui/src/lib/activities-table/activities-table.component.ts

@ -195,7 +195,7 @@ export class GfActivitiesTableComponent
} }
} else if ( } else if (
this.hasPermissionToOpenDetails && this.hasPermissionToOpenDetails &&
activity.Account?.isExcluded !== true && activity.account?.isExcluded !== true &&
activity.isDraft === false && activity.isDraft === false &&
['BUY', 'DIVIDEND', 'SELL'].includes(activity.type) ['BUY', 'DIVIDEND', 'SELL'].includes(activity.type)
) { ) {

2
prisma/schema.prisma

@ -120,6 +120,7 @@ model MarketData {
} }
model Order { model Order {
account Account? @relation(fields: [accountId, accountUserId], references: [id, userId])
accountId String? accountId String?
accountUserId String? accountUserId String?
comment String? comment String?
@ -137,7 +138,6 @@ model Order {
updatedAt DateTime @updatedAt updatedAt DateTime @updatedAt
user User @relation(fields: [userId], onDelete: Cascade, references: [id]) user User @relation(fields: [userId], onDelete: Cascade, references: [id])
userId String userId String
Account Account? @relation(fields: [accountId, accountUserId], references: [id, userId])
SymbolProfile SymbolProfile @relation(fields: [symbolProfileId], references: [id]) SymbolProfile SymbolProfile @relation(fields: [symbolProfileId], references: [id])
@@index([accountId]) @@index([accountId])

Loading…
Cancel
Save