This commit is contained in:
2025-12-21 19:53:22 +01:00
parent f2d8a23583
commit 3c64f328e2
105 changed files with 3191 additions and 1706 deletions

View File

@@ -1,4 +1,10 @@
export interface ReviewProtestViewModel {
import type { Result } from '@core/shared/application/Result';
import type {
ReviewProtestResult,
ReviewProtestApplicationError,
} from '@core/racing/application/use-cases/ReviewProtestUseCase';
export interface ReviewProtestResponseDTO {
success: boolean;
errorCode?: string;
message?: string;
@@ -8,38 +14,45 @@ export interface ReviewProtestViewModel {
}
export class ReviewProtestPresenter {
private result: ReviewProtestViewModel | null = null;
private model: ReviewProtestResponseDTO | null = null;
reset(): void {
this.result = null;
this.model = null;
}
presentSuccess(payload: { protestId: string; stewardId: string; decision: 'uphold' | 'dismiss' }): void {
this.result = {
present(
result: Result<ReviewProtestResult, ReviewProtestApplicationError>,
): void {
if (result.isErr()) {
const error = result.unwrapErr();
this.model = {
success: false,
errorCode: error.code,
message: error.details?.message,
};
return;
}
const value = result.unwrap();
this.model = {
success: true,
protestId: payload.protestId,
stewardId: payload.stewardId,
decision: payload.decision,
protestId: value.protestId,
stewardId: value.stewardId,
decision: value.decision,
};
}
presentError(errorCode: string, message?: string): void {
this.result = {
success: false,
errorCode,
message,
};
getResponseModel(): ReviewProtestResponseDTO | null {
return this.model;
}
getViewModel(): ReviewProtestViewModel | null {
return this.result;
}
get viewModel(): ReviewProtestViewModel {
if (!this.result) {
get responseModel(): ReviewProtestResponseDTO {
if (!this.model) {
throw new Error('Presenter not presented');
}
return this.result;
return this.model;
}
}