Ejemplo n.º 1
0
        public async Task <PagedList <OknObjectEvent> > GetObjectEvents(ListObjectEventsQuery query, CancellationToken cancellationToken)
        {
            var filter = Builders <ObjectEntity> .Filter.Where(x => x.ObjectId == query.ObjectId);

            var objectEntity = await _context.Objects.Find(filter).SingleOrDefaultAsync(cancellationToken);

            if (objectEntity?.Events == null)
            {
                return(null);
            }

            var count = objectEntity.Events.Count;
            var items = objectEntity.Events.AsQueryable()
                        .OrderByDescending(x => x.OccuredAt)
                        .Skip((query.Page - 1) * query.PerPage)
                        .Take(query.PerPage).ToList();

            var model = _mapper.Map <List <ObjectEventEntity>, List <OknObjectEvent> >(items);

            var paged = new PagedList <OknObjectEvent>
            {
                Data    = model,
                Page    = query.Page,
                PerPage = query.PerPage,
                Total   = count
            };

            return(paged);
        }
Ejemplo n.º 2
0
        public async Task <PagedList <OknObject> > GetLastObjectEvents(ListObjectEventsQuery query, CancellationToken cancellationToken)
        {
            var pipeline = new[] {
                new BsonDocument("$unwind", "$events"),
                new BsonDocument("$sort",
                                 new BsonDocument("events.occuredAt", -1)),
                new BsonDocument("$limit", query.PerPage),
                new BsonDocument("$skip", (query.Page - 1) * query.PerPage),
                new BsonDocument("$addFields",
                                 new BsonDocument("lastEvent", "$events")),
                new BsonDocument("$project",
                                 new BsonDocument
                {
                    { "events", 0 },
                    { "photos", 0 },
                    { "versionInfo", 0 },
                    { "federal", 0 }
                })
            };

            var result = await _context.Objects
                         .Aggregate <ObjectEntity>(pipeline, cancellationToken : cancellationToken)
                         .ToListAsync(cancellationToken: cancellationToken);

            var model = _mapper.Map <List <ObjectEntity>, List <OknObject> >(result);

            var paged = new PagedList <OknObject>
            {
                Data    = model,
                Page    = query.Page,
                PerPage = query.PerPage,
                Total   = result.Count
            };

            return(paged);
        }