public async Task <IHttpActionResult> SendByNickname([FromBody] Message i_Message)
        {
            string nickname = Thread.CurrentPrincipal.Identity.Name;

            if (i_Message.Sender != nickname)
            {
                return(BadRequest("Nicknames do not match."));
            }

            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                FacebookAccount account = await entities.FacebookAccounts.FirstOrDefaultAsync(e => e.Nickname == i_Message.Receiver);

                if (account == null)
                {
                    return(BadRequest("The receiver nickname was not found."));
                }
                i_Message.Time = DateTime.UtcNow;
                entities.Messages.Add(i_Message);
                if (account.ChatPartner != i_Message.Sender)
                {
                    TodoItem todoItem = new TodoItem();
                    todoItem.Text = i_Message.Sender + ";" + account.Nickname + ";sendChatMessage;" + i_Message.Content;
                    var response = await client.PostAsJsonAsync("tables/TodoItem/PostTodoItem?ZUMO-API-VERSION=2.0.0", todoItem);
                }
                await entities.SaveChangesAsync();

                return(Ok());
            }
        }
Example #2
0
        public async Task <IHttpActionResult> AddProposal([FromBody] Proposal i_ParkingSpotProposal)
        {
            string nickname = Thread.CurrentPrincipal.Identity.Name;

            if (i_ParkingSpotProposal.Nickname != nickname)
            {
                return(BadRequest("Nicknames do not match."));
            }

            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                Proposal result = await entities.Proposals.FirstOrDefaultAsync(e => e.Nickname == nickname);

                if (result != null)
                {
                    entities.Proposals.Remove(result);
                }
                i_ParkingSpotProposal.TimeOpened = DateTime.UtcNow;
                entities.Proposals.Add(i_ParkingSpotProposal);
                FacebookAccount proposerAccount = await entities.FacebookAccounts.FirstOrDefaultAsync(e => e.Nickname == nickname);

                proposerAccount.Rank++;
                await entities.SaveChangesAsync();

                return(Ok());
            }
        }
 public static bool Authenticate(string i_Nickname, string i_SID)
 {
     using (CarWatchDBEntities entities = new CarWatchDBEntities())
     {
         return(entities.FacebookAccounts.Any(user => user.Nickname == i_Nickname && user.FacebookSID == i_SID));
     }
 }
        public async Task <IHttpActionResult> Register([FromBody] FacebookAccount i_Account)
        {
            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                var isExistNickname = await entities.FacebookAccounts.AnyAsync(e => e.Nickname == i_Account.Nickname);

                if (isExistNickname)
                {
                    return(BadRequest("nameinuse"));
                }

                if (i_Account.LicensePlate != null)
                {
                    var isExistLicensePlate = await entities.FacebookAccounts.AnyAsync(e => e.LicensePlate == i_Account.LicensePlate);

                    if (isExistLicensePlate)
                    {
                        return(BadRequest("licenseinuse"));
                    }
                }

                entities.FacebookAccounts.Add(i_Account);
                await entities.SaveChangesAsync();

                return(Ok());
            }
        }
Example #5
0
        public async Task <IHttpActionResult> CheckExchange(Object obj)
        {
            string nickname = Thread.CurrentPrincipal.Identity.Name;

            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                Exchange result = await entities.Exchanges.FirstOrDefaultAsync(e => (e.ConsumerNickname == nickname || e.ProviderNickname == nickname) && e.Status == 0);

                return(Ok(result));
            }
        }
Example #6
0
        public async Task <IHttpActionResult> CheckProposal(Object obj)
        {
            string nickname = Thread.CurrentPrincipal.Identity.Name;

            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                Proposal result = await entities.Proposals.FirstOrDefaultAsync(e => e.Nickname == nickname);

                return(Ok(result));
            }
        }
        public async Task <IHttpActionResult> GetUnreadMessages([FromBody] ConversationMessage i_ConversationMessage)
        {
            string nickname = Thread.CurrentPrincipal.Identity.Name;

            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                List <Message> messages = await entities.Messages.Where(e => ((e.Sender == nickname && e.Receiver == i_ConversationMessage.Nickname) || (e.Sender == i_ConversationMessage.Nickname && e.Receiver == nickname)) && e.Time > i_ConversationMessage.Time).ToListAsync();

                messages.Sort(new MessageComparer());
                return(Ok(messages));
            }
        }
        public async Task <IHttpActionResult> LoginWithFacebook([FromBody] FacebookAccount i_Account)
        {
            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                var isExistSID = await entities.FacebookAccounts.AnyAsync(e => e.FacebookSID == i_Account.FacebookSID);

                if (isExistSID)
                {
                    var account = await entities.FacebookAccounts.Where(e => e.FacebookSID == i_Account.FacebookSID).FirstOrDefaultAsync();

                    return(Ok(account));
                }
                return(NotFound());
            }
        }
        public async Task <IHttpActionResult> GetSIDByLicensePlate([FromBody] FacebookAccount i_Account)
        {
            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                var isExist = await entities.FacebookAccounts.AnyAsync(e => e.LicensePlate == i_Account.LicensePlate);

                if (!isExist)
                {
                    return(BadRequest("This license plate is not registered."));
                }
                var result = await entities.FacebookAccounts.Where(e => e.LicensePlate == i_Account.LicensePlate).FirstOrDefaultAsync();

                return(Ok(result.FacebookSID));
            }
        }
