Example #1
0
        public async Task MessageReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            var message = await result as Activity;

            var userInput = (message.Text != null ? message.Text : "").Split(new[] { ' ' }, 2);
            var command   = userInput[0];
            var content   = userInput.Length < 2 ? "" : userInput[1];

            // Create a reply.
            IMessageActivity reply = context.MakeMessage();

            // When users types in "note" without the content, give them instructions.
            if (String.IsNullOrWhiteSpace(content))
            {
                reply.Text = Resources.NOTE_NO_CONTENT;
            }
            // Save the note.
            else
            {
                var userId          = context.Activity.From.Id;
                var notesCollection = DbSingleton.GetDatabase().GetCollection <Note>(Resources.ALL_NOTES);
                notesCollection.InsertOne(CreateNote(userId, content));

                reply.Attachments.Add(GetNoteAddedCard(content).ToAttachment());
            }

            await context.PostAsync(reply);

            context.Done <object>(null);
        }
Example #2
0
        public static List <Store> getClosesStores(Double[] coords)
        {
            var storeCollection = DbSingleton.GetDatabase().GetCollection <Store>(AppSettings.StoreCollection);
            var filter          = Builders <Store> .Filter.Empty;
            //var s = Builders<Store>.Sort.Ascending(o => (o.Coordinates[0] -1000));
            // var sort = Builders<Store>.Sort.Ascending(o => o.Coordinates);// calcDist(o.Coordinates,coords));

            var stores = storeCollection.Find(filter).ToList();

            foreach (Store s in stores)
            {
                s.calculateProximity(coords);
            }

            var sorted = stores.OrderBy(o => o.proximity).ToList();

            /* var s = stores.Sort(sort);
             * var a = s.Count();
             * var y =s.ToList();*/

            if (sorted.Count() == 0)
            {
                return(new List <Store>());
            }
            else
            {
                return(sorted);
            }
        }
Example #3
0
        /// <summary>
        /// Adds a filter in the search of a product and saves it in the user context.
        /// </summary>
        /// <param name="user"></param>
        /// <param name="filterName"></param>
        /// <param name="op"></param>
        /// <param name="value"></param>
        public static void AddFilter(User user, string filterName, string op, string value)
        {
            Filter f = new Filter()
            {
                FilterName = filterName,
                Operator   = op,
                Value      = value
            };

            var contextCollection = DbSingleton.GetDatabase().GetCollection <Context>(AppSettings.ContextCollection);

            var filter = Builders <Context> .Filter.And(
                Builders <Context> .Filter.Eq(o => o.UserId, user.Id),           //same user id
                Builders <Context> .Filter.Eq(o => o.Country, user.Country));    //same country (shard)

            // filters are cleaned if they had expired
            if (FiltersHaveExpired(user))
            {
                CleanFilters(user);
            }

            // update filters
            var update = Builders <Context> .Update.Push(o => o.Filters, f);  //push new filters

            contextCollection.UpdateOne(filter, update);

            // update date of the last added/removed filter
            update = Builders <Context> .Update.Set <string>(c => c.LastFilter, DateTime.Now.ToString(dateFormat));

            contextCollection.UpdateOne(filter, update);
        }
Example #4
0
        public static void DeleteCustomer(ObjectId userId)
        {
            var collection = DbSingleton.GetDatabase().GetCollection <Customer>(CRM_COLLECTION);
            var filter     = Builders <Customer> .Filter.Eq(c => c.UserId, userId);

            collection.DeleteOne(filter);
        }
        public static List <Product> getProducts(string[] productsIds)
        {
            var productCollection = DbSingleton.GetDatabase().GetCollection <Product>(AppSettings.ProductsCollection);
            var filter            = MongoDB.Driver.Builders <Product> .Filter.In(p => p.Id.ToString(), productsIds);

            return(productCollection.Find(filter).ToList());
        }
        public async static Task ShowInStoreLocation(IDialogContext context, string productId, string storeId)
        {
            var collection = DbSingleton.GetDatabase().GetCollection <Store>(AppSettings.StoreCollection);

            //get store
            var query_id = Builders <Store> .Filter.Eq("_id", ObjectId.Parse(storeId));

            var entity = collection.Find(query_id).ToList();

            var store   = entity[0];
            var message = "O produto encontra-se no ";

            await Interactions.SendMessage(context, "Vou verificar a localização do produto dentro da loja. Aguarde.", 0, 4000);

            for (int i = 0; i < store.ProductsInStock.Count(); i++)
            {
                if (store.ProductsInStock[i].ProductId.ToString().Equals(productId))
                {
                    message += "no corredor " + store.ProductsInStock[i].InStoreLocation.Corridor + ", ";
                    message += "da secção " + store.ProductsInStock[i].InStoreLocation.Section + " e na ";
                    message += "prateleira " + store.ProductsInStock[i].InStoreLocation.Shelf + "";
                    break;
                }
            }

            await Interactions.SendMessage(context, message, 0, 0);
        }
        // Delete all notes given user ID, and returns the number of deleted notes on success.
        private static async Task <long> DeleteNotes(string userId)
        {
            var collection = DbSingleton.GetDatabase().GetCollection <Note>(AppSettings.CollectionName);
            var filter     = Builders <Note> .Filter.Where(x => x.UserId == userId);

            var response = await collection.DeleteManyAsync(filter);

            return(response.DeletedCount);
        }
