public async Task <Result> AddApiClient(CreateDirectApiClientRequest request) { return(await Validate() .Bind(CreateDirectApiClient) .Tap(BindToAgent)); async Task <Result> Validate() { var isAgentExists = await _context.Agents .AnyAsync(a => a.Id == request.AgentId); if (!isAgentExists) { return(Result.Failure($"Agent with id {request.AgentId} not found in agency {request.AgencyId}")); } var isClientAlreadyBounded = await _context.AgentDirectApiClientRelations .AnyAsync(r => r.DirectApiClientId == request.ClientId); if (isClientAlreadyBounded) { return(Result.Failure($"Client with id {request.ClientId} already bounded")); } return(Result.Success()); } Task <Result> CreateDirectApiClient() { return(Send(new HttpRequestMessage(HttpMethod.Post, "api/direct-api-clients") { Content = new StringContent(JsonSerializer.Serialize(new { Id = request.ClientId, request.Password, request.Name }), Encoding.UTF8, "application/json") })); } async Task BindToAgent() { _context.AgentDirectApiClientRelations.Add(new AgentDirectApiClientRelation { AgentId = request.AgentId, AgencyId = request.AgencyId, DirectApiClientId = request.ClientId }); await _context.SaveChangesAsync(); } }
public async Task <IActionResult> AddApiClient([FromBody] CreateDirectApiClientRequest request) { return(NoContentOrBadRequest(await _directApiClientManagementService.AddApiClient(request))); }