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 { AccountBalanceService } from './account-balance.service';
import { CreateAccountBalanceDto } from './create-account-balance.dto';
@Controller('account-balance')
export class AccountBalanceController {
@ -53,21 +54,21 @@ export class AccountBalanceController {
@Post()
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async createAccountBalance(
@Body() body: any
@Body() data: CreateAccountBalanceDto
): Promise<AccountBalance> {
const account = body.Account.connect.id_userId;
const data = {
const account = data.Account.connect.id_userId;
const body = {
Account: {
connect: {
id_userId: {
id: account.id,
userId: account.userId
userId: this.request.user.id
}
}
},
value: body.balance,
date: body.date
value: data.balance,
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);
this.dataService
.postAccountBalance({
userId: this.user.id,
accountId: this.data.accountId,
balance: balance,
currency: this.currency,
balance,
date: formattedDate
})
.pipe(takeUntil(this.unsubscribeSubject))

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

@ -614,26 +614,20 @@ export class DataService {
public postAccountBalance({
date,
accountId,
balance,
currency,
userId
balance
}: {
date: Date;
accountId: string;
balance: number;
currency: string;
userId: string;
}) {
return this.http.post<any>(`/api/v1/account-balance`, {
Account: {
connect: {
id_userId: {
id: accountId,
userId
id: accountId
}
}
},
currency,
date,
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>();
public constructor(private dateAdapter: DateAdapter<any>) {}
public accountBalanceForm = new FormGroup({
balance: new FormControl(0, Validators.required),
date: new FormControl(new Date().toISOString(), Validators.required)
});
public constructor(private dateAdapter: DateAdapter<any>) {}
public ngOnInit() {
this.dateAdapter.setLocale(this.locale);
}

Loading…
Cancel
Save