Example #8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="id"></param>
        public static void DeleteUser(User user)
        {
            var userCollection = DbSingleton.GetDatabase().GetCollection <User>(AppSettings.UserCollection);
            var filter         = Builders <User> .Filter.And(
                Builders <User> .Filter.Eq(o => o.Country, user.Country),
                Builders <User> .Filter.Eq(o => o.Id, user.Id));

            userCollection.DeleteOne(filter);
        }
Example #9
0
        /// <summary>
        /// Delete context
        /// </summary>
        /// <param name="userId"></param>
        public static void DeleteContext(Context context)
        {
            var contextCollection = DbSingleton.GetDatabase().GetCollection <Context>(AppSettings.ContextCollection);
            var filter            = Builders <Context> .Filter.And(
                Builders <Context> .Filter.Eq(o => o.Country, context.Country),
                Builders <Context> .Filter.Eq(o => o.Id, context.Id)
                );

            contextCollection.DeleteOne(filter);
        }
Example #10
0
        /// <summary>
        /// Sets the user information.
        /// </summary>
        /// <param name="user"></param>
        /// <param name="name"></param>
        /// <param name="email"></param>
        /// <param name="customerId"></param>
        public static void SetUserInfo(ObjectId id, string country, string name, string email, string customerId, string gender)
        {
            var userCollection = DbSingleton.GetDatabase().GetCollection <User>(AppSettings.UserCollection);
            var update         = Builders <User> .Update.Set(o => o.Name, name).Set(o => o.Email, email).Set(o => o.CustomerCard, customerId).Set(o => o.Gender, gender);

            var filter = Builders <User> .Filter.And(
                Builders <User> .Filter.Eq(o => o.Id, id),
                Builders <User> .Filter.Eq(o => o.Country, country));

            userCollection.UpdateOne(filter, update);
        }
Example #11
0
        /// <summary>
        /// Sets the user email.
        /// </summary>
        /// <param name="user"></param>
        /// <param name="name"></param>
        public static void SetCustomerName(User user, string name)
        {
            var userCollection = DbSingleton.GetDatabase().GetCollection <User>(AppSettings.UserCollection);
            var update         = Builders <User> .Update.Set(o => o.Name, name);

            var filter = Builders <User> .Filter.And(
                Builders <User> .Filter.Eq(o => o.Id, user.Id),
                Builders <User> .Filter.Eq(o => o.Country, user.Country));

            userCollection.UpdateOne(filter, update);
        }
Example #12
0
        public static void RemComparator(User user, string productId)
        {
            var contextCollection = DbSingleton.GetDatabase().GetCollection <Context>(AppSettings.ContextCollection);

            var filter = Builders <Context> .Filter.And(
                Builders <Context> .Filter.Eq(o => o.UserId, user.Id),           //same user id
                Builders <Context> .Filter.Eq(o => o.Country, user.Country));    //same country (shard)

            var update = Builders <Context> .Update.Pull(o => o.Comparator, ObjectId.Parse(productId));

            contextCollection.UpdateOne(filter, update);
        }
Example #13
0
        /// <summary>
        /// Removes all the filters in the search of a product and saves is in the user context.
        /// </summary>
        /// <param name="user"></param>
        public static void CleanFilters(User user)
        {
            var contextCollection = DbSingleton.GetDatabase().GetCollection <Context>(AppSettings.ContextCollection);

            var filter = Builders <Context> .Filter.And(
                Builders <Context> .Filter.Eq(o => o.UserId, user.Id),           //same user id
                Builders <Context> .Filter.Eq(o => o.Country, user.Country));    //same country (shard)

            var update = Builders <Context> .Update.Set(o => o.Filters, new Filter[] { });

            contextCollection.UpdateOne(filter, update);
        }
        public static List <Product> getProductsFilter(FilterDefinition <Product> filter, int limit, ObjectId last_id_fetch)
        {
            if (last_id_fetch != null)
            {
                filter &= Builders <Product> .Filter.Gt(p => p.Id, last_id_fetch);
            }

            var productCollection = DbSingleton.GetDatabase().GetCollection <Product>(AppSettings.ProductsCollection);

            return(productCollection.Find(filter)
                   .SortBy(p => p.Id)
                   .Limit(limit).ToList());
        }
