public HttpResponseMessage PutAddFriend(int id, [FromUri] string sessionKey)
        {
            var context = new SocialLifeContext();

            using (context)
            {
                User userEntity = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();
                if (userEntity == null)
                {
                    throw new ArgumentException("No such logged user.");
                }

                var friends = userEntity.Profile.FriendsList;

                string[] friendsList = {};

                if (!String.IsNullOrEmpty(friends))
                {
                    friendsList = friends.Split(' ', ',');
                }

                foreach (var friend in friendsList)
                {
                    if (id == int.Parse(friend))
                    {
                        throw new ArgumentException("Already in friends list.");
                    }
                }

                if (String.IsNullOrEmpty(friends))
                {
                    friends = id.ToString();
                }
                else
                {
                    friends = friends + "," + id.ToString();
                }

                userEntity.Profile.FriendsList = friends;

                Message addedFriendMessage = new Message()
                {
                    SenderId       = userEntity.UserId,
                    MessageDate    = DateTime.Now,
                    StatusId       = context.Statuses.Where(st => st.StatusName == "Delivered").First().StatusId,
                    ReceiverId     = id,
                    MessageContent = "Hi! I am now following you!"
                };

                context.Messages.Add(addedFriendMessage);

                context.SaveChanges();

                //SEND NOTIFICATION TO OTHER USER!

                var response = Request.CreateResponse(HttpStatusCode.OK);

                return(response);
            }
        }
        public HttpResponseMessage PostCurrentLocation([FromUri] string longitude, [FromUri] string latitude, [FromUri] string sessionKey)
        {
            var context = new SocialLifeContext();

            using (context)
            {
                User userEntity = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();
                if (userEntity == null)
                {
                    throw new ArgumentException("No such logged user.");
                }

                Location userLocation = new Location()
                {
                    UserId    = userEntity.UserId,
                    Latitude  = latitude,
                    Longitude = longitude,
                    Date      = DateTime.Now,
                };

                context.Locations.Add(userLocation);
                context.SaveChanges();

                var response = Request.CreateResponse(HttpStatusCode.OK);
                return(response);
            }
        }
        public HttpResponseMessage PostRegisterUser(UserModel user)
        {
            var context = new SocialLifeContext();

            using (context)
            {
                this.ValidateUsername(user.Username);
                this.ValidateAuthCode(user.AuthCode);
                this.ValidateDisplayName(user.DisplayName);
                var userToAdd = context.Users.Where(us => us.Username == user.Username).FirstOrDefault();

                if (userToAdd == null)
                {
                    userToAdd = new User()
                    {
                        Username    = user.Username,
                        DisplayName = user.DisplayName,
                        AuthCode    = user.AuthCode
                    };

                    context.Users.Add(userToAdd);
                    context.SaveChanges();

                    var userProfile = new Profile()
                    {
                        User   = userToAdd,
                        UserId = userToAdd.UserId,
                    };

                    userProfile.Status = context.Statuses.Where(st => st.StatusName == "Unknown").FirstOrDefault();

                    context.Profiles.Add(userProfile);
                    context.SaveChanges();

                    string sessionKey = userToAdd.SessionKey;

                    if (sessionKey == null)
                    {
                        sessionKey           = CreateSessionKey(userToAdd.UserId);
                        userToAdd.SessionKey = sessionKey;
                        context.SaveChanges();
                    }

                    var registeredUser = new UserModel()
                    {
                        Username    = user.Username,
                        DisplayName = user.DisplayName,
                        SessionKey  = sessionKey,
                        Id          = userToAdd.UserId
                    };

                    var response = Request.CreateResponse <UserModel>(HttpStatusCode.Created, registeredUser); //FIX THIS
                    return(response);
                }
                else
                {
                    throw new ArgumentException("This user already exists.");
                }
            }
        }
        public HttpResponseMessage LoginUser(UserModel user)
        {
            var context = new SocialLifeContext();

            using (context)
            {
                User userEntity = context.Users.Where(us => us.Username == user.Username &&
                                                      us.AuthCode == user.AuthCode).FirstOrDefault();
                if (userEntity == null)
                {
                    throw new ArgumentException("Incorrect user or password.");
                }

                string sessionKey = userEntity.SessionKey;

                if (userEntity.SessionKey == null)
                {
                    sessionKey            = this.CreateSessionKey(userEntity.UserId);
                    userEntity.SessionKey = sessionKey;
                    context.SaveChanges();
                }

                UserModel loggedUser = new UserModel()
                {
                    Username    = userEntity.Username,
                    SessionKey  = sessionKey,
                    DisplayName = userEntity.DisplayName,
                    Id          = userEntity.UserId
                };

                var response = Request.CreateResponse <UserModel>(HttpStatusCode.OK, loggedUser);
                return(response);
            }
        }
