diff --git a/Directory.Build.props b/Directory.Build.props index da50def..8c0f03c 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -26,8 +26,8 @@ https://github.com/managedcode/Communication https://github.com/managedcode/Communication Managed Code - Communication - 9.6.0 - 9.6.0 + 9.6.1 + 9.6.1 diff --git a/ManagedCode.Communication/CollectionResultT/CollectionResultT.Fail.cs b/ManagedCode.Communication/CollectionResultT/CollectionResultT.Fail.cs index 1f0cec3..0a208b3 100644 --- a/ManagedCode.Communication/CollectionResultT/CollectionResultT.Fail.cs +++ b/ManagedCode.Communication/CollectionResultT/CollectionResultT.Fail.cs @@ -33,13 +33,13 @@ public static CollectionResult Fail(string title) var problem = Problem.Create(title, title, (int)HttpStatusCode.InternalServerError); return Create(false, default, 0, 0, 0, problem); } - + public static CollectionResult Fail(string title, string detail) { var problem = Problem.Create(title, detail); return Create(false, default, 0, 0, 0, problem); } - + public static CollectionResult Fail(string title, string detail, HttpStatusCode status) { var problem = Problem.Create(title, detail, (int)status); @@ -50,7 +50,7 @@ public static CollectionResult Fail(Exception exception) { return new CollectionResult(false, default, 0, 0, 0, Problem.Create(exception, (int)HttpStatusCode.InternalServerError)); } - + public static CollectionResult Fail(Exception exception, HttpStatusCode status) { return new CollectionResult(false, default, 0, 0, 0, Problem.Create(exception, (int)status)); @@ -61,6 +61,26 @@ public static CollectionResult FailValidation(params (string field, string me return new CollectionResult(false, default, 0, 0, 0, Problem.Validation(errors)); } + public static CollectionResult FailBadRequest() + { + var problem = Problem.Create( + ProblemConstants.Titles.BadRequest, + ProblemConstants.Messages.BadRequest, + (int)HttpStatusCode.BadRequest); + + return Create(false, default, 0, 0, 0, problem); + } + + public static CollectionResult FailBadRequest(string detail) + { + var problem = Problem.Create( + ProblemConstants.Titles.BadRequest, + detail, + (int)HttpStatusCode.BadRequest); + + return Create(false, default, 0, 0, 0, problem); + } + public static CollectionResult FailUnauthorized() { var problem = Problem.Create( @@ -70,7 +90,7 @@ public static CollectionResult FailUnauthorized() return Create(false, default, 0, 0, 0, problem); } - + public static CollectionResult FailUnauthorized(string detail) { var problem = Problem.Create( @@ -90,7 +110,7 @@ public static CollectionResult FailForbidden() return Create(false, default, 0, 0, 0, problem); } - + public static CollectionResult FailForbidden(string detail) { var problem = Problem.Create( @@ -110,7 +130,7 @@ public static CollectionResult FailNotFound() return Create(false, default, 0, 0, 0, problem); } - + public static CollectionResult FailNotFound(string detail) { var problem = Problem.Create( @@ -125,7 +145,7 @@ public static CollectionResult Fail(TEnum errorCode) where TEnum : Enu { return new CollectionResult(false, default, 0, 0, 0, Problem.Create(errorCode)); } - + public static CollectionResult Fail(TEnum errorCode, string detail) where TEnum : Enum { return new CollectionResult(false, default, 0, 0, 0, Problem.Create(errorCode, detail)); @@ -135,9 +155,9 @@ public static CollectionResult Fail(TEnum errorCode, HttpStatusCode st { return new CollectionResult(false, default, 0, 0, 0, Problem.Create(errorCode, errorCode.ToString(), (int)status)); } - + public static CollectionResult Fail(TEnum errorCode, string detail, HttpStatusCode status) where TEnum : Enum { return new CollectionResult(false, default, 0, 0, 0, Problem.Create(errorCode, detail, (int)status)); } -} \ No newline at end of file +} diff --git a/ManagedCode.Communication/Constants/ProblemConstants.cs b/ManagedCode.Communication/Constants/ProblemConstants.cs index 75f3fcb..390980d 100644 --- a/ManagedCode.Communication/Constants/ProblemConstants.cs +++ b/ManagedCode.Communication/Constants/ProblemConstants.cs @@ -29,6 +29,7 @@ public static class Titles /// public static class Messages { + public const string BadRequest = "The request could not be understood by the server due to malformed syntax."; public const string UnauthorizedAccess = "Authentication is required to access this resource."; public const string ForbiddenAccess = "You do not have permission to access this resource."; public const string ResourceNotFound = "The requested resource was not found."; @@ -44,7 +45,7 @@ public static class Types { public const string AboutBlank = "about:blank"; public const string ValidationFailed = "https://tools.ietf.org/html/rfc7231#section-6.5.1"; - + public static string HttpStatus(int statusCode) => $"https://httpstatuses.io/{statusCode}"; } @@ -83,7 +84,7 @@ public static class ExtensionKeys /// public const string OriginalExceptionType = "originalExceptionType"; } - + /// /// Field names for validation errors. /// @@ -94,4 +95,4 @@ public static class ValidationFields /// public const string General = "_general"; } -} \ No newline at end of file +} diff --git a/ManagedCode.Communication/Result/Result.Fail.cs b/ManagedCode.Communication/Result/Result.Fail.cs index 4fc7f20..db9cdd6 100644 --- a/ManagedCode.Communication/Result/Result.Fail.cs +++ b/ManagedCode.Communication/Result/Result.Fail.cs @@ -31,7 +31,7 @@ public static Result Fail(string title) var problem = Problem.Create(title, title, HttpStatusCode.InternalServerError); return Create(false, problem); } - + /// /// Creates a failed result with a title and detail. /// @@ -40,7 +40,7 @@ public static Result Fail(string title, string detail) var problem = Problem.Create(title, detail, HttpStatusCode.InternalServerError); return Create(false, problem); } - + /// /// Creates a failed result with a title, detail and status. /// @@ -57,7 +57,7 @@ public static Result Fail(Exception exception) { return Create(false, Problem.Create(exception, (int)HttpStatusCode.InternalServerError)); } - + /// /// Creates a failed result from an exception with specific status. /// @@ -74,6 +74,32 @@ public static Result FailValidation(params (string field, string message)[] erro return new Result(false, Problem.Validation(errors)); } + /// + /// Creates a failed result for bad request. + /// + public static Result FailBadRequest() + { + var problem = Problem.Create( + ProblemConstants.Titles.BadRequest, + ProblemConstants.Messages.BadRequest, + (int)HttpStatusCode.BadRequest); + + return Create(false, problem); + } + + /// + /// Creates a failed result for bad request with custom detail. + /// + public static Result FailBadRequest(string detail) + { + var problem = Problem.Create( + ProblemConstants.Titles.BadRequest, + detail, + (int)HttpStatusCode.BadRequest); + + return Create(false, problem); + } + /// /// Creates a failed result for unauthorized access. /// @@ -86,7 +112,7 @@ public static Result FailUnauthorized() return Create(false, problem); } - + /// /// Creates a failed result for unauthorized access with custom detail. /// @@ -112,7 +138,7 @@ public static Result FailForbidden() return Create(false, problem); } - + /// /// Creates a failed result for forbidden access with custom detail. /// @@ -138,7 +164,7 @@ public static Result FailNotFound() return Create(false, problem); } - + /// /// Creates a failed result for not found with custom detail. /// @@ -159,7 +185,7 @@ public static Result Fail(TEnum errorCode) where TEnum : Enum { return Create(false, Problem.Create(errorCode)); } - + /// /// Creates a failed result from a custom error enum with detail. /// @@ -175,12 +201,12 @@ public static Result Fail(TEnum errorCode, HttpStatusCode status) where T { return Create(false, Problem.Create(errorCode, errorCode.ToString(), (int)status)); } - + /// /// Creates a failed result from a custom error enum with detail and specific HTTP status. - /// і + /// і public static Result Fail(TEnum errorCode, string detail, HttpStatusCode status) where TEnum : Enum { return Create(false, Problem.Create(errorCode, detail, (int)status)); } -} \ No newline at end of file +} diff --git a/ManagedCode.Communication/ResultT/ResultT.Fail.cs b/ManagedCode.Communication/ResultT/ResultT.Fail.cs index 2161e14..76ca4bf 100644 --- a/ManagedCode.Communication/ResultT/ResultT.Fail.cs +++ b/ManagedCode.Communication/ResultT/ResultT.Fail.cs @@ -43,7 +43,7 @@ public static Result Fail(string title) var problem = Problem.Create(title, title, (int)HttpStatusCode.InternalServerError); return Create(false, default, problem); } - + /// /// Creates a failed result with a title and detail. /// @@ -52,7 +52,7 @@ public static Result Fail(string title, string detail) var problem = Problem.Create(title, detail); return Create(false, default, problem); } - + /// /// Creates a failed result with a title, detail and status. /// @@ -69,7 +69,7 @@ public static Result Fail(Exception exception) { return new Result(false, default, Problem.Create(exception, (int)HttpStatusCode.InternalServerError)); } - + /// /// Creates a failed result from an exception with status. /// @@ -86,6 +86,32 @@ public static Result FailValidation(params (string field, string message)[] e return new Result(false, default, Problem.Validation(errors)); } + /// + /// Creates a failed result for bad request. + /// + public static Result FailBadRequest() + { + var problem = Problem.Create( + ProblemConstants.Titles.BadRequest, + ProblemConstants.Messages.BadRequest, + (int)HttpStatusCode.BadRequest); + + return Create(false, default, problem); + } + + /// + /// Creates a failed result for bad request with custom detail. + /// + public static Result FailBadRequest(string detail) + { + var problem = Problem.Create( + ProblemConstants.Titles.BadRequest, + detail, + (int)HttpStatusCode.BadRequest); + + return Create(false, default, problem); + } + /// /// Creates a failed result for unauthorized access. /// @@ -98,7 +124,7 @@ public static Result FailUnauthorized() return Create(false, default, problem); } - + /// /// Creates a failed result for unauthorized access with custom detail. /// @@ -124,7 +150,7 @@ public static Result FailForbidden() return Create(false, default, problem); } - + /// /// Creates a failed result for forbidden access with custom detail. /// @@ -150,7 +176,7 @@ public static Result FailNotFound() return Create(false, default, problem); } - + /// /// Creates a failed result for not found with custom detail. /// @@ -171,7 +197,7 @@ public static Result Fail(TEnum errorCode) where TEnum : Enum { return new Result(false, default, Problem.Create(errorCode)); } - + /// /// Creates a failed result from a custom error enum with detail. /// @@ -187,7 +213,7 @@ public static Result Fail(TEnum errorCode, HttpStatusCode status) wher { return new Result(false, default, Problem.Create(errorCode, errorCode.ToString(), (int)status)); } - + /// /// Creates a failed result from a custom error enum with detail and specific HTTP status. /// @@ -195,4 +221,4 @@ public static Result Fail(TEnum errorCode, string detail, HttpStatusCo { return new Result(false, default, Problem.Create(errorCode, detail, (int)status)); } -} \ No newline at end of file +}