Example #10
0
        public async Task <IHttpActionResult> SendProximityAlert(Object obj)
        {
            string nickname = Thread.CurrentPrincipal.Identity.Name;

            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                Exchange result = await entities.Exchanges.FirstOrDefaultAsync(e => (e.ProviderNickname == nickname || e.ConsumerNickname == nickname) && e.Status == 0);

                if (result == null)
                {
                    return(BadRequest("you are not involved with an open exchange."));
                }
                pushToClient(result.ConsumerNickname, "sendExchangeAlert", k_MessageToSearcher);
                pushToClient(result.ProviderNickname, "sendExchangeAlert", k_MessageToProposer);
                return(Ok());
            }
        }
        public async Task <IHttpActionResult> SetChatPartner([FromBody] ChatPartner i_Partner)
        {
            string nickname = Thread.CurrentPrincipal.Identity.Name;

            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                FacebookAccount account = await entities.FacebookAccounts.FirstOrDefaultAsync(e => e.Nickname == nickname);

                if (account == null)
                {
                    return(BadRequest("This nickname is not registered."));
                }
                account.ChatPartner = i_Partner.Partner;
                await entities.SaveChangesAsync();

                return(Ok());
            }
        }
Example #12
0
        public async Task <IHttpActionResult> RemoveSearch(Object obj)
        {
            string nickname = Thread.CurrentPrincipal.Identity.Name;

            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                Search result = await entities.Searches.FirstOrDefaultAsync(e => e.Nickname == nickname);

                if (result == null)
                {
                    return(BadRequest("This nickname has not been searching for a parking spot."));
                }
                entities.Searches.Remove(result);
                await entities.SaveChangesAsync();

                return(Ok());
            }
        }
Example #13
0
        public async Task <IHttpActionResult> GetDriverLocation(Object obj)
        {
            string nickname = Thread.CurrentPrincipal.Identity.Name;

            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                Exchange result = await entities.Exchanges.FirstOrDefaultAsync(e => e.ProviderNickname == nickname && e.Status == 0);

                if (result == null)
                {
                    return(BadRequest("you are not involved with an open exchange."));
                }
                Point point = new Point();
                point.Longitude = result.DriverLongitude;
                point.Latitude  = result.DriverLatitude;
                return(Ok(point));
            }
        }
        public async Task <IHttpActionResult> GetContacts([FromBody] MessageDetails i_Message)
        {
            string nickname = Thread.CurrentPrincipal.Identity.Name;

            if (i_Message.Sender != nickname)
            {
                return(BadRequest("Nicknames do not match."));
            }

            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                List <string>  nicknameList = new List <string>();
                List <Message> messages     = await entities.Messages.Where(e => (e.Sender == i_Message.Sender) || (e.Receiver == i_Message.Sender)).ToListAsync();

                foreach (Message msg in messages)
                {
                    if (i_Message.Sender != msg.Sender)
                    {
                        if (!nicknameList.Contains(msg.Sender))
                        {
                            nicknameList.Add(msg.Sender);
                        }
                    }
                    else
                    {
                        if (!nicknameList.Contains(msg.Receiver))
                        {
                            nicknameList.Add(msg.Receiver);
                        }
                    }
                }

                FacebookAccount        account;
                List <FacebookAccount> fbList = new List <FacebookAccount>();
                foreach (string item in nicknameList)
                {
                    account = await entities.FacebookAccounts.Where(e => e.Nickname == item).FirstOrDefaultAsync();

                    fbList.Add(account);
                }
                return(Ok(fbList));
            }
        }