Exemple #5
0
        public HttpResponseMessage PostCreateEvent([FromUri]string sessionKey, [FromBody]EventModel newEvent)
        {
            var context = new SocialLifeContext();
            using (context)
            {
                if (ModelState.IsValid)
                {
                    User sender = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();

                    if (sender == null)
                    {
                        throw new ArgumentOutOfRangeException("No such user or invalid key.");
                    }

                    Event eventToAdd = new Event()
                    {
                        EventName = newEvent.Name,
                        EventContent = newEvent.Content,
                        AvatarUrl = newEvent.AvatarUrl,
                        EventDate = newEvent.Date,
                        Messages = new List<Message>(),
                        Users = new List<User>(),
                        //WAIT WUUUUUUT?
                        EventStatus = context.Statuses.Where(st => st.StatusName == newEvent.Status).First(),
                        EventLocation = new Location()
                        {
                            Latitude = newEvent.Latitude,
                            Longitude = newEvent.Longitude,
                            UserId = sender.UserId,
                            Date = newEvent.Date
                        }
                    };
                    eventToAdd.Users.Add(sender);
                    context.Events.Add(eventToAdd);
                    context.SaveChanges();

                    EventModel resultEvent = new EventModel()
                    {
                        EventId = eventToAdd.EventId,
                        Name = eventToAdd.EventName,
                        Content = eventToAdd.EventContent,
                        CreatorName = eventToAdd.Users.First().DisplayName,
                        Date = eventToAdd.EventDate,
                        Latitude = eventToAdd.EventLocation.Latitude,
                        Longitude = eventToAdd.EventLocation.Longitude,
                        Status = eventToAdd.EventStatus.StatusName
                    };

                    HttpResponseMessage successfulResponse = Request.CreateResponse<EventModel>(HttpStatusCode.Created, resultEvent);

                    return successfulResponse;
                }

                return this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState);
            }
        }
Exemple #6
0
        static void Main(string[] args)
        {
            var db = new SocialLifeContext();

            var status = new Status();

            status.StatusName = "Online";
            status.StatusId   = 1;
            db.Statuses.Add(status);
            db.SaveChanges();
        }