Example #15
0
        public static void AddComparator(User user, string productId)
        {
            var contextCollection = DbSingleton.GetDatabase().GetCollection <Context>(AppSettings.ContextCollection);

            var filter = Builders <Context> .Filter.And(
                Builders <Context> .Filter.Eq(o => o.UserId, user.Id),                                  //same user id
                Builders <Context> .Filter.Eq(o => o.Country, user.Country),                            //same country (shard)
                Builders <Context> .Filter.Not(
                    Builders <Context> .Filter.AnyEq(o => o.Comparator, ObjectId.Parse(productId))));   //don't contain the product already

            var update = Builders <Context> .Update.Push(o => o.Comparator, ObjectId.Parse(productId)); //push new wish

            contextCollection.UpdateOne(filter, update);
        }
Example #16
0
        private static List <Note> GetNotesForUser(string userId, string searchText)
        {
            var collection = DbSingleton.GetDatabase().GetCollection <Note>(Resources.ALL_NOTES);
            var filter     = Builders <Note> .Filter.Where(x => x.UserId == userId);

            if (!String.IsNullOrEmpty(searchText))
            {
                filter = filter & Builders <Note> .Filter.Where(x => x.Content.Contains(searchText));
            }

            var notes = collection.Find(filter).ToList();

            return(notes);
        }
Example #17
0
        public static async Task ShowStores(IDialogContext context, string productId)
        {
            var reply = context.MakeMessage();

            var storeCollection = DbSingleton.GetDatabase().GetCollection <Store>(AppSettings.StoreCollection);
            var filter          = Builders <Store> .Filter.Empty;

            List <Store> stores       = storeCollection.Find(filter).ToList();
            List <Store> storesWStock = new List <Store>();

            for (int i = 0; i < stores.Count(); i++)
            {
                for (int j = 0; j < stores[i].ProductsInStock.Count(); j++)
                {
                    if (stores[i].ProductsInStock[j].ProductId.ToString().Equals(productId))
                    {
                        if (stores[i].ProductsInStock[j].Stock > 0 && storesWStock.Count() <= N_STORES_MAX)
                        {
                            storesWStock.Add(stores[i]);
                            break;
                        }
                    }
                }
            }

            var text = "";

            if (storesWStock.Count() == 0)
            {
                reply.AttachmentLayout = AttachmentLayoutTypes.List;
                text = Interactions.getStockFail();
            }
            else
            {
                text = Interactions.getStockSuccess();
                reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;
                List <Attachment> cards = new List <Attachment>();

                for (var i = 0; i < storesWStock.Count() && i < 7; i++)
                {
                    cards.Add(StoreCard.GetStoreDetailsCard(storesWStock[i], productId).ToAttachment());
                }

                reply.Attachments = cards;
            }
            await Interactions.SendMessage(context, text, 0, 2000);

            await context.PostAsync(reply);
        }
Example #18
0
        /// <summary>
        /// Creates a new user.
        /// </summary>
        /// <param name="channelId"></param>
        /// <param name="email"></param>
        /// <param name="name"></param>
        /// <param name="country"></param>
        public static void CreateUser(string email, string name, string country, string gender)
        {
            User u = new User()
            {
                Name         = name,
                Email        = email,
                Country      = country,
                CustomerCard = "",
                Gender       = gender
            };

            var userCollection = DbSingleton.GetDatabase().GetCollection <User>(AppSettings.UserCollection);

            userCollection.InsertOne(u);
        }
Example #19
0
        /// <summary>
        /// Get a conversation context related to a user.
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public static Context GetContext(ObjectId userId)
        {
            var contextCollection = DbSingleton.GetDatabase().GetCollection <Context>(AppSettings.ContextCollection);
            var filter            = Builders <Context> .Filter.Eq(c => c.UserId, userId);

            List <Context> context = contextCollection.Find(filter).ToList();

            if (context.Count() == 0)
            {
                return(null);
            }
            else
            {
                return(context[0]);
            }
        }
