diff --git a/apps/api/src/app/account-balance/account-balance.controller.ts b/apps/api/src/app/account-balance/account-balance.controller.ts index a853148b5..8d6d2d1c1 100644 --- a/apps/api/src/app/account-balance/account-balance.controller.ts +++ b/apps/api/src/app/account-balance/account-balance.controller.ts @@ -1,3 +1,4 @@ +import { AccountService } from '@ghostfolio/api/app/account/account.service'; import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; import { permissions } from '@ghostfolio/common/permissions'; @@ -25,6 +26,7 @@ import { CreateAccountBalanceDto } from './create-account-balance.dto'; export class AccountBalanceController { public constructor( private readonly accountBalanceService: AccountBalanceService, + private readonly accountService: AccountService, @Inject(REQUEST) private readonly request: RequestWithUser ) {} @@ -56,19 +58,31 @@ export class AccountBalanceController { public async createAccountBalance( @Body() data: CreateAccountBalanceDto ): Promise { - const account = data.Account.connect.id_userId; - const body = { + const account = await this.accountService.account({ + id_userId: { + id: data.accountId, + userId: this.request.user.id + } + }); + + if (!account) { + throw new HttpException( + getReasonPhrase(StatusCodes.FORBIDDEN), + StatusCodes.FORBIDDEN + ); + } + + return this.accountBalanceService.createAccountBalance({ Account: { connect: { id_userId: { id: account.id, - userId: this.request.user.id + userId: account.userId } } }, - value: data.balance, - date: data.date - }; - return this.accountBalanceService.createAccountBalance(body); + date: data.date, + value: data.balance + }); } } diff --git a/apps/api/src/app/account-balance/account-balance.module.ts b/apps/api/src/app/account-balance/account-balance.module.ts index 1fba60fce..02323acc9 100644 --- a/apps/api/src/app/account-balance/account-balance.module.ts +++ b/apps/api/src/app/account-balance/account-balance.module.ts @@ -1,3 +1,4 @@ +import { AccountService } from '@ghostfolio/api/app/account/account.service'; import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module'; import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; @@ -10,6 +11,6 @@ import { AccountBalanceService } from './account-balance.service'; controllers: [AccountBalanceController], exports: [AccountBalanceService], imports: [ExchangeRateDataModule, PrismaModule], - providers: [AccountBalanceService] + providers: [AccountBalanceService, AccountService] }) export class AccountBalanceModule {} diff --git a/apps/api/src/app/account-balance/create-account-balance.dto.ts b/apps/api/src/app/account-balance/create-account-balance.dto.ts index eb516fb3c..28e939b82 100644 --- a/apps/api/src/app/account-balance/create-account-balance.dto.ts +++ b/apps/api/src/app/account-balance/create-account-balance.dto.ts @@ -1,40 +1,8 @@ -import { Type } from 'class-transformer'; -import { - IsISO8601, - IsNotEmptyObject, - IsNumber, - IsObject, - IsString, - ValidateNested -} from 'class-validator'; - -export class Id_UserId { - @IsString() - id: string; -} - -export class Connect { - @IsNotEmptyObject() - @IsObject() - @ValidateNested() - @Type(() => Id_UserId) - id_userId: Id_UserId; -} - -export class Account { - @IsNotEmptyObject() - @IsObject() - @ValidateNested() - @Type(() => Connect) - connect: Connect; -} +import { IsISO8601, IsNumber, IsUUID } from 'class-validator'; export class CreateAccountBalanceDto { - @IsNotEmptyObject() - @IsObject() - @ValidateNested() - @Type(() => Account) - Account: Account; + @IsUUID() + accountId: string; @IsNumber() balance: number; diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts index 448cc77d5..a7ef2d4cf 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts @@ -141,18 +141,17 @@ export class AccountDetailDialog implements OnDestroy, OnInit { } public onAddAccountBalance({ - date, - balance + balance, + date }: { - date: string; balance: number; + date: Date; }) { - const formattedDate = new Date(date); this.dataService .postAccountBalance({ - accountId: this.data.accountId, balance, - date: formattedDate + date, + accountId: this.data.accountId }) .pipe(takeUntil(this.unsubscribeSubject)) .subscribe({ diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index c71aab67a..16d104834 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -42,7 +42,11 @@ import { translate } from '@ghostfolio/ui/i18n'; import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { SortDirection } from '@angular/material/sort'; -import { DataSource, Order as OrderModel } from '@prisma/client'; +import { + AccountBalance, + DataSource, + Order as OrderModel +} from '@prisma/client'; import { format, parseISO } from 'date-fns'; import { cloneDeep, groupBy, isNumber } from 'lodash'; import { Observable } from 'rxjs'; @@ -612,24 +616,18 @@ export class DataService { } public postAccountBalance({ - date, accountId, - balance + balance, + date }: { - date: Date; accountId: string; balance: number; + date: Date; }) { - return this.http.post(`/api/v1/account-balance`, { - Account: { - connect: { - id_userId: { - id: accountId - } - } - }, - date, - balance: balance + return this.http.post(`/api/v1/account-balance`, { + accountId, + balance, + date }); } diff --git a/libs/ui/src/lib/account-balances/account-balances.component.html b/libs/ui/src/lib/account-balances/account-balances.component.html index a05c73828..0cfa4a5da 100644 --- a/libs/ui/src/lib/account-balances/account-balances.component.html +++ b/libs/ui/src/lib/account-balances/account-balances.component.html @@ -62,6 +62,7 @@ } -