コード例 #1
0
        public async Task GetPublishedSchema()
        {
            // arrange
            IMongoCollection <Schema> schemas =
                _mongoResource.CreateCollection <Schema>();
            IMongoCollection <SchemaVersion> versions =
                _mongoResource.CreateCollection <SchemaVersion>();
            IMongoCollection <SchemaPublishReport> publishReports =
                _mongoResource.CreateCollection <SchemaPublishReport>();
            IMongoCollection <PublishedSchema> publishedSchemas =
                _mongoResource.CreateCollection <PublishedSchema>();

            var repository = new SchemaRepository(
                schemas, versions, publishReports, publishedSchemas);

            var initial = new PublishedSchema(
                Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid());
            await publishedSchemas.InsertOneAsync(initial);

            // act

            await repository.GetPublishedSchemaAsync(
                initial.SchemaId, initial.EnvironmentId);

            // assert
            PublishedSchema retrieved =
                await publishedSchemas.AsQueryable().FirstOrDefaultAsync();

            Assert.NotNull(retrieved);
            Assert.Equal(initial.Id, retrieved.Id);
            Assert.Equal(initial.EnvironmentId, retrieved.EnvironmentId);
            Assert.Equal(initial.SchemaId, retrieved.SchemaId);
            Assert.Equal(initial.SchemaVersionId, retrieved.SchemaVersionId);
        }
コード例 #2
0
        public async Task SetPublishedSchemaAsync(
            PublishedSchema publishedSchema,
            CancellationToken cancellationToken = default)
        {
            UpdateResult result = await _publishedSchemas.UpdateOneAsync(
                Builders <PublishedSchema> .Filter.And(
                    Builders <PublishedSchema> .Filter.Eq(
                        t => t.EnvironmentId,
                        publishedSchema.EnvironmentId),
                    Builders <PublishedSchema> .Filter.Eq(
                        t => t.SchemaId,
                        publishedSchema.SchemaId)),
                Builders <PublishedSchema> .Update.Combine(
                    Builders <PublishedSchema> .Update.SetOnInsert(
                        t => t.EnvironmentId, publishedSchema.EnvironmentId),
                    Builders <PublishedSchema> .Update.SetOnInsert(
                        t => t.SchemaId, publishedSchema.SchemaId),
                    Builders <PublishedSchema> .Update.SetOnInsert(
                        t => t.Id, publishedSchema.Id),
                    Builders <PublishedSchema> .Update.Set(
                        t => t.SchemaVersionId, publishedSchema.SchemaVersionId)),
                new UpdateOptions { IsUpsert = true },
                cancellationToken)
                                  .ConfigureAwait(false);

            if (!result.IsUpserted(publishedSchema.Id))
            {
                throw new RepositoryException("The published schema was not updated.");
            }
        }
コード例 #3
0
        public static async Task <ISchema?> TryLoadSchemaAsync(
            ISchemaRepository repository,
            IFileStorage storage,
            Guid schemaId,
            Guid environmentId,
            IssueLogger logger,
            CancellationToken cancellationToken)
        {
            try
            {
                PublishedSchema publishedSchema = await repository.GetPublishedSchemaAsync(
                    schemaId, environmentId, cancellationToken)
                                                  .ConfigureAwait(false);

                IFileContainer container = await storage.GetContainerAsync(
                    publishedSchema.SchemaVersionId.ToString("N", CultureInfo.InvariantCulture),
                    cancellationToken)
                                           .ConfigureAwait(false);

                IEnumerable <IFile> files = await container.GetFilesAsync(
                    cancellationToken)
                                            .ConfigureAwait(false);

                DocumentNode?document = await DocumentHelper.TryParseDocumentAsync(
                    files.Single(), logger, cancellationToken)
                                        .ConfigureAwait(false);

                if (document is { })
                {
                    return(await TryCreateSchemaAsync(
                               document, logger, cancellationToken)
                           .ConfigureAwait(false));
                }
            }
コード例 #4
0
 public async Task SetPublishedSchemaAsync(
     PublishedSchema publishedClient,
     CancellationToken cancellationToken = default)
 {
     await _publishedSchemas.UpdateOneAsync(
         Builders <PublishedSchema> .Filter.And(
             Builders <PublishedSchema> .Filter.Eq(
                 t => t.EnvironmentId,
                 publishedClient.EnvironmentId),
             Builders <PublishedSchema> .Filter.Eq(
                 t => t.SchemaId,
                 publishedClient.SchemaId)),
         Builders <PublishedSchema> .Update.Combine(
             Builders <PublishedSchema> .Update.SetOnInsert(
                 t => t.EnvironmentId, publishedClient.EnvironmentId),
             Builders <PublishedSchema> .Update.SetOnInsert(
                 t => t.SchemaId, publishedClient.SchemaId),
             Builders <PublishedSchema> .Update.Set(
                 t => t.Id, publishedClient.Id),
             Builders <PublishedSchema> .Update.Set(
                 t => t.SchemaVersionId, publishedClient.SchemaVersionId)),
         new UpdateOptions { IsUpsert = true },
         cancellationToken)
     .ConfigureAwait(false);
 }