private Expression <Func <AccountLogEntryDbModel, bool> > ComposeFilter(AccountLogsFilter filter)
        {
            var exp = base.ComposeBaseFilter <AccountLogEntryDbModel>(filter);

            if (!string.IsNullOrWhiteSpace(filter.UserId))
            {
                exp = PredicateExtensions.And(exp, entry => entry.UserId.ToLower().Contains(filter.UserId.ToLower()));
            }

            if (!string.IsNullOrWhiteSpace(filter.UserName))
            {
                exp = PredicateExtensions.And(exp, entry => entry.UserName.ToLower().Contains(filter.UserName.ToLower()));
            }

            if (!string.IsNullOrWhiteSpace(filter.Email))
            {
                exp = PredicateExtensions.And(exp, entry => entry.Email.ToLower().Contains(filter.Email.ToLower()));
            }

            if (filter.Type != AccountActionType.Unknown)
            {
                exp = PredicateExtensions.And(exp, entry => filter.Type.HasFlag((AccountActionType)entry.Type));
            }

            return(exp);
        }
        public async Task <IEnumerable <AccountLogEntry> > GetLogsAsync(AccountLogsFilter filter)
        {
            var dbModels =
                await Context
                .AccountLogEntries
                .Where(ComposeFilter(filter))
                .ToListAsync()
                .ConfigureAwait(false);

            return(Mapper.Map <IEnumerable <AccountLogEntry> >(dbModels));
        }
Esempio n. 3
0
        public async Task ShouldGetFilteredEntries(string userId, string userName, string email, AccountActionType type, DateTime?dateFrom = null, DateTime?dateTo = null)
        {
            // Arrange
            Context.AccountLogEntries.AddRange(AccountLogEntryFaker.Generate(10));

            Context.AccountLogEntries.Add(new AccountLogEntryDbModel
            {
                UserId    = "alexpvt",
                UserName  = "******",
                Email     = "*****@*****.**",
                Type      = (int)AccountActionType.SignIn,
                EventDate = DateTimeNow
            });

            await Context.SaveChangesAsync();

            var filter = new AccountLogsFilter
            {
                UserId   = userId,
                UserName = userName,
                Email    = email,
                Type     = type,
                DateFrom = dateFrom,
                DateTo   = dateTo
            };

            // Act
            var entries = await _accountLogService.GetLogsAsync(filter);

            // Assert
            entries.Count().ShouldBeEqualTo(1);

            var entry = entries.Single();

            entry.UserId.ShouldBeEqualTo("alexpvt");
            entry.UserName.ShouldBeEqualTo("Alexander Pashnikov");
            entry.Email.ShouldBeEqualTo("*****@*****.**");
            entry.Type.ShouldBeEqualTo(AccountActionType.SignIn);
            entry.EventDate.ShouldBeEqualTo(DateTimeNow);
        }
        public async Task <IActionResult> GetAccountLogs([FromQuery] AccountLogsFilter filter)
        {
            var result = await _loggingService.GetLogsAsync(filter);

            return(Ok(result));
        }