Exemple #7
0
        public HttpResponseMessage GetEventInfo(int id, [FromUri]string sessionKey)
        {
            var context = new SocialLifeContext();
            using (context)
            {
                if (ModelState.IsValid)
                {
                    User sender = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();

                    Event chosenEvent = context.Events.Where(ev => ev.EventId == id).FirstOrDefault();

                    if (sender == null || chosenEvent == null)
                    {
                        throw new ArgumentOutOfRangeException("No such user or invalid key.");
                    }

                    var usersList = chosenEvent.Users.ToList();

                    EventModel eventInfo = new EventModel()
                    {
                        Name = chosenEvent.EventName,
                        Content = chosenEvent.EventContent,
                        CreatorName = chosenEvent.Users.First().DisplayName,
                        AvatarUrl = chosenEvent.AvatarUrl,
                        Date = chosenEvent.EventDate,
                        Longitude = chosenEvent.EventLocation.Longitude,
                        Latitude = chosenEvent.EventLocation.Latitude,
                        Status = chosenEvent.EventStatus.StatusName,
                        UsersList = new List<UserModel>()
                    };

                    if (usersList != null)
                    {
                        foreach (var user in usersList)
                        {
                            var newUser = new UserModel()
                            {
                                Username = user.Username,
                                DisplayName = user.DisplayName,
                                Id = user.UserId
                            };
                            eventInfo.UsersList.Add(newUser);
                        }
                    }

                    HttpResponseMessage successfulResponse = Request.CreateResponse<EventModel>(HttpStatusCode.OK, eventInfo);

                    return successfulResponse;
                }

                return this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState);
            }
        }
        public HttpResponseMessage GetEventMessages(int id, [FromUri] string sessionKey)//, [FromUri]int userId)
        {
            var context = new SocialLifeContext();

            using (context)
            {
                User  currentUser = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();
                Event chosenEvent = context.Events.Where(ev => ev.EventId == id).FirstOrDefault();

                if (currentUser == null || chosenEvent == null)
                {
                    throw new ArgumentOutOfRangeException("No such user, event or invalid key.");
                }

                var messages = context.Messages.Where(msg => msg.EventId == id).ToList();
                if (messages == null)
                {
                    throw new ArgumentNullException("No messages found.");
                }

                var orderedMessages = messages.AsQueryable().OrderBy(msg => msg.MessageDate).ToList();

                ICollection <MessageModel> messagesModel = new List <MessageModel>();

                foreach (var singleMessage in orderedMessages)
                {
                    //if the receiver gets a message, it changes the status to "read"
                    var readMessageStatus = context.Statuses.Where(st => st.StatusName == "Read").First().StatusId;

                    if (singleMessage.StatusId != readMessageStatus && singleMessage.SenderId == id)
                    {
                        singleMessage.StatusId = readMessageStatus;
                        context.SaveChanges();
                    }

                    messagesModel.Add(new MessageModel()
                    {
                        Content    = singleMessage.MessageContent,
                        DateString = singleMessage.MessageDate.ToString("dd/MMM/yy H:mm:ss"),
                        Sender     = singleMessage.Sender.DisplayName,
                        Event      = chosenEvent.EventName,
                        Status     = singleMessage.Status.StatusName
                    });
                }

                HttpResponseMessage successfulResponse = Request.CreateResponse <ICollection <MessageModel> >(HttpStatusCode.OK, messagesModel);

                //this.SendNotification(id);
                return(successfulResponse);
            }
        }
        public HttpResponseMessage PostUserMessage([FromUri] string sessionKey, [FromBody] MessageModel message)
        {
            var context = new SocialLifeContext();

            using (context)
            {
                if (ModelState.IsValid)
                {
                    User sender   = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();
                    var  receiver = context.Users.Where(us => us.UserId == message.ReceiverId).FirstOrDefault();

                    if (sender == null || receiver == null)
                    {
                        throw new ArgumentOutOfRangeException("No such user, event or invalid key.");
                    }

                    //CHECK IF RECEIVER IS FRIEND
                    if (!sender.Profile.FriendsList.Contains(receiver.UserId.ToString()))
                    {
                        throw new ArgumentOutOfRangeException("This user is not in your friends list.");
                    }

                    Message messageToPush = new Message()
                    {
                        MessageContent = message.Content,
                        MessageDate    = message.Date,
                        Sender         = sender,
                        Receiver       = receiver,
                        StatusId       = context.Statuses.Where(st => st.StatusName == "Delivered").First().StatusId,
                    };

                    context.Messages.Add(messageToPush);
                    context.SaveChanges();

                    MessageModel resultMessage = new MessageModel()
                    {
                        Content  = messageToPush.MessageContent,
                        Date     = messageToPush.MessageDate,
                        Sender   = messageToPush.Sender.DisplayName,
                        Receiver = messageToPush.Receiver.DisplayName
                    };

                    HttpResponseMessage successfulResponse = Request.CreateResponse <MessageModel>(HttpStatusCode.Created, resultMessage);

                    //this.SendNotification(id);
                    return(successfulResponse);
                }

                return(this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState));
            }
        }
        public HttpResponseMessage PostFreeFriends([FromUri] string sessionKey, [FromBody] MessageModel message)
        {
            var context = new SocialLifeContext();

            using (context)
            {
                if (ModelState.IsValid)
                {
                    User sender = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();

                    var friends = sender.Profile.FriendsList.Split(' ', ',');

                    int count = 0;

                    if (sender == null)
                    {
                        throw new ArgumentOutOfRangeException("No such user, event or invalid key.");
                    }
                    foreach (var friend in friends)
                    {
                        int friendId = int.Parse(friend);

                        var receiver = context.Users.Where(us => us.UserId == friendId).FirstOrDefault();

                        if (receiver.Profile.Status.StatusName == "Free")
                        {
                            Message messageToPush = new Message()
                            {
                                MessageContent = message.Content,
                                MessageDate    = message.Date,
                                Sender         = sender,
                                Receiver       = receiver,
                                StatusId       = context.Statuses.Where(st => st.StatusName == "Delivered").First().StatusId,
                            };

                            context.Messages.Add(messageToPush);
                            count++;
                        }
                    }
                    context.SaveChanges();

                    HttpResponseMessage successfulResponse = Request.CreateResponse <string>(HttpStatusCode.Created, "Posted to " + count + " free friends.");

                    return(successfulResponse);
                }

                return(this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState));
            }
        }
