/// <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 }); }
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); } }
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); }
/// <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 }); }
/// <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 }); }
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); } }