Example #1
0
        /// <summary>
        /// Edits a given user
        /// </summary>
        /// <param name="actualRequest">the client request to be handled</param>
        /// <returns>the response to the given request</returns>
        private async Task <ActualRequest> UpdateUserAsync(ActualRequest actualRequest)
        {
            Request request = actualRequest.Request;

            UserSocketsModel user   = JsonSerializer.Deserialize <UserSocketsModel>(request.Argument.ToString());
            bool             result = await userRepo.EditUserAsync(user);

            Request requestResponse = new Request
            {
                ActionType = ActionType.USER_EDIT.ToString(),
                Argument   = JsonSerializer.Serialize(result)
            };

            if (actualRequest.Images != null && actualRequest.Images.Any())
            {
                if (user.Email != null)
                {
                    ImagesUtil.WriteImageToPath(actualRequest.Images[0], $"{FILE_PATH}/Users/{user.Id}", "/avatar.jpg");
                }
                else
                {
                    ImagesUtil.WriteImageToPath(actualRequest.Images[0], $"{FILE_PATH}/Users/{user.Id}",
                                                "/background.jpg");
                }
            }

            return(new ActualRequest
            {
                Request = requestResponse,
                Images = null
            });
        }
Example #2
0
        public async Task <int> AddUserAsync(UserSocketsModel user)
        {
            using (ShapeAppDbContext ctx = new ShapeAppDbContext())
            {
                try
                {
                    await ctx.Users.AddAsync(new User
                    {
                        Address     = user.Address,
                        City        = user.City,
                        Description = user.Description,
                        Email       = user.Email,
                        Name        = user.Name,
                        Password    = user.Password
                    });

                    await ctx.SaveChangesAsync();
                }
                catch (Exception e)
                {
                    return(-1);
                }

                int userId = ctx.Users.First(u => u.Email.Equals(user.Email)).Id;
                Console.WriteLine("Added user to database with id " + userId);
                return(userId);
            }
        }
Example #3
0
        public async Task <bool> EditUserAsync(UserSocketsModel user)
        {
            using (ShapeAppDbContext ctx = new ShapeAppDbContext())
            {
                User userDb = await ctx.Users.FirstAsync(u => u.Id == user.Id);

                if (user.Email != null)
                {
                    userDb.Email = user.Email;
                }
                else //this means that the request is only supposed to edit the bg picture, without making changes to the db
                {
                    return(true);
                }

                if (user.City != null)
                {
                    userDb.City = user.City;
                }
                if (user.Description != null)
                {
                    userDb.Description = user.Description;
                }
                if (user.Name != null)
                {
                    userDb.Name = user.Name;
                }
                if (user.Score != 0)
                {
                    userDb.Score = user.Score;
                }
                if (user.Address != null)
                {
                    userDb.Address = user.Address;
                }
                if (user.Password != null)
                {
                    userDb.Password = user.Password;
                }

                try {
                    ctx.Users.Update(userDb);
                    await ctx.SaveChangesAsync();
                }
                catch (Exception e) {
                    return(false);
                }
            }

            return(true);
        }
Example #4
0
        /// <summary>
        /// Retrieves a user by id, and his status regarding the sender
        /// </summary>
        /// <param name="actualRequest">the client request to be handled</param>
        /// <returns>the response to the given request</returns>
        private async Task <ActualRequest> GetUserByIdAsync(ActualRequest actualRequest)
        {
            Request request = actualRequest.Request;

            Console.WriteLine("Get user argument " + request.Argument);
            List <int> userIds = JsonSerializer.Deserialize <List <int> >(request.Argument.ToString());

            Console.WriteLine("Retrieving user with id " + userIds[1] + " by " + userIds[0]);
            UserSocketsModel user = await userRepo.GetUserByIdAsync(userIds[0], userIds[1]);

            Request requestResponse = new Request
            {
                ActionType = ActionType.USER_GET_BY_ID.ToString(),
                Argument   = JsonSerializer.Serialize(user)
            };
            List <byte[]> images = new List <byte[]>();

            try
            {
                // /Images/users/{userId}/....
                // /Images/posts/{postId}/....
                var readAvatarFile = File.ReadAllBytes($"{FILE_PATH}/Users/{user.Id}/avatar.jpg");

                images.Add(ImagesUtil.ResizeImage(readAvatarFile, 200, 200));
                var readBackgroundFile = File.ReadAllBytes($"{FILE_PATH}/Users/{user.Id}/background.jpg");
                images.Add(readBackgroundFile);
            }
            catch (Exception e)
            {
                Console.WriteLine("No avatar found for user " + user.Id);
            }

            return(new ActualRequest
            {
                Request = requestResponse,
                Images = images
            });
        }