Example #15
0
        public async Task <IHttpActionResult> UpdateDriverLocation(Point i_Point)
        {
            string nickname = Thread.CurrentPrincipal.Identity.Name;

            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                Exchange result = await entities.Exchanges.FirstOrDefaultAsync(e => e.ConsumerNickname == nickname && e.Status == 0);

                if (result == null)
                {
                    return(BadRequest("you are not involved with an open exchange."));
                }
                result.DriverLongitude = i_Point.Longitude;
                result.DriverLatitude  = i_Point.Latitude;
                await entities.SaveChangesAsync();

                return(Ok());
            }
        }
Example #16
0
        public async void Match()
        {
            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                while (true)
                {
                    List <Proposal> proposalList = entities.Proposals.ToList();
                    foreach (Proposal proposal in proposalList)
                    {
                        List <Search> searchList = await entities.Searches.Where(
                            e => 2 *k_EarthRadius *(SqlFunctions.SquareRoot(SqlFunctions.Square(SqlFunctions.Sin((SqlFunctions.Radians(proposal.Latitude) - SqlFunctions.Radians(e.Latitude)) / 2)) + SqlFunctions.Cos(SqlFunctions.Radians(proposal.Latitude)) * SqlFunctions.Cos(SqlFunctions.Radians(e.Latitude)) * SqlFunctions.Square(SqlFunctions.Sin((SqlFunctions.Radians(proposal.Longitude) - SqlFunctions.Radians(e.Longitude)) / 2)))) <= e.Distance).ToListAsync();

                        if (searchList.Count > 0)
                        {
                            List <ExtendedSearch> extendedSearchList = new List <ExtendedSearch>();
                            foreach (Search search in searchList)
                            {
                                FacebookAccount account = await entities.FacebookAccounts.FirstOrDefaultAsync(e => e.Nickname.CompareTo(search.Nickname) == 0);

                                extendedSearchList.Add(new ExtendedSearch(search, account));
                            }
                            extendedSearchList.Sort(new ExtendedSearchComparer());
                            Search   searchToRemove = extendedSearchList[0].Search;
                            Exchange exchange       = createExchangeObject(searchToRemove, proposal);
                            entities.Exchanges.Add(exchange);
                            entities.Searches.Remove(searchToRemove);
                            entities.Proposals.Remove(proposal);
                            FacebookAccount proposerAccount = await entities.FacebookAccounts.FirstOrDefaultAsync(e => e.Nickname.CompareTo(proposal.Nickname) == 0);

                            proposerAccount.Rank += 4;
                            await entities.SaveChangesAsync();

                            sendPushNotifications(searchToRemove, proposal);
                            alertOtherSearchers(extendedSearchList, proposal);
                        }
                    }
                }
            }
        }
        public async Task <IHttpActionResult> SetLicensePlateByNickname([FromBody] FacebookAccount i_Account)
        {
            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                var isExist = await entities.FacebookAccounts.AnyAsync(e => e.Nickname == i_Account.Nickname);

                if (!isExist)
                {
                    return(BadRequest("This nickname is not registered."));
                }
                var isTaken = await entities.FacebookAccounts.AnyAsync(e => e.LicensePlate == i_Account.LicensePlate);

                if (isTaken)
                {
                    return(BadRequest("This license plate is already in use."));
                }
                var result = await entities.FacebookAccounts.Where(e => e.Nickname == i_Account.Nickname).FirstOrDefaultAsync();

                result.LicensePlate = i_Account.LicensePlate;
                await entities.SaveChangesAsync();

                return(Ok());
            }
        }
Example #18
0
        public async Task <IHttpActionResult> AddSearch([FromBody] Search i_ParkingSpotSearch)
        {
            string nickname = Thread.CurrentPrincipal.Identity.Name;

            if (i_ParkingSpotSearch.Nickname != nickname)
            {
                return(BadRequest("Nicknames do not match."));
            }

            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                Search result = await entities.Searches.FirstOrDefaultAsync(e => e.Nickname == nickname);

                if (result != null)
                {
                    entities.Searches.Remove(result);
                }
                i_ParkingSpotSearch.TimeOpened = DateTime.UtcNow;
                entities.Searches.Add(i_ParkingSpotSearch);
                await entities.SaveChangesAsync();

                return(Ok());
            }
        }
