コード例 #1
0
ファイル: ReadTests.cs プロジェクト: Nazgaul/Spitball
        public async Task TutorSyncAzureSearchQuery_Ok(int version)
        {
            var query  = new TutorSyncAzureSearchQuery(version);
            var query2 = new TutorSyncAzureSearchQuery(version);

            var _ = await fixture.QueryBus.QueryAsync(query, default);

            await fixture.QueryBus.QueryAsync(query2, default);
        }
コード例 #2
0
ファイル: TutorFunction.cs プロジェクト: Nazgaul/Spitball
        public static async Task Run([TimerTrigger("0 */15 * * * *")] TimerInfo myTimer,
                                     [Blob("spitball/AzureSearch/tutor-version.txt")] CloudBlockBlob blob,
                                     [AzureSearchSync(TutorSearchWrite.IndexName)] IAsyncCollector <AzureSearchSyncOutput> indexInstance,
                                     [Inject] IQueryBus queryBus,
                                     ILogger log,
                                     CancellationToken token)
        {
            var query = new TutorSyncAzureSearchQuery(0);

            if (await blob.ExistsAsync())
            {
                var str = await blob.DownloadTextAsync();

                query = JsonConvert.DeserializeObject <TutorSyncAzureSearchQuery>(str);
            }


            var nextQuery = new TutorSyncAzureSearchQuery(query.Version);

            bool updateOccur;

            do
            {
                updateOccur = false;
                var result = await queryBus.QueryAsync(query, token);

                foreach (var update in result.Update)
                {
                    log.LogInformation($"Sync {update}");
                    updateOccur = true;
                    var courses = update.Courses?.Where(w => !string.IsNullOrWhiteSpace(w)).Distinct().ToArray() ??
                                  new string[0];
                    var subjects = update.Subjects?.Where(w => !string.IsNullOrWhiteSpace(w)).ToArray() ?? new string[0];
                    await indexInstance.AddAsync(new AzureSearchSyncOutput()
                    {
                        Item = new Tutor
                        {
                            Country = update.Country.ToUpperInvariant(),
                            Id      = update.UserId.ToString(),
                            Name    = update.Name,
                            Courses = courses.ToArray(),
                            Rate    = update.Rate,

                            InsertDate = DateTime.UtcNow,
                            Prefix     = courses.Union(subjects).Union(new[] { update.Name })
                                         .Distinct(StringComparer.OrdinalIgnoreCase).ToArray(),
                            ReviewCount   = update.ReviewsCount,
                            Subjects      = subjects.ToArray(),
                            OverAllRating = update.OverAllRating,
                            Data          = new TutorCardDto()
                            {
                                UserId         = update.UserId,
                                Name           = update.Name,
                                Courses        = courses.Take(3),
                                Subjects       = subjects.OrderBy(o => o).Take(3),
                                ReviewsCount   = update.ReviewsCount,
                                Rate           = (float)update.Rate,
                                University     = update.University,
                                Lessons        = Math.Max(update.LessonsCount, update.ReviewsCount),
                                Bio            = update.Bio,
                                Price          = update.Price,
                                Country        = update.Country,
                                Image          = update.Image,
                                NeedSerializer = true,
                                DiscountPrice  = update.SubsidizedPrice
                            }
                        },
                        Insert = true
                    }, token);
                }

                foreach (var delete in result.Delete)
                {
                    log.LogInformation($"delete tutor id {delete}");
                    updateOccur = true;
                    await indexInstance.AddAsync(new AzureSearchSyncOutput()
                    {
                        Item = new Tutor()
                        {
                            Id = delete
                        },
                        Insert = false
                    }, token);
                }

                query.Page++;
                nextQuery.Version = Math.Max(nextQuery.Version, result.Version);
                await indexInstance.FlushAsync(token);
            } while (updateOccur);

            if (query.Page > 0)
            {
                var jsonStr = JsonConvert.SerializeObject(nextQuery);
                await blob.UploadTextAsync(jsonStr);
            }

            log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
        }