// // Summary: // Registers a new user with all it's data and returns a valid new token. // // Parameters: // User: // A new user with all it's data. // // Returns: // A string representing a valid new token. // public string RegisterUserAndGetToken(User user) { try { User existingUser = _context.Users .Where(usr => usr.UserName == user.UserName || usr.Email == user.Email || usr.PhoneNumber == user.PhoneNumber) .FirstOrDefault(); if (existingUser != null) { throw new Exception("UserName, email or phone number already taken"); } AuthService auth = new AuthService(configuration); user.Role = "standartUser"; user.Password = auth.HashPassword(user.Password); _context.Users.Add(user); _context.SaveChanges(); if (user.Tasks != null && user.Tasks.Count > 0) { TaskService taskService = new TaskService(configuration, _context); taskService.AddTasks(user.Tasks); UserTaskService userTaskService = new UserTaskService(configuration, _context); userTaskService.AssociateTasksToUser(user.Tasks, user); } string token = auth.CreateToken(user); return(token); } catch (Exception err) { throw err; } }
// // Summary: // Finds a list of tasks (their Ids are given) and if they are not already associated, // associate them to a new user and then sends them to the new user. // // Parameters: // shareData: // A shareData object containing the list of tasks to share and the new userId to share with. // // userId: // A Id of the already associated user. // // Returns: // True if everything was associated and sent fine. // public bool ShareTasksWithUser(TasksShareData shareData, string userId) { try { if (shareData.TasksIdsToShare.Count == 0) { throw new Exception("No tasks to share"); } long longUserId; if (!(long.TryParse(userId, out longUserId))) { throw new Exception("Token not valid"); } UserService userService = new UserService(configuration, _context); User sharingUser = userService.GetUserById(longUserId); List <Models.Task> sharingUserTasks = GetUserTasks(userId); User userToShare = userService.GetUserById(shareData.UserIdToShare); List <long> userToShareExistingTasksIds = GetUserTasks(shareData.UserIdToShare.ToString()).Select(tsk => tsk.TaskId).ToList();; List <long> newTasksIdsToShare = new List <long>(); foreach (long TasksIdToShare in shareData.TasksIdsToShare) { if (!userToShareExistingTasksIds.Contains(TasksIdToShare)) { newTasksIdsToShare.Add(TasksIdToShare); } } List <Models.Task> tasksToShare = new List <Models.Task>(); foreach (Models.Task sharingUserTask in sharingUserTasks) { if (newTasksIdsToShare.Contains(sharingUserTask.TaskId)) { tasksToShare.Add(sharingUserTask); } } if (tasksToShare.Count == 0) { throw new Exception("No tasks to share"); } UserTaskService userTaskService = new UserTaskService(configuration, _context); userTaskService.AssociateTasksToUser(tasksToShare, userToShare); MailService mailService = new MailService(configuration); string messageBodyPrefix = configuration.email.messageBodyPreprefix + " " + userToShare.FirstName + ",\n" + sharingUser.UserName + configuration.email.messageSharedTasksBodyPrefix; string messageBodySufix = configuration.email.messageSuffix + configuration.email.fromName; string messageBody = mailService.BuildMessageBodyFromTasks(tasksToShare, messageBodyPrefix, messageBodySufix); mailService.SendEmail(userToShare.UserName, userToShare.Email, sharingUser.UserName + " " + configuration.email.subjectSharedTasks, messageBody); return(true); } catch (Exception err) { throw err; } }