コード例 #1
0
        private async Task ImportUsers(IReadOnlyDictionary <string, string> publicIds, CancellationToken cancellationToken)
        {
            await foreach (var googleUser in Google.GetUsersAsync(cancellationToken))
            {
                if (string.IsNullOrEmpty(googleUser.OrgUnitPath))
                {
                    Logger.LogDebug("Skipping user '{UserId}' with missing organization unit.", googleUser.Id);
                    continue;
                }

                if (IgnoreOrgUnitPaths.Contains(googleUser.OrgUnitPath))
                {
                    Logger.LogDebug("Skipping user '{UserId}' in {OrgUnitPath} organization unit.", googleUser.Id, googleUser.OrgUnitPath);
                    continue;
                }

                var user = await Context.Users.FirstOrDefaultAsync(x => x.Id.Equals(googleUser.Id), cancellationToken);

                if (user is null)
                {
                    user = new User
                    {
                        Id = googleUser.Id
                    };

                    await Context.Users.AddAsync(user, cancellationToken);
                }

                user.Email                = googleUser.PrimaryEmail;
                user.GivenName            = googleUser.Name.GivenName;
                user.FamilyName           = googleUser.Name.FamilyName;
                user.FullName             = googleUser.Name.FullName;
                user.OrganizationUnitPath = googleUser.OrgUnitPath;
                user.PhoneNumber          = NormalizePhoneNumber(googleUser.Phones);

                if (publicIds.TryGetValue(googleUser.Id, out var publicId))
                {
                    user.CloudinaryPublicId = publicId;
                }
            }

            var count = await Context.SaveChangesAsync(cancellationToken);

            Logger.LogInformation("Imported {UserCount} user(s) from Google.", count);
        }