Example #20
0
        /// <summary>
        /// Get user by customer card.
        /// </summary>
        /// <param name="customerCard"></param>
        /// <returns></returns>
        public static User getUserByCustomerCard(string customerCard)
        {
            var userCollection = DbSingleton.GetDatabase().GetCollection <User>(AppSettings.UserCollection);
            var filter         = Builders <User> .Filter.Eq(u => u.CustomerCard, customerCard);

            List <User> user = userCollection.Find(filter).ToList();

            if (user.Count() == 0)
            {
                return(null);
            }
            else
            {
                return(user[0]);
            }
        }
        public static Product getProduct(string id)
        {
            var productCollection = DbSingleton.GetDatabase().GetCollection <Product>(AppSettings.ProductsCollection);
            var filter            = MongoDB.Driver.Builders <Product> .Filter.Eq(p => p.Id, ObjectId.Parse(id));

            List <Product> context = productCollection.Find(filter).ToList();

            if (context.Count() == 0)
            {
                return(null);
            }
            else
            {
                return(context[0]);
            }
        }
Example #22
0
        /// <summary>
        /// Create a context related to a user.
        /// </summary>
        /// <param name="userId"></param>
        public static void CreateContext(User user)
        {
            var contextCollection = DbSingleton.GetDatabase().GetCollection <Context>(AppSettings.ContextCollection);

            Context c = new Context()
            {
                UserId     = user.Id,
                LastFilter = DateTime.Now.ToString(dateFormat),
                Country    = user.Country,
                Filters    = new Filter[] { },
                WishList   = new ObjectId[] { },
                Comparator = new ObjectId[] { }
            };

            contextCollection.InsertOne(c);
        }
Example #23
0
        public static Customer GetCustomer(ObjectId userId)
        {
            var collection = DbSingleton.GetDatabase().GetCollection <Customer>(CRM_COLLECTION);
            var filter     = Builders <Customer> .Filter.Eq(c => c.UserId, userId);

            List <Customer> customer = collection.Find(filter).ToList();

            if (customer.Count() == 0)
            {
                return(null);
            }
            else
            {
                return(customer[0]);
            }
        }
Example #24
0
        public static void AddFilterUsage(ObjectId customerId, string country, Filter productFilter)
        {
            var collection = DbSingleton.GetDatabase().GetCollection <Customer>(CRM_COLLECTION);
            var filter     = Builders <Customer> .Filter.And(
                Builders <Customer> .Filter.Eq(c => c.UserId, customerId),
                Builders <Customer> .Filter.Eq(c => c.Country, country));

            UpdateDefinition <Customer> update;

            Customer customer = GetCustomer(customerId);

            if (customer != null)
            {
                for (int i = 0; i < customer.FiltersCount.Length; i++)
                {
                    //found same filter => increment search count
                    if (customer.FiltersCount[i].Filter.Equals(productFilter))
                    {
                        var currentFilterSearches = customer.FiltersCount[i];
                        var newNumberOfSearches   = currentFilterSearches.NSearches + 1;

                        update = Builders <Customer> .Update.Set(c => c.FiltersCount[i].NSearches, newNumberOfSearches);

                        collection.UpdateOne(filter, update);

                        return;
                    }
                }

                // if the product has not been clicked before

                Customer.FilterCount filterCount = new Customer.FilterCount
                {
                    Filter    = productFilter,
                    NSearches = 1
                };

                update = Builders <Customer> .Update.Push(c => c.FiltersCount, filterCount);

                collection.UpdateOne(filter, update);
            }
            else
            {
                throw new Exception("Customer not found.");
            }
        }
Example #25
0
        public static void AddProductClick(ObjectId userId, string country, ObjectId clickedProductId)
        {
            var collection = DbSingleton.GetDatabase().GetCollection <Customer>(CRM_COLLECTION);
            var filter     = Builders <Customer> .Filter.And(
                Builders <Customer> .Filter.Eq(c => c.UserId, userId),
                Builders <Customer> .Filter.Eq(c => c.Country, country));

            UpdateDefinition <Customer> update;

            Customer customer = GetCustomer(userId);

            if (customer != null)
            {
                for (int i = 0; i < customer.ProductsClicks.Length; i++)
                {
                    if (customer.ProductsClicks[i].ProductId.Equals(clickedProductId))
                    {
                        var currentProductClicksElement = customer.ProductsClicks[i];
                        var newNumberOfClicks           = currentProductClicksElement.NClicks + 1;

                        update = Builders <Customer> .Update.Set(c => c.ProductsClicks[i].NClicks, newNumberOfClicks);

                        collection.UpdateOne(filter, update);

                        return;
                    }
                }

                // if the product has not been clicked before

                Customer.ProductClicks productClick = new Customer.ProductClicks
                {
                    ProductId = clickedProductId,
                    NClicks   = 1
                };

                update = Builders <Customer> .Update.Push(c => c.ProductsClicks, productClick);

                collection.UpdateOne(filter, update);
            }
            else
            {
                throw new Exception("Customer not found.");
            }
        }
