// src/Webshop.Application/ServiceResult.cs namespace Webshop.Application { public enum ServiceResultType { Success, NotFound, InvalidInput, Conflict, Failure, Unauthorized, Forbidden } public class ServiceResult { public ServiceResultType Type { get; } public string? ErrorMessage { get; } protected ServiceResult(ServiceResultType type, string? errorMessage = null) { Type = type; ErrorMessage = errorMessage; } public static ServiceResult Ok() => new ServiceResult(ServiceResultType.Success); public static ServiceResult Ok(T value) => new ServiceResult(value, ServiceResultType.Success); // Allgemeine Fail-Methode public static ServiceResult Fail(ServiceResultType type, string errorMessage) => new ServiceResult(type, errorMessage); // Generische Fail-Methode public static ServiceResult Fail(ServiceResultType type, string errorMessage) => new ServiceResult(default, type, errorMessage); } public class ServiceResult : ServiceResult { public T? Value { get; } protected internal ServiceResult(T? value, ServiceResultType type, string? errorMessage = null) : base(type, errorMessage) { Value = value; } } }