Exemple #11
0
        public HttpResponseMessage GetSearchEvents(int id, [FromUri]string sessionKey)
        {
            var context = new SocialLifeContext();
            using (context)
            {
                if (ModelState.IsValid)
                {
                    User sender = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();

                    User userToSearch = context.Users.Where(us => us.UserId == id).FirstOrDefault();

                    ICollection<Event> foundEvents = userToSearch.Events.ToList();

                    if (sender == null)
                    {
                        throw new ArgumentOutOfRangeException("No such user, no found events or invalid key.");
                    }

                    if (foundEvents.Count == 0)
                    {
                        HttpResponseMessage failResponse = Request.CreateResponse<string>(HttpStatusCode.OK, "No results found");

                        return failResponse;
                    }

                    ICollection<EventModel> results = new List<EventModel>();

                    foreach (var chosenEvent in foundEvents)
                    {
                        EventModel eventInfo = new EventModel()
                        {
                            EventId = chosenEvent.EventId,
                            Name = chosenEvent.EventName,
                            Date = chosenEvent.EventDate
                        };

                        results.Add(eventInfo);
                    }

                    HttpResponseMessage successfulResponse = Request.CreateResponse<ICollection<EventModel>>(HttpStatusCode.OK, results);

                    return successfulResponse;
                }

                return this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState);
            }
        }
        public HttpResponseMessage PostEventMessage([FromUri] string sessionKey, [FromBody] MessageModel message)
        {
            var context = new SocialLifeContext();

            using (context)
            {
                if (ModelState.IsValid)
                {
                    User sender       = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();
                    var  messageEvent = context.Events.Where(ev => ev.EventId == message.EventId).FirstOrDefault();

                    if (sender == null || messageEvent == null)
                    {
                        throw new ArgumentOutOfRangeException("No such user, event or invalid key.");
                    }
                    Message messageToPush = new Message()
                    {
                        MessageContent = message.Content,
                        MessageDate    = message.Date,
                        Sender         = sender,
                        EventId        = messageEvent.EventId,
                        StatusId       = context.Statuses.Where(st => st.StatusName == "Delivered").First().StatusId,
                    };

                    context.Messages.Add(messageToPush);
                    context.SaveChanges();

                    MessageModel resultMessage = new MessageModel()
                    {
                        Content = messageToPush.MessageContent,
                        Date    = messageToPush.MessageDate,
                        Sender  = messageToPush.Sender.DisplayName,
                        Event   = messageEvent.EventName
                    };

                    HttpResponseMessage successfulResponse = Request.CreateResponse <MessageModel>(HttpStatusCode.Created, resultMessage);

                    //this.SendNotification(id);
                    return(successfulResponse);
                }

                return(this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState));
            }
        }
        public HttpResponseMessage GetSearchUsers([FromUri] string username, [FromUri] string sessionKey)
        {
            var context = new SocialLifeContext();

            using (context)
            {
                User userEntity = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();
                if (userEntity == null)
                {
                    throw new ArgumentException("No such logged user.");
                }

                ICollection <User> foundUsers = context.Users.Where(us => us.Username.ToLower().Contains(username.ToLower()) ||
                                                                    us.DisplayName.ToLower().Contains(username.ToLower()))
                                                .ToList();

                if (foundUsers != null)
                {
                    List <UserModel> usersList = new List <UserModel>();

                    foreach (var foundUser in foundUsers)
                    {
                        if (foundUser != userEntity)
                        {
                            UserModel userProfile = new UserModel()
                            {
                                Username    = foundUser.Username,
                                Id          = foundUser.UserId,
                                DisplayName = foundUser.DisplayName,
                            };

                            usersList.Add(userProfile);
                        }
                    }

                    var response = Request.CreateResponse <List <UserModel> >(HttpStatusCode.OK, usersList);
                    return(response);
                }
                else
                {
                    throw new ArgumentOutOfRangeException("No such user found.");
                }
            }
        }
