public async Task <IActionResult> UpdateCookie(Guid cookieId, UpdateCookieDto cookieDto) { var emailClaim = User.Claims.Where(t => t.Type == ClaimsIdentity.DefaultNameClaimType).Single(); var user = await _userRepo.GetAsync(emailClaim.Value); if (user == null) { return(BadRequest("Пользователь не найден")); } var cookie = await _cookieRepo.GetByCookieIdAsync(cookieId); if (cookie == null) { return(NotFound()); } if (cookie.Value == cookieDto.Value && cookie.ExpirationDate == cookieDto.ExpirationDate) { return(BadRequest(new { cookieId = cookieId, value = cookieDto.Value, expirationDate = cookieDto.ExpirationDate, errorMessage = "Дублируемое значение" })); } cookie.Value = cookieDto.Value; cookie.ExpirationDate = cookieDto.ExpirationDate; _cookieRepo.UpdateCookie(cookie); await _cookieRepo.SaveChangesAsync(); var template = await _cookieTemplateRepo.GetByTemplateAsync(cookie.CookieTemplateId); var resource = await _resourceRepo.GetAsync(template.ResourceId); var channels = await _clientRepo.GetChannelsAsync(cookie.ClientId); var userIds = channels.Select(t => t.UserId); var users = await _userRepo.GetByUserIdsAsync(userIds); var emails = users.Where(t => t.Email != user.Email).Select(t => t.Email); //var connection = _connectionMapping.GetConnections(user.Email); // получаем список всех пользователей текущего client и кроме текущего пользователя var connectionIds = _connectionMapping.GetConnectionsByKeys(emails); // TODO: а вот и ошибка - отправить всем кроме себя, а нужно отправить только своей подгруппе await _cookieHub.Clients.Clients(connectionIds.ToList()).SendAsync("NewCookie", new { id = cookie.Id, value = cookie.Value, //expirationDate = cookie.ExpirationDate, name = template.Name, url = resource.Url }); return(Ok("Куки обновлены")); }
public async Task <IActionResult> Create(NewClientDto contract) { var resource = await _resourceRepo.GetAsync(contract.ResourceId, include : true); if (resource == null) { return(NotFound("Не найден")); } var cookieName = resource.Clients.SingleOrDefault(t => t.Name == contract.Name); if (cookieName != null) { return(BadRequest("Такое наименование уже существует")); } var client = new Client { Name = contract.Name, ResourceId = contract.ResourceId }; await _clientRepo.CreateClientAsync(client); await _clientRepo.SaveChangesAsync(); // Из шаблонов берем список куков и заполняем. var cookies = resource.CookieTemplates.Select(t => new Cookie { ClientId = client.Id, CookieTemplateId = t.Id }).ToArray(); await _cookieRepo.CreateRangeCookieAsync(cookies); await _cookieRepo.SaveChangesAsync(); return(Ok(new ClientDto { Id = client.Id, Name = client.Name, Cookies = cookies.Select(async t => { var cookieTemplate = await _cookieTemplateRepo.GetByTemplateAsync(t.CookieTemplateId); return new CookieDto { Value = t.Value, Id = t.Id, }; }).Select(t => t.Result).ToArray() })); }
public async Task <IActionResult> CreateAsync(NewCookieTemplateDto newCookieTemplateDto) { var cookieTemplate = new CookieTemplate { Domain = newCookieTemplateDto.Domain, Name = newCookieTemplateDto.Name, ResourceId = newCookieTemplateDto.ResourceId }; await _cookieTemplateRepo.CreateAsync(cookieTemplate); await _cookieTemplateRepo.SaveChangesAsync(); // Добавляем новые шаблоны в куки var clients = await _clientRepo.GetByResourceAsync(newCookieTemplateDto.ResourceId); var cookies = clients.Data.Select(t => new Cookie { ClientId = t.Id, CookieTemplateId = cookieTemplate.Id }).ToArray(); await _cookieRepo.CreateRangeCookieAsync(cookies); await _cookieRepo.SaveChangesAsync(); // TODO: Уведомлять всех пользователей что теперь по такому что куку нужно отправлять значение //var users = //var connection = _connectionMapping.GetConnections(user.Email); //await _cookieHub.Clients.AllExcept(new string[] { connection.SingleOrDefault() }).SendAsync("NewCookie", new //{ // id = cookie.Id, // value = cookie.Value, // name = template.Name, // url = resource.Url //}); return(Ok(cookieTemplate)); }