Example #5
0
        /// <summary>
        /// Persists a given user to the database
        /// </summary>
        /// <param name="actualRequest">the client request to be handled</param>
        /// <returns>the response to the given request</returns>
        private async Task <ActualRequest> AddUserAsync(ActualRequest actualRequest)
        {
            Request          request    = actualRequest.Request;
            string           userAsJson = request.Argument.ToString();
            UserSocketsModel user       = JsonSerializer.Deserialize <UserSocketsModel>(userAsJson);

            Console.WriteLine("Server got register user " + JsonSerializer.Serialize(user));
            int result = await userRepo.AddUserAsync(user);

            bool    resultBool      = result >= 0;
            Request requestResponse = new Request
            {
                ActionType = ActionType.USER_REGISTER.ToString(),
                Argument   = JsonSerializer.Serialize(resultBool)
            };

            if (result >= 0)
            {
                try
                {
                    byte[] readDefaultAvatar = File.ReadAllBytes($"{FILE_PATH}/Users/defaultAvatar.jpg");
                    byte[] readDefaultBg     = File.ReadAllBytes($"{FILE_PATH}/Users/defaultBg.jpg");
                    ImagesUtil.WriteImageToPath(readDefaultAvatar, $"{FILE_PATH}/Users/{result}", "/avatar.jpg");
                    ImagesUtil.WriteImageToPath(readDefaultBg, $"{FILE_PATH}/Users/{result}", "/background.jpg");
                }
                catch (Exception e)
                {
                    Console.WriteLine("Default avatar not found");
                }
            }

            return(new ActualRequest
            {
                Request = requestResponse,
                Images = null
            });
        }
Example #6
0
        public async Task <UserSocketsModel> GetUserByIdAsync(int senderId, int receiverId)
        {
            using (ShapeAppDbContext ctx = new ShapeAppDbContext())
            {
                bool[] bools      = new bool[8];
                bool   areFriends = UsersAreFriends(senderId, receiverId);
                bools[0] = areFriends;
                UserAction userAction = await ctx.UserActions.FirstOrDefaultAsync
                                            (ua => ua.SenderId == senderId && ua.ReceiverId == receiverId);

                if (userAction != null)
                {
                    bools[1] = userAction.IsFriendRequest;

                    bools[2] = userAction.IsReport;
                    bools[5] = userAction.IsFollowPage;
                }
                else
                {
                    bools[1] = false;
                    bools[2] = false;
                    bools[5] = false;
                }

                userAction = await ctx.UserActions.FirstOrDefaultAsync(ua =>
                                                                       ua.SenderId == receiverId && ua.ReceiverId == senderId);

                if (userAction == null)
                {
                    bools[3] = false;
                    bools[4] = false;
                    bools[6] = false;
                }
                else
                {
                    bools[3] = userAction.IsShareTrainings;
                    bools[4] = userAction.IsShareDiets;
                    bools[6] = userAction.IsFriendRequest;
                }

                bools[7] = false;
                if (IsUserPage(receiverId))
                {
                    PageRating pageRating = await ctx.PageRatings.FirstOrDefaultAsync(pr => pr.UserId == senderId &&
                                                                                      pr.PageId == receiverId);

                    bools[7] = pageRating != null;
                }

                if (IsUserPage(senderId))
                {
                    bools[5] = userAction?.IsFollowPage ?? false;
                }

                User user = await ctx.Users.Where(u => u.Id == receiverId)
                            .Include(u => u.Address).FirstAsync();

                int relevantFriendsNumber;
                if (!IsUserPage(senderId) && !IsUserPage(receiverId))
                {
                    relevantFriendsNumber = areFriends
                        ? GetTotalNumberOfFriendsForUser(receiverId)
                        : GetNumberOfCommonFriends(senderId, receiverId);
                }
                else if (IsUserPage(senderId) && !IsUserPage(receiverId))
                {
                    relevantFriendsNumber = UserFollowsGym(receiverId, senderId)
                        ? GetTotalNumberOfFriendsForUser(receiverId) : 0;
                }
                else
                {
                    relevantFriendsNumber = GetTotalNumberOfFollowersForGym(receiverId);
                }

                UserSocketsModel userSocketsModel = new UserSocketsModel
                {
                    Id                    = user.Id,
                    Email                 = user.Email,
                    Name                  = user.Name,
                    Description           = user.Description,
                    City                  = user.City,
                    Score                 = user.Score,
                    Address               = user.Address,
                    UserStatus            = bools,
                    RelevantFriendsNumber = relevantFriendsNumber,
                    Rating                = 0
                };

                if (!IsUserPage(receiverId))
                {
                    return(userSocketsModel);
                }

                double averageRating;
                if (ctx.PageRatings.Any(pr => pr.PageId == receiverId))
                {
                    averageRating = ctx.PageRatings.Where(pr => pr.PageId == receiverId).Average(pr => pr.Rating);
                }
                else
                {
                    averageRating = 0;
                }
                Console.WriteLine("Page average rating is " + averageRating);
                userSocketsModel.Rating = Convert.ToInt32(averageRating);
                return(userSocketsModel);
            }
        }