Exemple #14
0
        public HttpResponseMessage PutUpdateEvent(int id, [FromUri]string sessionKey, [FromBody]EventModel updatedEvent)
        {
            var context = new SocialLifeContext();
            using (context)
            {
                if (ModelState.IsValid)
                {
                    User sender = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();

                    Event chosenEvent = context.Events.Where(ev => ev.EventId == id).FirstOrDefault();

                    if (sender == null || chosenEvent == null)
                    {
                        throw new ArgumentOutOfRangeException("No such user or invalid key.");
                    }
                    if (sender != chosenEvent.Users.First())
                    {
                        throw new ArgumentException("You do not have permission to do that.");
                    }
                    chosenEvent.EventContent = updatedEvent.Content;
                    chosenEvent.EventDate = updatedEvent.Date;
                    chosenEvent.EventName = updatedEvent.Name;
                    chosenEvent.AvatarUrl = updatedEvent.AvatarUrl;
                    var newStatus = updatedEvent.Status;
                    chosenEvent.StatusId = context.Statuses.Where(st => st.StatusName == newStatus).First().StatusId;
                    if (updatedEvent.Latitude != null && updatedEvent.Longitude != null)
                    {
                        chosenEvent.EventLocation = new Location()
                        {
                            Date = updatedEvent.Date,
                            Latitude = updatedEvent.Latitude,
                            Longitude = updatedEvent.Longitude,
                        };
                    }
                    context.SaveChanges();

                    HttpResponseMessage successfulResponse = Request.CreateResponse(HttpStatusCode.OK);

                    return successfulResponse;
                }

                return this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState);
            }
        }
Exemple #15
0
        public HttpResponseMessage Logout(string sessionKey)
        {
            var context = new SocialLifeContext();

            using (context)
            {
                User userEntity = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();
                if (userEntity == null)
                {
                    throw new ArgumentException("No such logged user.");
                }

                userEntity.SessionKey = null;
                context.SaveChanges();

                var response = Request.CreateResponse(HttpStatusCode.OK);
                return(response);
            }
        }
Exemple #16
0
        public HttpResponseMessage GetSearchEvents([FromUri]string name, [FromUri]string sessionKey)
        {
            var context = new SocialLifeContext();
            using (context)
            {
                if (ModelState.IsValid)
                {
                    User sender = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();

                    ICollection<Event> foundEvents = context.Events.Where(ev => ev.EventName.ToLower().Contains(name.ToLower()) 
                                                                          && ev.EventStatus.StatusName == "Public")
                                                                          .ToList();

                    if (sender == null || foundEvents.Count == 0)
                    {
                        throw new ArgumentOutOfRangeException("No such user, no found events or invalid key.");
                    }

                    ICollection<EventModel> results = new List<EventModel>();

                    foreach (var chosenEvent in foundEvents)
                    {
                        EventModel eventInfo = new EventModel()
                        {
                            EventId = chosenEvent.EventId,
                            Name = chosenEvent.EventName,
                            CreatorName = chosenEvent.Users.First().DisplayName,
                            Date = chosenEvent.EventDate
                        };

                        results.Add(eventInfo);
                    }
                    
                    HttpResponseMessage successfulResponse = Request.CreateResponse<ICollection<EventModel>>(HttpStatusCode.OK, results);

                    return successfulResponse;
                }

                return this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState);
            }
        }
