public async Task ApproveAsync(string clientId, string disclaimerId) { IDisclaimer disclaimer = await _redisService.GetDisclaimerAsync(disclaimerId); if (disclaimer == null) { throw new DisclaimerNotFoundException(disclaimerId); } var clientDisclaimer = new ClientDisclaimer { ClientId = clientId, DisclaimerId = disclaimerId, Approved = true, ApprovedDate = DateTime.UtcNow }; var tasks = new List <Task> { _clientDisclaimerRepository.InsertOrReplaceAsync(clientDisclaimer), _redisService.AddClientDisclaimerAsync(clientDisclaimer) }; await Task.WhenAll(tasks); _log.Info("Client disclaimer approved", new { clientId, disclaimerId }); }
public static IClientDisclaimer ToClientDisclaimer(this HashEntry[] hashEntry) { var disclaimer = new ClientDisclaimer(); var hashDict = hashEntry.ToDictionary(); if (hashDict.TryGetValue(nameof(disclaimer.ClientId), out var clientId)) { disclaimer.ClientId = clientId; } if (hashDict.TryGetValue(nameof(disclaimer.DisclaimerId), out var disclaimerId)) { disclaimer.DisclaimerId = disclaimerId; } if (hashDict.TryGetValue(nameof(disclaimer.Approved), out var approved)) { disclaimer.Approved = Convert.ToBoolean(approved); } if (hashDict.TryGetValue(nameof(disclaimer.ApprovedDate), out var approvedDate)) { disclaimer.ApprovedDate = DateTime.Parse(approvedDate).ToUniversalTime(); } return(disclaimer); }
private async Task <bool> CheckDisclaimerAsync(string clientId, string lykkeEntityId, DisclaimerType type) { IDisclaimer requiresApprovalDisclaimer = (await _redisService.GetDisclaimersAsync()) .Where(x => x.LykkeEntityId == lykkeEntityId) .Where(o => o.Type == type) .Where(o => o.StartDate < DateTime.UtcNow) .OrderByDescending(p => p.StartDate) .FirstOrDefault(); if (requiresApprovalDisclaimer == null) { return(false); } IReadOnlyList <IClientDisclaimer> clientDisclaimers = await _redisService.GetClientDisclaimersAsync(clientId); HashSet <string> approvedDisclaimers = clientDisclaimers .Where(o => o.Approved) .Select(o => o.DisclaimerId) .ToHashSet(); List <Task> tasks; if (approvedDisclaimers.Contains(requiresApprovalDisclaimer.Id)) { if (requiresApprovalDisclaimer.ShowOnEachAction) { tasks = new List <Task> { _clientDisclaimerRepository.DeleteAsync(clientId, requiresApprovalDisclaimer.Id), _redisService.DeleteClientDisclaimerAsync(clientId, requiresApprovalDisclaimer.Id) }; await Task.WhenAll(tasks); } return(false); } var clientDisclaimer = new ClientDisclaimer { ClientId = clientId, DisclaimerId = requiresApprovalDisclaimer.Id, ApprovedDate = DateTime.UtcNow }; tasks = new List <Task> { _clientDisclaimerRepository.InsertOrReplaceAsync(clientDisclaimer), _redisService.AddClientDisclaimerAsync(clientDisclaimer) }; await Task.WhenAll(tasks); _log.Info("Client pending disclaimer added", new { clientId, requiresApprovalDisclaimer.Id }); return(true); }