Exemple #1
0
 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));
        }
Exemple #9
0
 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);
 }