fix: harden admin frontend contracts

This commit is contained in:
Bastian Wagner
2026-08-01 09:26:14 +02:00
parent 484c7473fb
commit d0ec000bff
3 changed files with 22 additions and 8 deletions

View File

@@ -1,7 +1,7 @@
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { provideHttpClient } from '@angular/common/http'; import { provideHttpClient } from '@angular/common/http';
import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing';
import { AuthApi } from './auth-api'; import { AuthApi, RegistrationRequest } from './auth-api';
import { environment } from '../../../environments/environment'; import { environment } from '../../../environments/environment';
import { User } from '../../models/user.model'; import { User } from '../../models/user.model';
@@ -59,8 +59,8 @@ describe('AuthApi', () => {
request.flush(invitation); request.flush(invitation);
}); });
it('registers and links an invited player', () => { it('registers with only the supported account fields', () => {
const registration = { const registrationWithLegacyField = {
email: 'alex@example.de', email: 'alex@example.de',
password: 'secret1', password: 'secret1',
firstName: 'Alex', firstName: 'Alex',
@@ -68,11 +68,16 @@ describe('AuthApi', () => {
linkPlayerId: 7, linkPlayerId: 7,
}; };
service.register(registration).subscribe(); service.register(registrationWithLegacyField as RegistrationRequest).subscribe();
const request = httpMock.expectOne(`${environment.apiUrl}auth/email/register`); const request = httpMock.expectOne(`${environment.apiUrl}auth/email/register`);
expect(request.request.method).toBe('POST'); expect(request.request.method).toBe('POST');
expect(request.request.body).toEqual(registration); expect(request.request.body).toEqual({
email: 'alex@example.de',
password: 'secret1',
firstName: 'Alex',
lastName: 'Muster',
});
request.flush(null); request.flush(null);
}); });

View File

@@ -52,7 +52,13 @@ export class AuthApi {
} }
register(request: RegistrationRequest): Observable<void> { register(request: RegistrationRequest): Observable<void> {
return this.http.post<void>(`${this.baseUrl}/email/register`, request); const { email, password, firstName, lastName } = request;
return this.http.post<void>(`${this.baseUrl}/email/register`, {
email,
password,
firstName,
lastName,
});
} }
forgotPassword(email: string): Observable<void> { forgotPassword(email: string): Observable<void> {

View File

@@ -52,12 +52,15 @@ export interface AdminUserProfileRequest {
lastName?: string | null; lastName?: string | null;
} }
export type AdminUserRoleId = 1 | 2;
export type AdminUserStatusId = 1 | 2;
export interface AdminUserRoleRequest { export interface AdminUserRoleRequest {
role: number; role: AdminUserRoleId;
} }
export interface AdminUserStatusRequest { export interface AdminUserStatusRequest {
status: number; status: AdminUserStatusId;
} }
export type AdminPlayerAssignmentFilter = 'all' | 'assigned' | 'unassigned'; export type AdminPlayerAssignmentFilter = 'all' | 'assigned' | 'unassigned';