Example #19
0
        public async Task <IHttpActionResult> RemoveProposal(Object obj)
        {
            string nickname = Thread.CurrentPrincipal.Identity.Name;

            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                Proposal result = await entities.Proposals.FirstOrDefaultAsync(e => e.Nickname == nickname);

                if (result == null)
                {
                    return(BadRequest("This nickname has not proposed a parking spot."));
                }
                entities.Proposals.Remove(result);
                FacebookAccount proposerAccount = await entities.FacebookAccounts.FirstOrDefaultAsync(e => e.Nickname == nickname);

                if (proposerAccount.Rank > 0)
                {
                    proposerAccount.Rank--;
                }
                await entities.SaveChangesAsync();

                return(Ok());
            }
        }
        public async Task <IHttpActionResult> GetMessageHistoryByTime([FromBody] ConversationMessage i_ConversationMessage)
        {
            string nickname = Thread.CurrentPrincipal.Identity.Name;

            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                List <Message> messages = await entities.Messages.Where(e => ((e.Sender == nickname && e.Receiver == i_ConversationMessage.Nickname) || (e.Sender == i_ConversationMessage.Nickname && e.Receiver == nickname)) && e.Time < i_ConversationMessage.Time).ToListAsync();

                int startingIndex, amountToRetrieve;
                if (messages.Count < k_AmountOfMessagesToUser)
                {
                    startingIndex    = 0;
                    amountToRetrieve = messages.Count;
                }
                else
                {
                    startingIndex    = messages.Count - k_AmountOfMessagesToUser;
                    amountToRetrieve = k_AmountOfMessagesToUser;
                }
                messages.Sort(new MessageComparer());
                List <Message> messagesToUser = messages.GetRange(startingIndex, amountToRetrieve);
                return(Ok(messagesToUser));
            }
        }
Example #21
0
        public async Task <IHttpActionResult> UpdateExchangeStatus([FromBody] ExchangeStatus i_Status)
        {
            string nickname = Thread.CurrentPrincipal.Identity.Name;

            using (CarWatchDBEntities entities = new CarWatchDBEntities())
            {
                Exchange result = await entities.Exchanges.FirstOrDefaultAsync(e => (e.ConsumerNickname == nickname || e.ProviderNickname == nickname) && e.Status == 0);

                if (result == null)
                {
                    return(BadRequest("you are not involved with an open exchange."));
                }

                if (i_Status.status == (int)e_ExchangeStatus.Success)
                {
                    pushToClient(result.ConsumerNickname, "exchangeStatusUpdate", k_ExchangeSuccessMessage);
                    pushToClient(result.ProviderNickname, "exchangeStatusUpdate", k_ExchangeSuccessMessage);
                    FacebookAccount proposer = await entities.FacebookAccounts.FirstOrDefaultAsync(e => e.Nickname == result.ProviderNickname);

                    proposer.Rank += 5;
                }
                else if (i_Status.status == (int)e_ExchangeStatus.CanceledBySearcherPriorArrival)
                {
                    pushToClient(result.ConsumerNickname, "exchangeStatusUpdate", k_ExchangeCancelBySearcherMessage);
                    pushToClient(result.ProviderNickname, "exchangeStatusUpdate", k_ExchangeCancelBySearcherMessage);
                }
                else if (i_Status.status == (int)e_ExchangeStatus.CanceledByProposerPriorArrival)
                {
                    pushToClient(result.ConsumerNickname, "exchangeStatusUpdate", k_ExchangeCancelByProposerMessage);
                    pushToClient(result.ProviderNickname, "exchangeStatusUpdate", k_ExchangeCancelByProposerMessage);
                    FacebookAccount proposerAccount = await entities.FacebookAccounts.FirstOrDefaultAsync(e => e.Nickname == result.ProviderNickname);

                    proposerAccount.Rank -= 2;
                    if (proposerAccount.Rank < 0)
                    {
                        proposerAccount.Rank = 0;
                    }
                }
                else if (i_Status.status == (int)e_ExchangeStatus.CancelNoParkingSpot)
                {
                    pushToClient(result.ConsumerNickname, "exchangeStatusUpdate", k_ExchangeCancelNoParkingSpotMessage);
                    pushToClient(result.ProviderNickname, "exchangeStatusUpdate", k_ExchangeCancelNoParkingSpotMessage);
                    FacebookAccount proposerAccount = await entities.FacebookAccounts.FirstOrDefaultAsync(e => e.Nickname == result.ProviderNickname);

                    proposerAccount.Rank -= 3;
                    if (proposerAccount.Rank < 0)
                    {
                        proposerAccount.Rank = 0;
                    }
                }
                else
                {
                    return(BadRequest("Illegal status code."));
                }
                result.Status        = i_Status.status;
                result.TimeExchanged = DateTime.UtcNow;
                await entities.SaveChangesAsync();

                return(Ok(result));
            }
        }