Presupuestador_web/shared/lib/contexts/common/domain/entities/ResultCollection.ts

50 lines
1.2 KiB
TypeScript
Raw Normal View History

2024-04-23 15:29:38 +00:00
import { Result } from "./Result";
export interface IResultCollection<T, E extends Error = Error> {
add(result: Result<T, E>): void;
hasSomeFaultyResult(): boolean;
getFirstFaultyResult(): Result<T, E>;
}
export class ResultCollection<T, E extends Error = Error>
implements IResultCollection<T, E>
{
private _collection: Result<T, E>[] = [];
constructor(results?: Result<T, E>[]) {
this._collection = results ?? [];
}
public add(result: Result<T, E>): void {
this._collection.push(result);
}
public reset(): void {
this._collection = [];
}
public hasSomeFaultyResult(): boolean {
return this._collection.some((result) => result.isFailure);
}
public getFirstFaultyResult(): Result<T, E> {
return this._collection.find((result) => result.isFailure)!;
}
public getAllFaultyResults(): Result<T, E>[] {
return this._collection.filter((result) => result.isFailure);
}
public get objects(): T[] {
return this._collection
.filter((result) => result.isSuccess)
.map((result) => result.object);
}
public get errors(): E[] {
return this._collection
.filter((result) => result.isFailure)
.map((result) => result.error);
}
}