Ejemplo n.º 1
0
        public async Task <Auditorium> UpdateAsync(Auditorium auditorium)
        {
            var housing = await Housings.FindOneAndUpdateAsync(
                c => string.Equals(c.Id, auditorium.HousingId) && c.Auditoriums.Any(a => string.Equals(a.Id, auditorium.Id)),
                Builders <Housing> .Update.Set(c => c.Auditoriums.ElementAt(-1), auditorium)); //-1 means first matching element of nested array

            return(housing.Auditoriums.FirstOrDefault(c => string.Equals(c.Id, auditorium.Id)));
        }
Ejemplo n.º 2
0
        public async Task <Auditorium> GetById(string housingId, string auditoriumId)
        {
            var filter = Builders <Housing> .Filter.Eq("Id", housingId);

            var housing = await Housings.Find(filter).FirstOrDefaultAsync();

            return(housing?.Auditoriums?.FirstOrDefault(a => string.Equals(a.Id, auditoriumId)));
        }
Ejemplo n.º 3
0
        public async Task <bool> IsHousingExists(int number)
        {
            var filter = Builders <Housing> .Filter.Eq("Number", number);

            return(await Housings
                   .Find(filter)
                   .FirstOrDefaultAsync() != null);
        }
Ejemplo n.º 4
0
        public async Task <Housing> GetById(string id)
        {
            var filter = Builders <Housing> .Filter.Eq("Id", id);

            return(await Housings
                   .Find(filter)
                   .FirstOrDefaultAsync());
        }
Ejemplo n.º 5
0
        public async Task RemoveAsync(Auditorium auditorium)
        {
            var filter = Builders <Housing> .Filter.Eq("Id", auditorium.HousingId);

            var housing = await Housings.Find(filter).FirstAsync();

            housing.Auditoriums.Remove(housing.Auditoriums.FirstOrDefault(a => string.Equals(a.Id, auditorium.Id)));

            await Housings.ReplaceOneAsync(h => string.Equals(h.Id, housing.Id), housing);
        }
Ejemplo n.º 6
0
        public async Task <bool> IsAuditoriumExists(string housingId, int number, string exceptAuditoriumId)
        {
            var filter = Builders <Housing> .Filter.ElemMatch(
                f => f.Auditoriums,
                f => string.Equals(f.HousingId, housingId) && !string.Equals(f.Id, exceptAuditoriumId) && f.Number == number);

            return((await Housings
                    .Find(filter)
                    .FirstOrDefaultAsync()) != null);
        }
Ejemplo n.º 7
0
        public async Task <Housing> UpdateAsync(Housing housing)
        {
            var filter = Builders <Housing> .Filter.Eq("Id", housing.Id);

            var update = Builders <Housing> .Update.Set(h => h.Number, housing.Number);

            await Housings.UpdateOneAsync(filter, update);

            return(await GetById(housing.Id));
        }
Ejemplo n.º 8
0
        public async Task <IEnumerable <Auditorium> > GetAllAsync(string housingId)
        {
            var filter = Builders <Housing> .Filter.Eq("Id", housingId);

            var housing = await Housings.Find(filter).FirstOrDefaultAsync();

            if (housing != null)
            {
                return(housing.Auditoriums?.ToList() ?? new List <Auditorium>());
            }

            return(null);
        }
Ejemplo n.º 9
0
        public async Task <IEnumerable <AuditoriumDetailedInfo> > GetDetailedInfoAsync()
        {
            var result = await Housings
                         .Aggregate()
                         .Unwind(field => field.Auditoriums)
                         .Project(new BsonDocument
            {
                { "Id", "$Auditoriums.Id" },
                { "Number", "$Auditoriums.Number" },
                { "Capacity", "$Auditoriums.Capacity" },
                { "HousingNumber", "$Number" },
                { "Floor", "$Auditoriums.Floor" },
                { "Type", "$Auditoriums.Type" }
            })
                         .ToListAsync();

            return(result.Select(r => BsonSerializer.Deserialize <AuditoriumDetailedInfo>(r)).ToList());
        }
Ejemplo n.º 10
0
        public async Task <Auditorium> AddAsync(Auditorium auditorium)
        {
            var filter = Builders <Housing> .Filter.Eq("Id", auditorium.HousingId);

            var housing = await Housings.Find(filter).FirstAsync();

            if (housing == null)
            {
                return(null);
            }

            if (housing.Auditoriums == null)
            {
                housing.Auditoriums = new List <Auditorium>();
            }

            auditorium.Id = ObjectId.GenerateNewId().ToString();
            housing.Auditoriums.Add(auditorium);

            await Housings.ReplaceOneAsync(h => string.Equals(h.Id, housing.Id), housing);

            return(auditorium);
        }
Ejemplo n.º 11
0
        public async Task <IEnumerable <HousingDetailedInfo> > GetDetailedInfoAsync()
        {
            var result = await Housings
                         .Aggregate()
                         .Unwind(h => h.Auditoriums)
                         .Group(new BsonDocument
            {
                {
                    "_id",
                    new BsonDocument
                    {
                        { "number", "$Number" },
                        { "type", "$Auditoriums.Type" }
                    }
                },
                {
                    "CapacityCount",
                    new BsonDocument
                    {
                        { "$sum", "$Auditoriums.Capacity" }
                    }
                },
                {
                    "Count",
                    new BsonDocument
                    {
                        { "$sum", 1 }
                    }
                }
            })
                         .Group(new BsonDocument
            {
                {
                    "_id",
                    new BsonDocument
                    {
                        { "number", "$_id.number" }
                    }
                },
                {
                    "TotalCapacity",
                    new BsonDocument
                    {
                        { "$sum", "$CapacityCount" }
                    }
                },
                {
                    "CountPerType",
                    new BsonDocument
                    {
                        {
                            "$push",
                            new BsonDocument
                            {
                                { "type", "$_id.type" },
                                { "count", "$Count" }
                            }
                        }
                    }
                }
            })
                         .Project(new BsonDocument
            {
                { "Number", "$Number" },
                { "CountPerType", "$CountPerType" },
                { "TotalCapacity", "$TotalCapacity" }
            })
                         .ToListAsync();

            return(result.Select(r => r.AsHousingDetailedInfo()).ToList());
        }
Ejemplo n.º 12
0
 public async Task <IEnumerable <Housing> > GetAllAsync()
 {
     return(await Housings.Find(_ => true).ToListAsync());
 }
Ejemplo n.º 13
0
        public async Task <Housing> AddAsync(Housing housing)
        {
            await Housings.InsertOneAsync(housing);

            return(housing);
        }
Ejemplo n.º 14
0
        public async Task RemoveAsync(Housing housing)
        {
            var filter = Builders <Housing> .Filter.Eq("Id", housing.Id);

            await Housings.DeleteOneAsync(filter);
        }