Skip to main content

Built in Codes

Bult-in codes

CodeHTTP Code
INV400
NTFND404
UNAUTH401
FRBD403
CNFLT409
LCKD423
UNEXP500
AGGR-

Codes support inheritance:
INV.USER_NAME by 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_IMPL would support inheritance. NT_IMPL.ADD_USER would be conveted to HttpStatusCode.NotImplemented.

Override status code inheritance

Startup.cs
services
.AddCodedFailures(x => x
.AddCode("INV.CONFLICT", HttpStatusCode.Conflict));

INV.CONFLICT would support inheritance. INV.CONFLICT.MODIFICATION would be conveted to HttpStatusCode.Conflict.