public async Task <T> Add <T>(T toAdd)
        {
            var          typeName      = toAdd.GetType().Name;
            var          collection    = mongoDb.GetCollection <BsonDocument>(typeName);
            BsonDocument dbModel       = new BsonDocument();
            var          filterBuilder = Builders <BsonDocument> .Filter;

            switch (typeName)
            {
            case "Rating":
                var rateTyped = DynamicTyping.ConvertValue <Rating>(toAdd);
                dbModel = new BsonDocument {
                    { "RestaurantId", rateTyped.RestaurantId }, { "Value", rateTyped.Value }
                };
                break;

            case "Restaurant":
                var resTyped = DynamicTyping.ConvertValue <Restaurant>(toAdd);
                dbModel = new BsonDocument {
                    { "Name", resTyped.Name }, { "CuisineType", resTyped.CuisineType }
                };
                var existingRestaurants = await mongoDb.GetCollection <BsonDocument>("Restaurant").FindAsync(filterBuilder.Eq("Name", resTyped.Name) & filterBuilder.Ne("Archived", "true"));

                if (existingRestaurants.Any())
                {
                    throw new ArgumentException("Sorry, that restaurant is already in the system");
                }
                await collection.InsertOneAsync(dbModel);

                // return the id back out to the client in case they want to turn around and edit without reloading the data
                ((Restaurant)(object)toAdd).Id = dbModel.GetValue("_id").ToString();
                return(toAdd);

            case "AppUser":
                var userTyped = DynamicTyping.ConvertValue <AppUser>(toAdd);
                dbModel = new BsonDocument {
                    { "UserName", userTyped.UserName }, { "PassHash", userTyped.PassHash }
                };

                var existingUsers = await mongoDb.GetCollection <BsonDocument>("AppUser").FindAsync(filterBuilder.Eq("UserName", userTyped.UserName));

                if (existingUsers.Any())
                {
                    throw new ArgumentException("Sorry, that username is already in use");
                }
                break;
            }
            await collection.InsertOneAsync(dbModel);

            return(toAdd);
        }
Beispiel #2
0
        public async Task <T> Update <T>(T toUpdate)
        {
            switch (toUpdate.GetType().Name)
            {
            case "Restaurant":
                var typedUpdate = DynamicTyping.ConvertValue <Restaurant>(toUpdate);
                context.Restaurants.Attach(typedUpdate);
                context.Entry(typedUpdate).State = EntityState.Modified;
                break;

            default:
                throw new NotImplementedException();
            }
            await context.SaveChangesAsync();

            return(toUpdate);
        }
Beispiel #3
0
        public async Task Remove <T>(T toRemove)
        {
            switch (toRemove.GetType().Name)
            {
            case "Restaurant":
                var typedUpdate = DynamicTyping.ConvertValue <Restaurant>(toRemove);
                var existing    = await context.Restaurants.FindAsync(typedUpdate.Id);

                existing.Archived = true;
                context.Restaurants.Attach(existing);
                context.Entry(existing).State = EntityState.Modified;
                break;

            default:
                throw new NotImplementedException();
            }
            await context.SaveChangesAsync();
        }
        public async Task <T> Update <T>(T toUpdate)
        {
            var typeName   = toUpdate.GetType().Name;
            var collection = mongoDb.GetCollection <BsonDocument>(typeName);

            switch (typeName)
            {
            case "Restaurant":
                var resTyped = DynamicTyping.ConvertValue <Restaurant>(toUpdate);
                var filter   = Builders <BsonDocument> .Filter.Eq("_id", ObjectId.Parse(resTyped.Id));

                var update = Builders <BsonDocument> .Update.Set("Name", resTyped.Name).Set("CuisineType", resTyped.CuisineType);

                var result = await collection.UpdateOneAsync(filter, update);

                return(toUpdate);

            default:
                throw new NotImplementedException();
            }
        }
Beispiel #5
0
        public async Task <T> Add <T>(T toAdd)
        {
            switch (toAdd.GetType().Name)
            {
            case "Rating":
                var dbRat = DynamicTyping.ConvertValue <Rating>(toAdd);
                dbRat.Id = Guid.NewGuid().ToString();
                context.Ratings.Add(dbRat);
                break;

            case "Restaurant":
                var dbRes = DynamicTyping.ConvertValue <Restaurant>(toAdd);
                dbRes.Id = Guid.NewGuid().ToString();
                context.Restaurants.Add(dbRes);
                break;

            case "AppUser":
                context.Users.Add(DynamicTyping.ConvertValue <AppUser>(toAdd));
                break;
            }
            await context.SaveChangesAsync();

            return(toAdd);
        }