namespace SameBeat.Application.DTO;
///
/// Wynik operacji biznesowej bez danych zwrotnych (np. wylogowanie).
/// Uzywany zamiast wyjatkow dla normalnych bledow biznesowych -- caller ma czytelny komunikat
/// zamiast lapania wyjatku, ktory moglby przeciekac np. do generycznego 500 na API.
///
public class WynikOperacji
{
public bool Sukces { get; }
public string? Blad { get; }
protected WynikOperacji(bool sukces, string? blad)
{
Sukces = sukces;
Blad = blad;
}
public static WynikOperacji Ok() => new(true, null);
public static WynikOperacji Niepowodzenie(string blad) => new(false, blad);
}
/// Wynik operacji biznesowej niosacy dane w przypadku sukcesu.
public sealed class WynikOperacji : WynikOperacji
{
public T? Dane { get; }
private WynikOperacji(bool sukces, T? dane, string? blad) : base(sukces, blad)
{
Dane = dane;
}
public static WynikOperacji Ok(T dane) => new(true, dane, null);
public static new WynikOperacji Niepowodzenie(string blad) => new(false, default, blad);
}