/// <summary>
        /// Проверяем, существует ли сотрудник, чью запись хотят обновить, и заменяем в ней данные.
        /// </summary>
        /// <param name="request"></param>
        /// <returns>Обновленная запись сотрудника</returns>
        protected override UpdateEmployeeUseCaseResult Handler(UpdateEmployeeUseCaseRequest request)
        {
            Employee employee = _employeeGateway.Find(e => e.Id == request.Id).First();

            if (employee == null)
            {
                throw new Exception("Сотрудник не найден");
            }

            employee.PositionId = request.PositionId;

            UserProfile profile = _profileGateway.Find(p => p.UserId == employee.UserId).First();

            profile.FirstName  = request.FirstName;
            profile.LastName   = request.LastName;
            profile.MiddleName = request.MiddleName;
            profile.Birthdate  = request.Birthdate;
            profile.Phone      = Phone.For(request.Phone);
            profile.Gender     = (ProfileGender)request.Gender;

            _employeeGateway.FillEmployee(employee);

            return(new UpdateEmployeeUseCaseResult {
                Employee = _mapper.Map <EmployeeModel>(employee)
            });
        }
        /// <summary>
        /// Удаляем запись сотрудника и связанные с ней записи пользователя и пользовательской информации
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        protected override EmptyUseCaseResult Handler(RemoveEmployeeUseCaseRequest request)
        {
            Employee employee = _employeeGateway.Find(e => e.Id == request.Id).First();

            if (employee == null)
            {
                throw new Exception($"Сотрудник не может быть удален, т.к. не существует сотрудника с ID {request.Id}");
            }
            int userId = employee.UserId;

            _employeeGateway.Remove(employee);
            _profileGateway.Remove(p => p.UserId == userId);
            _userGateway.Remove(user => user.Id == userId);

            return(new EmptyUseCaseResult());
        }