Example #1
0
            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");
            }