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 });
        }
Example #2
0
        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);
        }