Built in Codes
Bult-in codes
| Code | HTTP Code |
|---|---|
| INV | 400 |
| NTFND | 404 |
| UNAUTH | 401 |
| FRBD | 403 |
| CNFLT | 409 |
| LCKD | 423 |
| UNEXP | 500 |
| AGGR | - |
Codes support inheritance:
INV.USER_NAMEby default, will be converted to HTTP 400
Adding custom factory methods
Built in codes has appropriate static methods in CodedResult, CodedFailure and CodedException, like:
CodedResult.Invalid(), CodedFailure.Invalid(), CodedException.Invalid()
To add custom factory method to CodedFailure and CodedResult you might create extension methods
AppCodeFailures.cs
namespace Webinex.Coded;
public static class ThisCodedFailureExtensions
{
public static CodedFailure<string> UserExists(this ThisCodedFailure _, string email)
{
return new CodedFailure<string>(Code.INVALID.Child("USER.EXISTS"), email);
}
}
And use it
UserService.cs
public class UserService
{
private readonly IUserRepository _userRepository;
// ...
public async Task AddAsync(User user)
{
if (await _userRepository.ExistsAsync(user.Email))
throw CodedFailure.This.UserExists(user.Email).Throw();
// ...
}
}
Adding custom base code
Startup.cs
services
.AddCodedFailures(x => x
.AddCode("NT_IMPL", HttpStatusCode.NotImplemented));
NT_IMPLwould support inheritance.NT_IMPL.ADD_USERwould be conveted toHttpStatusCode.NotImplemented.
Override status code inheritance
Startup.cs
services
.AddCodedFailures(x => x
.AddCode("INV.CONFLICT", HttpStatusCode.Conflict));
INV.CONFLICTwould support inheritance.INV.CONFLICT.MODIFICATIONwould be conveted toHttpStatusCode.Conflict.