Browse Source

Refactoring

pull/1926/head
Thomas 2 years ago
parent
commit
8a3da89130
  1. 51
      apps/api/src/app/account/account.service.ts
  2. 2
      apps/api/src/app/order/interfaces/activities.interface.ts
  3. 34
      apps/api/src/app/order/order.service.ts
  4. 3
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
  5. 6
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
  6. 4
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.scss

51
apps/api/src/app/account/account.service.ts

@ -173,31 +173,44 @@ export class AccountService {
});
}
public async updateAccountBalance(
accountId: string,
userId: string,
currency: string,
amount: number
): Promise<Account> {
const account = await this.account({
id_userId: {
id: accountId,
public async updateAccountBalance({
accountId,
amount,
currency,
date,
userId
}: {
accountId: string;
amount: number;
currency: string;
date: Date;
userId: string;
}): Promise<Account> {
const { balance, currency: currencyOfAccount } = await this.account({
id_userId: {
userId,
id: accountId
}
});
const data: Prisma.AccountUpdateInput = {
balance: account.balance + amount
};
const where: Prisma.AccountWhereUniqueInput = {
const amountInCurrencyOfAccount =
await this.exchangeRateDataService.toCurrencyAtDate(
amount,
currency,
currencyOfAccount,
date
);
return this.prismaService.account.update({
data: {
balance: new Big(balance).plus(amountInCurrencyOfAccount).toNumber()
},
where: {
id_userId: {
id: accountId,
userId
userId,
id: accountId
}
}
};
return this.prismaService.account.update({
data,
where
});
}
}

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

@ -6,7 +6,7 @@ export interface Activities {
export interface Activity extends OrderWithAccount {
feeInBaseCurrency: number;
updateAccountBalance?: boolean;
value: number;
valueInBaseCurrency: number;
updateAccountBalance?: boolean;
}

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

@ -73,8 +73,8 @@ export class OrderService {
dataSource?: DataSource;
symbol?: string;
tags?: Tag[];
updateAccountBalance?: boolean;
userId: string;
updateAccountBalance: boolean;
}
): Promise<Order> {
let Account;
@ -90,12 +90,16 @@ export class OrderService {
};
}
const accountId = data.accountId;
let currency = data.currency;
const tags = data.tags ?? [];
const updateAccountBalance = data.updateAccountBalance ?? false;
const userId = data.userId;
if (data.type === 'ITEM') {
const assetClass = data.assetClass;
const assetSubClass = data.assetSubClass;
const currency = data.SymbolProfile.connectOrCreate.create.currency;
currency = data.SymbolProfile.connectOrCreate.create.currency;
const dataSource: DataSource = 'MANUAL';
const id = uuidv4();
const name = data.SymbolProfile.connectOrCreate.create.symbol;
@ -138,8 +142,6 @@ export class OrderService {
]);
}
const originalData = Object.assign({}, data);
delete data.accountId;
delete data.assetClass;
delete data.assetSubClass;
@ -152,8 +154,8 @@ export class OrderService {
delete data.dataSource;
delete data.symbol;
delete data.tags;
delete data.userId;
delete data.updateAccountBalance;
delete data.userId;
const orderData: Prisma.OrderCreateInput = data;
@ -170,19 +172,23 @@ export class OrderService {
}
});
if (originalData.updateAccountBalance) {
let amount = data.unitPrice * data.quantity + data.fee;
if (updateAccountBalance === true) {
let amount = new Big(data.unitPrice)
.mul(data.quantity)
.plus(data.fee)
.toNumber();
if (data.type === 'BUY') {
amount = amount * -1;
amount = new Big(amount).mul(-1).toNumber();
}
await this.accountService.updateAccountBalance(
originalData.accountId,
originalData.userId,
originalData.currency,
amount
);
await this.accountService.updateAccountBalance({
accountId,
amount,
currency,
userId,
date: data.date as Date
});
}
return order;

3
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts

@ -298,6 +298,8 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
Validators.required
);
this.activityForm.controls['searchSymbol'].updateValueAndValidity();
this.activityForm.controls['updateAccountBalance'].disable();
this.activityForm.controls['updateAccountBalance'].setValue(false);
} else {
this.activityForm.controls['accountId'].setValidators(
Validators.required
@ -315,6 +317,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
Validators.required
);
this.activityForm.controls['searchSymbol'].updateValueAndValidity();
this.activityForm.controls['updateAccountBalance'].enable();
}
this.changeDetectorRef.markForCheck();

6
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html

@ -19,7 +19,7 @@
</mat-form-field>
</div>
<div>
<mat-form-field appearance="outline" class="w-100">
<mat-form-field appearance="outline" class="mb-1 without-hint w-100">
<mat-label i18n>Account</mat-label>
<mat-select formControlName="accountId">
<mat-option
@ -32,9 +32,9 @@
</mat-select>
</mat-form-field>
</div>
<div class="mb-3 pl-1 w-100 checkbox-wrapper">
<div class="mb-3">
<mat-checkbox color="primary" formControlName="updateAccountBalance" i18n
>Update cash balance</mat-checkbox
>Update Cash Balance</mat-checkbox
>
</div>
<div

4
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.scss

@ -16,10 +16,6 @@
}
}
}
.checkbox-wrapper {
margin-top: -10px;
}
}
:host-context(.is-dark-theme) {

Loading…
Cancel
Save