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)); }
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)); }