Experienced software engineer with a focus on backend systems and distributed architectures.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| asciidoctor-pdf --out-file=assessment.pdf \ | |
| --backend=pdf \ | |
| assessment.adoc |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public class ChaosProductServiceDecorator : IProductService | |
| { | |
| private readonly IProductService _inner; | |
| private readonly AsyncInjectOutcomePolicy _asyncChaosPolicy; | |
| public ChaosProductServiceDecorator(IProductService inner) | |
| { | |
| _inner = inner; | |
| _asyncChaosPolicy = MonkeyPolicy | |
| .InjectExceptionAsync((with) => with.Fault(new InvalidDataException("Chaos Monkey says Hi!")) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public class CanbusService | |
| { | |
| private readonly CanbusDataApi _canbusDataApi; | |
| private readonly AsyncCircuitBreakerPolicy _circuitBreakerPolicy; | |
| public CanbusService(CanbusDataApi canbusDataApi, ILogger<CanbusService> logger) | |
| { | |
| _canbusDataApi = canbusDataApi; | |
| _circuitBreakerPolicy = Policy | |
| .Handle<HttpRequestException>(with => with.StatusCode == HttpStatusCode.TooManyRequests) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public async Task<CanbusData> Get(User user, Car car) | |
| { | |
| var unauthorizedApiPolicy = Policy | |
| .Handle<UnauthorizedAccessException>() | |
| .RetryAsync(async (exception, i, context) => await _canbusApi.AuthorizeCall()); | |
| var tokenExpiredPolicy = Policy | |
| .Handle<TokenExpiredException>() | |
| .RetryAsync(async (exception, i, context) => await _canbusApi.AuthenticateUser(user)); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public class AuthenticationService : IAuthenticationService | |
| { | |
| private static readonly int NUMBER_OF_RETRIES = 3; | |
| private readonly IAuthenticationApi _authenticationApi; | |
| private readonly string _clientId; | |
| private readonly string _clientSecret; | |
| public AuthenticationService( | |
| IAuthenticationApi authenticationApi, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| namespace Spielerei.App.SomeHandler | |
| { | |
| public class SomeNewDataHandler | |
| { | |
| private readonly ISomeService _someService; | |
| public SomeNewDataHandler(ISomeService someService) => | |
| _someService = someService; | |
| public void Handle() |