Beispiel #1
0
        /// <summary>
        /// Adds the specified user to the list of current users.
        /// The user name can either be a known user name (i.e. a user
        /// that has already joined the schedule sometime before) or
        /// a new user name (in this case the user's info is added to the DB).
        /// </summary>
        /// <param name="userVM"></param>
        public async Task AddUserAsync(UserViewModel userVM, ErrorReporter errorReporter)
        {
            if (userVM == null)
            {
                errorReporter.Throw(
                    new ArgumentNullException(nameof(userVM),
                                              UserErrorsViewModel.GenericErrorMessage));
            }

            if (string.IsNullOrWhiteSpace(userVM.Name))
            {
                errorReporter.Throw(
                    new ArgumentException("The name of the specified user is invalid", nameof(userVM)),
                    UserErrorsViewModel.UserNameInvalidMessage);
            }

            if (Users.Any(o => o.Name == userVM.Name))
            {
                errorReporter.Throw(
                    new ArgumentException($"The user name '{userVM.Name}' is already in use", nameof(userVM.Name)),
                    UserErrorsViewModel.UserNameAlreadyInUseMessage);
            }

            if (Schedule.Users.Any(o => o.Name == userVM.Name))
            {
                // This is a known user name
                Users.Add(userVM);
                AvailableUserNames.Remove(userVM.Name);
            }
            else
            {
                // The client is a new user
                Users.Add(userVM);

                // Create new known user in DB
                var dbUser = new User {
                    Name = userVM.Name
                };
                await PaulRepository.AddUserToScheduleAsync(Schedule, dbUser);
            }
        }