Browse Source

Add Data validation on server, several cleanups on client

pull/3260/head
Sonlis 1 year ago
committed by Thomas Kaul
parent
commit
3cd8f09763
  1. 15
      apps/api/src/app/account-balance/account-balance.controller.ts
  2. 44
      apps/api/src/app/account-balance/create-account-balance.dto.ts
  3. 4
      apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
  4. 10
      apps/client/src/app/services/data.service.ts
  5. 4
      libs/ui/src/lib/account-balances/account-balances.component.ts

15
apps/api/src/app/account-balance/account-balance.controller.ts

@ -19,6 +19,7 @@ import { AccountBalance } from '@prisma/client';
import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { StatusCodes, getReasonPhrase } from 'http-status-codes';
import { AccountBalanceService } from './account-balance.service'; import { AccountBalanceService } from './account-balance.service';
import { CreateAccountBalanceDto } from './create-account-balance.dto';
@Controller('account-balance') @Controller('account-balance')
export class AccountBalanceController { export class AccountBalanceController {
@ -53,21 +54,21 @@ export class AccountBalanceController {
@Post() @Post()
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async createAccountBalance( public async createAccountBalance(
@Body() body: any @Body() data: CreateAccountBalanceDto
): Promise<AccountBalance> { ): Promise<AccountBalance> {
const account = body.Account.connect.id_userId; const account = data.Account.connect.id_userId;
const data = { const body = {
Account: { Account: {
connect: { connect: {
id_userId: { id_userId: {
id: account.id, id: account.id,
userId: account.userId userId: this.request.user.id
} }
} }
}, },
value: body.balance, value: data.balance,
date: body.date date: data.date
}; };
return this.accountBalanceService.createAccountBalance(data); return this.accountBalanceService.createAccountBalance(body);
} }
} }

44
apps/api/src/app/account-balance/create-account-balance.dto.ts

@ -0,0 +1,44 @@
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;
}
export class CreateAccountBalanceDto {
@IsNotEmptyObject()
@IsObject()
@ValidateNested()
@Type(() => Account)
Account: Account;
@IsNumber()
balance: number;
@IsISO8601()
date: string;
}

4
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts

@ -150,10 +150,8 @@ export class AccountDetailDialog implements OnDestroy, OnInit {
const formattedDate = new Date(date); const formattedDate = new Date(date);
this.dataService this.dataService
.postAccountBalance({ .postAccountBalance({
userId: this.user.id,
accountId: this.data.accountId, accountId: this.data.accountId,
balance: balance, balance,
currency: this.currency,
date: formattedDate date: formattedDate
}) })
.pipe(takeUntil(this.unsubscribeSubject)) .pipe(takeUntil(this.unsubscribeSubject))

10
apps/client/src/app/services/data.service.ts

@ -614,26 +614,20 @@ export class DataService {
public postAccountBalance({ public postAccountBalance({
date, date,
accountId, accountId,
balance, balance
currency,
userId
}: { }: {
date: Date; date: Date;
accountId: string; accountId: string;
balance: number; balance: number;
currency: string;
userId: string;
}) { }) {
return this.http.post<any>(`/api/v1/account-balance`, { return this.http.post<any>(`/api/v1/account-balance`, {
Account: { Account: {
connect: { connect: {
id_userId: { id_userId: {
id: accountId, id: accountId
userId
} }
} }
}, },
currency,
date, date,
balance: balance balance: balance
}); });

4
libs/ui/src/lib/account-balances/account-balances.component.ts

@ -79,13 +79,13 @@ export class GfAccountBalancesComponent
private unsubscribeSubject = new Subject<void>(); private unsubscribeSubject = new Subject<void>();
public constructor(private dateAdapter: DateAdapter<any>) {}
public accountBalanceForm = new FormGroup({ public accountBalanceForm = new FormGroup({
balance: new FormControl(0, Validators.required), balance: new FormControl(0, Validators.required),
date: new FormControl(new Date().toISOString(), Validators.required) date: new FormControl(new Date().toISOString(), Validators.required)
}); });
public constructor(private dateAdapter: DateAdapter<any>) {}
public ngOnInit() { public ngOnInit() {
this.dateAdapter.setLocale(this.locale); this.dateAdapter.setLocale(this.locale);
} }

Loading…
Cancel
Save