Exemple #17
0
        public HttpResponseMessage DeleteEvent(int id, [FromUri]string sessionKey)
        {
            var context = new SocialLifeContext();
            using (context)
            {
                if (ModelState.IsValid)
                {
                    User sender = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();

                    Event chosenEvent = context.Events.Where(ev => ev.EventId == id).FirstOrDefault();

                    if (sender != chosenEvent.Users.First())
                    {
                        throw new ArgumentException("You do not have permission to do that.");
                    }

                    var eventMessages = chosenEvent.Messages.ToList();
                    foreach (var message in eventMessages)
                    {
                        context.Messages.Remove(message);
                    }

                    var eventLocation = chosenEvent.EventLocation;

                    context.Locations.Remove(eventLocation);

                    context.Events.Remove(chosenEvent);

                    context.SaveChanges();

                    HttpResponseMessage successfulResponse = Request.CreateResponse(HttpStatusCode.OK);

                    return successfulResponse;
                }

                return this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState);
            }
        }
Exemple #18
0
        public HttpResponseMessage PutRemoveUserFromEvent(int id, [FromUri]string sessionKey, [FromUri]int userId)
        {
            var context = new SocialLifeContext();
            using (context)
            {
                if (ModelState.IsValid)
                {
                    User sender = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();

                    User userToRemove = context.Users.Where(us => us.UserId == userId).FirstOrDefault();

                    Event chosenEvent = context.Events.Where(ev => ev.EventId == id).FirstOrDefault();

                    if (sender == null || chosenEvent == null)
                    {
                        throw new ArgumentOutOfRangeException("No such user or invalid key.");
                    }

                    if (chosenEvent.Users.First() != sender && sender != userToRemove)
                    {
                        throw new ArgumentException("You don't have permission to do that.");
                    }

                    if (chosenEvent.Users.First() == sender ^ sender == userToRemove)
                    {
                        chosenEvent.Users.Remove(userToRemove);
                        context.SaveChanges();
                    }

                    HttpResponseMessage successfulResponse = Request.CreateResponse(HttpStatusCode.OK);

                    return successfulResponse;
                }

                return this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState);
            }
        }
