예제 #1
0
        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();
            }
        }
예제 #2
0
 public async Task <IActionResult> AddApiClient([FromBody] CreateDirectApiClientRequest request)
 {
     return(NoContentOrBadRequest(await _directApiClientManagementService.AddApiClient(request)));
 }