Example #26
0
        public static void AddPurchase(ObjectId userId, string country, ObjectId boughtProductId)
        {
            var collection = DbSingleton.GetDatabase().GetCollection <Customer>(CRM_COLLECTION);

            Customer.ProductBought productBought = new Customer.ProductBought
            {
                ProductId = boughtProductId,
                Date      = DateTime.Now
            };

            var update = Builders <Customer> .Update.Push(c => c.ProductsBought, productBought);

            var filter = Builders <Customer> .Filter.And(
                Builders <Customer> .Filter.Eq(c => c.UserId, userId),
                Builders <Customer> .Filter.Eq(c => c.Country, country));

            collection.UpdateOne(filter, update);
        }
Example #27
0
        public static List <Product> GetSimilarProducts(ObjectId productId)
        {
            const double PRICE_RANGE = 50;

            List <Product> similarProducts = new List <Product>();

            Product p = ProductController.getProduct(productId.ToString());

            var collection = DbSingleton.GetDatabase().GetCollection <Product>(AppSettings.ProductsCollection);

            var filter = Builders <Product> .Filter.And(
                Builders <Product> .Filter.Gte(o => o.Price, p.Price - PRICE_RANGE),
                Builders <Product> .Filter.Lte(o => o.Price, p.Price + PRICE_RANGE),
                Builders <Product> .Filter.Eq(o => o.ScreenDiagonal, p.ScreenDiagonal));

            similarProducts = collection.Find(filter).ToList();

            return(similarProducts);
        }
Example #28
0
        public static ObjectId AddCustomer(User user)
        {
            Customer c = new Customer
            {
                Country        = user.Country,
                UserId         = user.Id,
                FiltersCount   = new Customer.FilterCount[] { },
                ProductsBought = new Customer.ProductBought[] { },
                ProductsClicks = new Customer.ProductClicks[] { }
            };

            if (c.Country == null)
            {
                throw new Exception("A customer must contain a non-null country field, because 'country' is a shard key in Mongo.");
            }

            var collection = DbSingleton.GetDatabase().GetCollection <Customer>(CRM_COLLECTION);

            collection.InsertOne(c);

            return(c.Id);
        }
Example #29
0
        /// <summary>
        /// Removes a filter frin the search of a product and saves it in the user context.
        /// </summary>
        /// <param name="user"></param>
        /// <param name="filterName"></param>
        public static void RemFilter(User user, string filterName)
        {
            var contextCollection = DbSingleton.GetDatabase().GetCollection <Context>(AppSettings.ContextCollection);

            var filter = Builders <Context> .Filter.And(
                Builders <Context> .Filter.Eq(o => o.UserId, user.Id),           //same user id
                Builders <Context> .Filter.Eq(o => o.Country, user.Country));    //same country (shard)

            // filters are cleaned if they had expired
            var tmp = contextCollection.Find(filter).ToList();

            if (tmp.Count != 0)
            {
                Filter[] filters = tmp[0].Filters;

                if (filters.Length > 0)
                {
                    if (FiltersHaveExpired(user))
                    {
                        CleanFilters(user);
                    }
                    else
                    {
                        //remove filter of filters array
                        var newFilters = filters.Where(val => val.FilterName != filterName).ToArray();

                        var update = Builders <Context> .Update.Set(o => o.Filters, newFilters);

                        contextCollection.UpdateOne(filter, update);

                        // update date of the last added/removed filter
                        update = Builders <Context> .Update.Set <string>(c => c.LastFilter, DateTime.Now.ToString(dateFormat));

                        contextCollection.UpdateOne(filter, update);
                    }
                }
            }
        }
Example #30
0
        public static List <Filter> getFilters(User user)
        {
            var contextCollection = DbSingleton.GetDatabase().GetCollection <Context>(AppSettings.ContextCollection);

            var filter = Builders <Context> .Filter.And(
                Builders <Context> .Filter.Eq(o => o.UserId, user.Id),           //same user id
                Builders <Context> .Filter.Eq(o => o.Country, user.Country));    //same country (shard)

            // filters are cleaned if they had expired
            if (FiltersHaveExpired(user))
            {
                CleanFilters(user);
            }

            var tmp = contextCollection.Find(filter).ToList();

            if (tmp.Count != 0)
            {
                return(tmp[0].Filters.ToList <Filter>());
            }

            return(new List <Filter>());
        }