public CarSvc(IRepository <Car> repository, IMongoQueryRepository <Car> queryRepository, TracerFactory tracerFactory) { _repository = repository; _queryRepository = queryRepository; _tracerFactory = tracerFactory; }
public static async Task <PaginatedItem <TResponse> > QueryAsync <TEntity, TResponse>( this IMongoQueryRepository <TEntity> repo, Criterion criterion, Expression <Func <TEntity, TResponse> > selector) where TEntity : class, IAggregateRoot { return(await GetDataAsync(repo, criterion, selector)); }
public static async Task <Room> GetRoomByBookingId(this IMongoQueryRepository <Room> queryRepository, Guid bookingId) { var filterBuilder = new FilterDefinitionBuilder <Room>(); var filterDefinition = filterBuilder.Where(c => c.RoomReservations.Any(r => r.Id == bookingId)); var car = (await queryRepository.GetCollection().FindAsync(filterDefinition)).First(); return(car); }
public static async Task <Room> GetById(this IMongoQueryRepository <Room> queryRepository, Guid id) { var filterBuilder = new FilterDefinitionBuilder <Room>(); var filterDefinition = filterBuilder.Eq(c => c.Id, id); var car = (await queryRepository.GetCollection().FindAsync(filterDefinition)).First(); return(car); }
public static async Task <PaginatedItem <TResponse> > FindAllAsync <TEntity, TResponse>( this IMongoQueryRepository <TEntity> repo, Criterion criterion, Expression <Func <TEntity, TResponse> > selector, Expression <Func <TEntity, bool> > filter, CancellationToken cancellationToken = default(CancellationToken)) where TEntity : class, IAggregateRoot { return(await GetDataAsync(repo, criterion, selector, filter, cancellationToken)); }
public static async Task <TEntity> FindOneAsync <TEntity, TId>( this IMongoQueryRepository <TEntity> repo, Expression <Func <TEntity, TId> > filter, TId id) where TEntity : class, IAggregateRoot { var collection = repo.DbContext.Collection <TEntity>(); var filterDef = Builders <TEntity> .Filter.Eq(filter, id); return(await collection.Find(filterDef).FirstOrDefaultAsync()); }
public static async Task <IReadOnlyList <TEntity> > FindListByFieldAsync <TEntity>( this IMongoQueryRepository <TEntity> repo, Expression <Func <TEntity, bool> > filter = null, CancellationToken cancellationToken = default(CancellationToken)) where TEntity : class, IAggregateRoot { // only use it if you don't have other solutions :p return(await repo .DbContext .Collection <TEntity>() .Find(filter) .ToListAsync(cancellationToken)); }
private static async Task <PaginatedItem <TResponse> > GetDataAsync <TEntity, TResponse>( IMongoQueryRepository <TEntity> repo, Criterion criterion, Expression <Func <TEntity, TResponse> > selector, Expression <Func <TEntity, bool> > filter = null, CancellationToken cancellationToken = default(CancellationToken)) where TEntity : class, IAggregateRoot { var collection = repo.DbContext.Collection <TEntity>(); FilterDefinition <TEntity> filterDef = null; SortDefinition <TEntity> sortDef = null; if (filter != null) { filterDef = Builders <TEntity> .Filter.Eq(filter, true); } if (!string.IsNullOrWhiteSpace(criterion.SortBy)) { var isDesc = string.Equals(criterion.SortOrder, "desc", StringComparison.OrdinalIgnoreCase); FieldDefinition <TEntity> field = criterion.SortBy; sortDef = !isDesc ? Builders <TEntity> .Sort.Ascending(field) : Builders <TEntity> .Sort.Descending(field); } // default we will set it at 0-index if (criterion.CurrentPage > 0) { criterion.CurrentPage--; } var results = await collection .FindEntityWithProjection(filterDef, selector) .SortEntity(sortDef) .Skip(criterion.CurrentPage * criterion.PageSize) .Limit(criterion.PageSize) .ToListAsync(cancellationToken); var totalRecord = await collection.CountDocumentsAsync(FilterDefinition <TEntity> .Empty, null, cancellationToken); var totalPages = (int)Math.Ceiling((double)totalRecord / criterion.PageSize); if (criterion.CurrentPage > totalPages) { // criterion.SetCurrentPage(totalPages); } return(new PaginatedItem <TResponse>(totalRecord, totalPages, results)); }
public RoomSvc(IRepository <Room> repository, IMongoQueryRepository <Room> queryRepository) { _repository = repository; _queryRepository = queryRepository; }
public MongoRepository(IMongoContext context) { _mongoQueryRepository = new MongoQueryRepository <T>(context); _mongoCommandRepository = new MongoCommandRepository <T>(context); }