diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8dfbbb0..5fa5020 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,6 +1,10 @@ name: .NET Build -on: [push, pull_request] +on: + push: + branches: [main] + pull_request: + branches: [main] jobs: build: diff --git a/src/Core/Applications.Abstractions/Results/ResultMessage.cs b/src/Core/Applications.Abstractions/Results/ResultMessage.cs index c351c67..2218f45 100644 --- a/src/Core/Applications.Abstractions/Results/ResultMessage.cs +++ b/src/Core/Applications.Abstractions/Results/ResultMessage.cs @@ -2,7 +2,7 @@ public class ResultMessage { - public ResultMessage(ResultMessageType type, string message, string field = null, string code = null) + public ResultMessage(ResultMessageType type, string message, string? field= null, string? code = null) { Type = type; Message = message; @@ -12,9 +12,9 @@ public ResultMessage(ResultMessageType type, string message, string field = null public string Message { get; set; } - public string Field { get; set; } + public string? Field { get; set; } - public string Code { get; set; } + public string? Code { get; set; } public ResultMessageType Type { get; set; } } diff --git a/src/Core/Applications.Abstractions/Results/ResultMessagesExtensions.cs b/src/Core/Applications.Abstractions/Results/ResultMessagesExtensions.cs index 64477d8..1fe30f0 100644 --- a/src/Core/Applications.Abstractions/Results/ResultMessagesExtensions.cs +++ b/src/Core/Applications.Abstractions/Results/ResultMessagesExtensions.cs @@ -12,14 +12,14 @@ public static void AppendInfo(this Result result, string message) result.Messages.Add(new ResultMessage(ResultMessageType.Info, message)); } - public static void AppendError(this Result result, string message, string field, string code) + public static void AppendError(this Result result, string message, string? field, string? code) { - result.Messages.Add(new ResultMessage(ResultMessageType.Error, message, field, code)); + result.Messages.Add(new ResultMessage(ResultMessageType.Error, message, code:code , field: field)); } - public static void AppendError(this Result result, string message, string field) + public static void AppendError(this Result result, string message, string? field) { - result.AppendError(message, field, null); + result.AppendError(message, field: field, null); } public static void AppendError(this Result result, string message) @@ -88,4 +88,9 @@ public static void SetStatusAsInvalidDomainState(this Result result, string erro result.Status = ResultStatus.InvalidDomainState; result.AppendError(errorMessage); } + + public static void SetStatusAsValidationError(this Result result) + { + result.Status = ResultStatus.ValidationError; + } } diff --git a/src/Core/Applications/CommandHandlerDecorators/ExceptionCommandHandlerDecorator.cs b/src/Core/Applications/CommandHandlerDecorators/ExceptionCommandHandlerDecorator.cs index 314e6bc..67d6905 100644 --- a/src/Core/Applications/CommandHandlerDecorators/ExceptionCommandHandlerDecorator.cs +++ b/src/Core/Applications/CommandHandlerDecorators/ExceptionCommandHandlerDecorator.cs @@ -52,6 +52,10 @@ private TResponse CreateResultWithError(Type type, Exception ex) result.SetStatusAsUnauthorized(); result.AppendError(ex.Message); break; + case NotFoundBusinessException notFoundEx: + result.Status = ResultStatus.NotFound; + result.AppendError(notFoundEx.GetMessage(), null, notFoundEx.GetCode()); + break; case BusinessException businessException: result.Status = ResultStatus.ValidationError; var code = businessException.GetCode(); diff --git a/src/Core/Applications/CommandHandlerDecorators/ResultOrientedCommandHandlerDecorator.cs b/src/Core/Applications/CommandHandlerDecorators/ResultOrientedCommandHandlerDecorator.cs deleted file mode 100644 index e69de29..0000000 diff --git a/src/Core/Domain.Abstractions/NotFoundBusinessException.cs b/src/Core/Domain.Abstractions/NotFoundBusinessException.cs new file mode 100644 index 0000000..5e129bf --- /dev/null +++ b/src/Core/Domain.Abstractions/NotFoundBusinessException.cs @@ -0,0 +1,9 @@ +namespace Honamic.Framework.Domain; + +public class NotFoundBusinessException : BusinessException +{ + public NotFoundBusinessException(string? message = null, string? code = null) + : base(message ?? "Item not found.", code) + { + } +} \ No newline at end of file diff --git a/src/Facade/Default/Honamic.Framework.Facade.csproj b/src/Facade/Default/Honamic.Framework.Facade.csproj index 317e731..8131534 100644 --- a/src/Facade/Default/Honamic.Framework.Facade.csproj +++ b/src/Facade/Default/Honamic.Framework.Facade.csproj @@ -14,6 +14,7 @@ + diff --git a/src/Facade/Default/Interceptors/ExceptionHandlingInterceptor.cs b/src/Facade/Default/Interceptors/ExceptionHandlingInterceptor.cs index 57524c6..423c47a 100644 --- a/src/Facade/Default/Interceptors/ExceptionHandlingInterceptor.cs +++ b/src/Facade/Default/Interceptors/ExceptionHandlingInterceptor.cs @@ -1,6 +1,7 @@ using Castle.DynamicProxy; using Honamic.Framework.Applications.Exceptions; using Honamic.Framework.Applications.Results; +using Honamic.Framework.Domain; using Microsoft.Extensions.Logging; using System.Diagnostics; using System.Reflection; @@ -36,7 +37,7 @@ public void Intercept(IInvocation invocation) { if (invocation.Proxy is IBaseFacade baseFacade) { - baseFacade.Logger.LogError(ex, "Unhandled exception"); + baseFacade.Logger.LogError(ex, "Unhandled exception"); } var result = GetNewResult(invocation, ex); @@ -111,16 +112,24 @@ public void Intercept(IInvocation invocation) switch (ex) { case UnauthenticatedException: - rawResult?.SetStatusAsUnauthenticated(); - rawResult?.AppendError(ex.Message, "Exception"); + rawResult?.SetStatusAsUnauthenticated(ex.Message); break; case UnauthorizedException: - rawResult?.SetStatusAsUnauthorized(); - rawResult?.AppendError(ex.Message, "Exception"); + rawResult?.SetStatusAsUnauthorized(ex.Message); + break; + case NotFoundBusinessException notFoundEx: + rawResult?.SetStatusAsNotFound(); + rawResult?.AppendError(notFoundEx.GetMessage(), null, notFoundEx.GetCode()); + break; + case BusinessException businessException: + rawResult?.SetStatusAsValidationError(); + var code = businessException.GetCode(); + var message = businessException.GetMessage(); + rawResult?.AppendError(message, null, code); break; default: rawResult?.SetStatusAsUnhandledExceptionWithSorryError(); - rawResult?.AppendError(ex.ToString(), "Exception"); + rawResult?.AppendError(ex.Message, "Exception"); break; }