Exemple #19
0
        public HttpResponseMessage PutAddUserToEvent(int id, [FromUri]string sessionKey, [FromUri]int userId)
        {
            var context = new SocialLifeContext();
            using (context)
            {
                if (ModelState.IsValid)
                {
                    User sender = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();

                    Event chosenEvent = context.Events.Where(ev => ev.EventId == id).FirstOrDefault();

                    if (sender == null || chosenEvent == null)
                    {
                        throw new ArgumentOutOfRangeException("No such user or invalid key.");
                    }

                    if (userId == 0)
                    {
                        chosenEvent.Users.Add(sender);
                        context.SaveChanges();
                    }
                    else
                    {
                        var friend = context.Users.Where(us => us.UserId == userId).FirstOrDefault();
                        //ADD CHECK TO SEE IF USER IS FRIEND
                        chosenEvent.Users.Add(friend);
                        context.SaveChanges();
                    }
                    
                    HttpResponseMessage successfulResponse = Request.CreateResponse(HttpStatusCode.OK);

                    return successfulResponse;
                }

                return this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState);
            }
        }
        public HttpResponseMessage PutUpdateProfile([FromBody] ProfileModel updatedProfile, [FromUri] string sessionKey)
        {
            var context = new SocialLifeContext();

            using (context)
            {
                User userEntity = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();
                if (userEntity == null)
                {
                    throw new ArgumentException("No such logged user.");
                }

                if (updatedProfile.AuthCode != userEntity.AuthCode)
                {
                    throw new ArgumentException("Wrong password.");
                }

                userEntity.Profile.About       = updatedProfile.About;
                userEntity.Profile.Avatar      = updatedProfile.Avatar;
                userEntity.Profile.BirthDate   = updatedProfile.BirthDate;
                userEntity.Profile.City        = updatedProfile.City;
                userEntity.Profile.Country     = updatedProfile.Country;
                userEntity.Profile.Gender      = updatedProfile.Gender;
                userEntity.Profile.Mood        = updatedProfile.Mood;
                userEntity.Profile.PhoneNumber = updatedProfile.PhoneNumber;
                //CHECK THIS!!!!!
                var statusId = context.Statuses.Where(st => st.StatusName == updatedProfile.Status).First();
                userEntity.Profile.StatusId = context.Statuses.Where(st => st.StatusName == updatedProfile.Status).First().StatusId;
                userEntity.DisplayName      = updatedProfile.DisplayName;

                context.SaveChanges();

                var response = Request.CreateResponse(HttpStatusCode.OK);
                return(response);
            }
        }
        public HttpResponseMessage GetUserProfile(int id, [FromUri] string sessionKey)
        {
            var context = new SocialLifeContext();

            using (context)
            {
                User userEntity = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();
                if (userEntity == null)
                {
                    throw new ArgumentException("No such logged user.");
                }

                User foundUser = context.Users.Where(us => us.UserId == id).FirstOrDefault();

                if (foundUser != null)
                {
                    ProfileModel userProfile = new ProfileModel()
                    {
                        UserId      = foundUser.UserId,
                        About       = foundUser.Profile.About,
                        Avatar      = foundUser.Profile.Avatar,
                        BirthDate   = foundUser.Profile.BirthDate,
                        City        = foundUser.Profile.City,
                        Country     = foundUser.Profile.Country,
                        FriendsList = new List <UserModel>(),
                        Gender      = foundUser.Profile.Gender,
                        DisplayName = foundUser.DisplayName,
                        Mood        = foundUser.Profile.Mood,
                        Status      = foundUser.Profile.Status.StatusName,
                        PhoneNumber = foundUser.Profile.PhoneNumber,
                        EventsCount = foundUser.Events.Count
                    };

                    if (foundUser.Locations.Count > 0)
                    {
                        userProfile.LastLatitude     = foundUser.Locations.LastOrDefault().Latitude;
                        userProfile.LastLongitute    = foundUser.Locations.LastOrDefault().Longitude;
                        userProfile.LastLocationDate = foundUser.Locations.LastOrDefault().Date;
                    }

                    if (!String.IsNullOrEmpty(foundUser.Profile.FriendsList))
                    {
                        var friends = foundUser.Profile.FriendsList.Split(' ', ',');

                        foreach (var friend in friends)
                        {
                            int friendId = int.Parse(friend);

                            var friendFromDb = context.Users.Where(us => us.UserId == friendId).First();

                            var friendToAdd = new UserModel()
                            {
                                DisplayName = friendFromDb.DisplayName,
                                Id          = friendFromDb.UserId
                            };

                            userProfile.FriendsList.Add(friendToAdd);
                        }
                    }
                    var response = Request.CreateResponse <ProfileModel>(HttpStatusCode.OK, userProfile);
                    return(response);
                }
                else
                {
                    throw new ArgumentOutOfRangeException("No such user found.");
                }
            }
        }
        public HttpResponseMessage PutRemoveFriend(int id, [FromUri] string sessionKey)
        {
            var context = new SocialLifeContext();

            using (context)
            {
                User userEntity = context.Users.Where(us => us.SessionKey == sessionKey).FirstOrDefault();

                User removedUser = context.Users.Where(us => us.UserId == id).FirstOrDefault();

                if (userEntity == null || removedUser == null)
                {
                    throw new ArgumentException("No such user.");
                }

                var friends = userEntity.Profile.FriendsList;

                var friendsList = friends.Split(' ', ',');

                string newList = "";

                foreach (var friend in friendsList)
                {
                    if (id != int.Parse(friend))
                    {
                        if (newList == "")
                        {
                            newList = newList + friend;
                        }
                        else
                        {
                            newList = newList + "," + friend;
                        }
                    }
                }

                userEntity.Profile.FriendsList = newList;

                var removedUserFriends = removedUser.Profile.FriendsList;

                string[] removedFriendsList = { };

                if (!String.IsNullOrEmpty(removedUserFriends))
                {
                    removedFriendsList = removedUserFriends.Split(' ', ',');
                }

                string otherNewList = "";

                foreach (var friend in removedFriendsList)
                {
                    if (id != int.Parse(friend))
                    {
                        if (otherNewList == "")
                        {
                            otherNewList = otherNewList + friend;
                        }
                        else
                        {
                            otherNewList = otherNewList + "," + friend;
                        }
                    }
                }

                removedUser.Profile.FriendsList = otherNewList;

                context.SaveChanges();

                var response = Request.CreateResponse(HttpStatusCode.OK);

                return(response);
            }
        }