Exemple #1
0
        public async Task <InsertResponse> GenerateUsersAsync(GenerateUserRequest request)
        {
            var address = Builder <Address> .CreateNew()
                          .With(e => e.City    = Faker.Address.USCity())
                          .With(e => e.Street  = Faker.Address.StreetName())
                          .With(e => e.Country = Faker.Address.Country());

            var users = new Faker <UserModel>()
                        .RuleFor(u => u.Id, f => ObjectId.GenerateNewId().ToString())
                        .RuleFor(bp => bp.FirstName, f => f.Lorem.Word())
                        .RuleFor(bp => bp.LastName, f => f.Lorem.Word())
                        .RuleFor(bp => bp.BirthDate, f => f.Date.Between(new DateTime(1930, 1, 1), DateTime.UtcNow))
                        .RuleFor(u => u.Gender, f => f.PickRandom <GenderType>())
                        .RuleFor(u => u.Type, f => f.PickRandom <UserType>())
                        .RuleFor(bp => bp.Phone, f => f.Phone.PhoneNumber())
                        .RuleFor(bp => bp.Email, f => f.Internet.Email())
                        .RuleFor(u => u.Address, f => address.Build())
                        .RuleFor(u => u.Email,
                                 (f, u) => f.Internet.Email(u.FirstName + f.Random.Number(1, 1000),
                                                            u.LastName + f.Random.Number(1, 1000)))
                        .Generate(request.Count).ToList();

            return(await UserRepository.BulkInsertUsersAsync(users));
        }
Exemple #2
0
 public async Task <IActionResult> Insert([FromBody] GenerateUserRequest request)
 {
     return(Ok(await UserManager.GenerateUsersAsync(request)));
 }
        public async Task <ActionResult> GenerateUser(
            [FromBody] GenerateUserRequest model,
            [FromServices] ApplicationDbContext dbContext)
        {
            var createUserResult = await CreateUser(new CreateUserDataModel
            {
                StudentID = model.ID,
                Email     = $"{model.ID}@{options.Value.EmailDomain}",
                FirstName = model.Name,
                Password  = model.Password,
                LastName  = ""
            });

            if (createUserResult.IsT1)
            {
                var(statusCode, value) = createUserResult.AsT1;
                if (statusCode == 400 && value is ModelStateDictionary modelState)
                {
                    return(BadRequest(modelState));
                }
                return(StatusCode(statusCode, value));
            }
            if (model.Claims is null)
            {
                return(Ok());
            }
            var user = createUserResult.AsT0;

            foreach (var challengeId in model
                     .Claims.Where(c => c.Type == DefaultClaims.AddToChallenge.Type)
                     .Select(c => c.Value)
                     .Select(c => (success: Guid.TryParse(c, out var id), id))
                     .Where(c => c.success)
                     .Select(c => c.id))
            {
                try
                {
                    dbContext.Add(new UserToChallenge
                    {
                        ChallengeId = challengeId,
                        UserId      = user.Id
                    });
                    await dbContext.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    logger.LogWarning(ex, "Can't add user {user} to challenge {challenge}", user.Id, challengeId);
                }
            }

            foreach (var claim in model.Claims)
            {
                var claimToAdd = new Claim(claim.Type, claim.Value);
                var result     = await UserManager.AddClaimAsync(user, claimToAdd);

                if (!result.Succeeded)
                {
                    logger.LogError($"Can't add claim {claimToAdd} to user {user.Id} {user.StudentID}: {result}");
                    return(StatusCode(500, "Unexpected error"));
                }
            }
            return(Ok());
        }