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); }
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); } }
/// <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); }
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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
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); }
/// <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()); }
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); }
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); }
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); }
/// <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); }
/// <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]); } }
/// <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]); } }
/// <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); }
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]); } }
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."); } }
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."); } }
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); }
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); }
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); }
/// <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); } } } }
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>()); }