Example #1
0
        public async Task <EmployeeCreateResponse> Handle(EmployeeCreateRequest request, CancellationToken cancellationToken)
        {
            var employeesWithSimilarUsernameEmail = await _context.Employees
                                                    .Where(e => e.Username == request.Username || e.Email == request.Email)
                                                    .ToListAsync(cancellationToken);

            // check if username is available / unique
            if (employeesWithSimilarUsernameEmail.Any(e => e.Username == request.Username))
            {
                throw new ConflictException(nameof(request.Username), "Chosen username isn't available, please take another one.");
            }

            // check if email is available / unique
            if (employeesWithSimilarUsernameEmail.Any(e => e.Email == request.Email))
            {
                throw new ConflictException(nameof(request.Email), "Chosen email isn't available, please take another one.");
            }

            string hashedPassword = _hasher.HashPassword(request.Password);

            Employee newEmployee = new Employee()
            {
                Birthday    = request.Birthday,
                Email       = request.Email,
                Firstname   = request.Firstname,
                Lastname    = request.Lastname,
                PhoneNumber = request.PhoneNumber,
                Username    = request.Username,
                Password    = hashedPassword
            };

            await _context.AddAsync(newEmployee, cancellationToken);

            await _context.SaveChangesAsync(cancellationToken);

            _logger.LogDebug($"Successfully created user {newEmployee.Username} with the id {newEmployee.Guid}");

            return(new EmployeeCreateResponse()
            {
                EmployeeId = newEmployee.Guid
            });
        }