public async Task <User> Handle(Command request, CancellationToken cancellationToken) { string controlNumber = "", username = ""; // Check if email is already exists if (await _context.Users.Where(x => x.Email == request.Email).AnyAsync()) { throw new RestException(HttpStatusCode.BadRequest, new { Email = "Email already exists" }); } // Check if username is already exists // if (await _context.Users.Where(x => x.UserName == username).AnyAsync()) // throw new RestException(HttpStatusCode.BadRequest, new { Username = "******" }); var chapter = await _context.Chapters.SingleOrDefaultAsync(x => x.Name == request.Chapter); var lastUser = await _context.Users.LastOrDefaultAsync(); if (chapter != null && lastUser != null) { controlNumber = _stringUtils.ControlNumberBuilder(chapter.Code, chapter.SequenceId, request.DateSurvived, _stringUtils.UserSequenceBuilder(String.IsNullOrEmpty(lastUser.ControlNumber) ? "" : lastUser.ControlNumber)); } if (await _context.Users.Where(x => x.UserName == username).AnyAsync()) { username = string.Concat($"{request.FirstName}.{request.LastName}{Int32.Parse(controlNumber.Split('-')[1].Substring(2)).ToString()}" .Where(c => !Char.IsWhiteSpace(c))).ToLower(); } var user = new AppUser { ControlNumber = controlNumber, DisplayName = $"{request.FirstName} {request.LastName}", Email = request.Email, UserName = username, LastName = request.LastName, FirstName = request.FirstName, MiddleName = request.MiddleName, BirthDate = request.BirthDate, Suffix = request.Suffix, Gender = request.Gender, BloodType = request.BloodType, Chapter = request.Chapter, SchoolName = request.SchoolName, Address = request.Address, ContactNumber = request.ContactNumber, ContactPerson = request.ContactPerson, ContactPersonNumber = request.ContactPersonNumber, DateSurvived = request.DateSurvived, CreatedAt = DateTime.Now, LockoutEnd = DateTime.Now.AddYears(1) }; // await _context.Chapters.Add() var result = await _userManager.CreateAsync(user, request.Password); chapter.AppUsers.Add(user); var success = await _context.SaveChangesAsync() > 0; if (result.Succeeded && success) { return(new User { DisplayName = user.DisplayName, Token = _jwtGenerator.CreateToken(user), Username = user.UserName, // Image = user.Photos.FirstOrDefault(x => x.IsMain)?.Url }); } throw new Exception("Problem saving changes"); }