Implement ListTokens in TokensService.cs
This commit is contained in:
parent
b03979b8b2
commit
910343207c
3 changed files with 52 additions and 4 deletions
|
@ -11,7 +11,7 @@ namespace Retroactiune.Core.Services
|
|||
/// <summary>
|
||||
/// Id filters tokens by their ids.
|
||||
/// </summary>
|
||||
public IEnumerable<string> Id { get; set; }
|
||||
public IEnumerable<string> Ids { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// FeedbackReceiverId filters tokens by their assigned FeedbackReceiverId.
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using MongoDB.Driver;
|
||||
using Retroactiune.Core.Entities;
|
||||
|
@ -56,8 +57,55 @@ namespace Retroactiune.Core.Services
|
|||
public async Task<IEnumerable<Token>> ListTokens(TokenListFilters filters)
|
||||
{
|
||||
// TODO Write unit tests.
|
||||
// TODO: Implement
|
||||
throw new NotImplementedException();
|
||||
var filterBuilder = new FilterDefinitionBuilder<Token>();
|
||||
var activeFilters = new List<FilterDefinition<Token>>();
|
||||
var tokensListFilter = FilterDefinition<Token>.Empty;
|
||||
|
||||
// Filter by token ids.
|
||||
if (filters.Ids.Any())
|
||||
{
|
||||
activeFilters.Add(filterBuilder.In(i => i.Id, filters.Ids));
|
||||
}
|
||||
|
||||
// Filter tokens by their assigned feedback receiver id.
|
||||
if (filters.FeedbackReceiverId != null)
|
||||
{
|
||||
activeFilters.Add(filterBuilder.Eq(i => i.FeedbackReceiverId, filters.FeedbackReceiverId));
|
||||
}
|
||||
|
||||
// Datetime after
|
||||
if (filters.CreatedAfter != null)
|
||||
{
|
||||
activeFilters.Add(filterBuilder.Gte(i => i.CreatedAt, filters.CreatedAfter));
|
||||
}
|
||||
|
||||
// Datetime before
|
||||
if (filters.CreatedBefore != null)
|
||||
{
|
||||
activeFilters.Add(filterBuilder.Lte(i => i.CreatedAt, filters.CreatedBefore));
|
||||
}
|
||||
|
||||
// Used time after
|
||||
if (filters.UsedAfter != null)
|
||||
{
|
||||
activeFilters.Add(filterBuilder.Gte(i => i.TimeUsed, filters.UsedAfter));
|
||||
}
|
||||
|
||||
// Used time before
|
||||
if (filters.UsedBefore != null)
|
||||
{
|
||||
activeFilters.Add(filterBuilder.Lte(i => i.TimeUsed, filters.UsedBefore));
|
||||
}
|
||||
|
||||
|
||||
// Construct the final filter.
|
||||
if (activeFilters.Any())
|
||||
{
|
||||
tokensListFilter = filterBuilder.And(activeFilters);
|
||||
}
|
||||
|
||||
var results = await _collection.FindAsync(tokensListFilter);
|
||||
return await results.ToListAsync();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -10,7 +10,7 @@ namespace Retroactiune.DataTransferObjects
|
|||
/// </summary>
|
||||
public class ListTokensFiltersDto
|
||||
{
|
||||
public IEnumerable<string> Id { get; set; }
|
||||
public IEnumerable<string> Ids { get; set; }
|
||||
[StringLength(24, ErrorMessage = "invalid guid, must be 24 characters", MinimumLength = 24)]
|
||||
public string FeedbackReceiverId { get; set; }
|
||||
public DateTime? CreatedAfter { get; set; }
|
||||
|
|
Loading…
Reference in a new issue