public async Task <Response> InviteAsync(string urlBase, string servicePrefix, string controller, AddUserGroupBetRequest addUserGroupBetRequest, string tokenType, string accessToken) { try { string request = JsonConvert.SerializeObject(addUserGroupBetRequest); StringContent content = new StringContent(request, Encoding.UTF8, "application/json"); HttpClient client = new HttpClient { BaseAddress = new Uri(urlBase) }; client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(tokenType, accessToken); string url = $"{servicePrefix}{controller}"; HttpResponseMessage response = await client.PostAsync(url, content); string result = await response.Content.ReadAsStringAsync(); if (!response.IsSuccessStatusCode) { return(new Response { IsSuccess = false, Message = result, }); } return(new Response { IsSuccess = true }); } catch (Exception ex) { return(new Response { IsSuccess = false, Message = ex.Message }); } }
public async Task <IActionResult> PostUserGroupBet([FromBody] AddUserGroupBetRequest request) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } Player proposalPlayer = await _context.Players .Include(u => u.User) .FirstOrDefaultAsync(p => p.Id == request.PlayerId); if (proposalPlayer.User == null) { return(BadRequest("Este Usuario no existe.")); } Player requiredPlayer2 = _converterHelper.ToPlayer(await _userHelper.GetUserAsync(request.Email)); if (requiredPlayer2.User == null) { return(BadRequest("Este Usuario no existe en la App.")); } Player requiredPlayer = await _context.Players .Include(u => u.User) .FirstOrDefaultAsync(p => p.User.Id == requiredPlayer2.User.Id); GroupBet groupBet = await _context.GroupBets .Include(u => u.GroupBetPlayers) .FirstOrDefaultAsync(p => p.Id == request.GroupBetId); GroupBetPlayer groupBetPlayer = await _context.GroupBetPlayers .Include(ug => ug.Player) .ThenInclude(u => u.User) .FirstOrDefaultAsync(ug => ug.Player.Id == requiredPlayer.Id && ug.GroupBet.Id == request.GroupBetId); if (groupBetPlayer != null) { { return(BadRequest("Este Usuario ya pertenece al Grupo.")); } } PlayerGroupBetRequestEntity playerGroupBetRequestEntity = await _context.PlayerGroupBetRequests .FirstOrDefaultAsync(ug => ug.RequiredPlayer.Id == requiredPlayer.Id && ug.GroupBet.Id == request.GroupBetId && ug.Status == PlayerGroupBetStatus.Pending); if (playerGroupBetRequestEntity != null) { { return(BadRequest("Este Usuario ya tiene una invitación que está pendiente.")); } } PlayerGroupBetRequestEntity playerGroupBetRequest = new PlayerGroupBetRequestEntity { ProposalPlayer = proposalPlayer, RequiredPlayer = requiredPlayer, GroupBet = groupBet, Status = PlayerGroupBetStatus.Pending, Token = Guid.NewGuid() }; try { _context.PlayerGroupBetRequests.Add(playerGroupBetRequest); await _context.SaveChangesAsync(); } catch (Exception ex) { return(BadRequest(ex.Message)); } string linkConfirm = Url.Action("ConfirmUserGroup", "Account", new { requestId = playerGroupBetRequest.Id, token = playerGroupBetRequest.Token }, protocol: HttpContext.Request.Scheme); string linkReject = Url.Action("RejectUserGroup", "Account", new { requestId = playerGroupBetRequest.Id, token = playerGroupBetRequest.Token }, protocol: HttpContext.Request.Scheme); Response response = _mailHelper.SendMail(request.Email, "Solicitud de unirse a un Grupo", $"<h1>Solicitud de unirse a un Grupo</h1>" + $"El Usuario: {proposalPlayer.User.FullName} ({proposalPlayer.User.Email}), ha solicitado que sea miembro de su grupo de usuarios {groupBet.Name} en la aplicación FULBO PULENTA. " + $"</hr></br></br>Si desea aceptar, haga clic aquí: <a href = \"{linkConfirm}\">Confirmar</a>" + $"</hr></br></br> . Si desea rechazar, haga clic aquí: <a href = \"{linkReject}\">Rechazar</a>"); if (!response.IsSuccess) { return(BadRequest(response.Message)); } return(Ok("Se ha enviado un correo electrónico al usuario con su solicitud, esperamos a que responda pronto!")); }