public void GivenIHaveInitialisedTheOpenApiDocumentProviderFromTestYAMLFile(string embeddedResourceName)
        {
            OpenApiDocument document = OpenApiServiceDefinitions.ReadOpenApiServiceFromEmbeddedDefinitionWithDiagnostics(
                Assembly.GetExecutingAssembly(), embeddedResourceName, out OpenApiDiagnostic diagnostic);

            Assert.IsEmpty(diagnostic.Errors);

            var documentProvider = new OpenApiDocumentProvider(new LoggerFactory().CreateLogger <OpenApiDocumentProvider>());

            documentProvider.Add(document);

            this.scenarioContext.Set <IOpenApiDocumentProvider>(documentProvider);
        }
Example #2
0
        public void WhenIAddTheOpenApiDocumentContainingTheOpenApiOperationToAOpenApiDocumentProvider()
        {
            this.exception = null;
            var doc = new OpenApiDocumentProvider(new Mock <ILogger <OpenApiDocumentProvider> >().Object);

            try
            {
                doc.Add(this.document !);
            }
            catch (Exception x)
            {
                this.exception = x;
            }
        }
        /// <summary>Initializes a new instance of the <see cref="OpenApiDocumentMiddleware"/> class.</summary>
        /// <param name="nextDelegate">The next delegate.</param>
        /// <param name="serviceProvider">The service provider.</param>
        /// <param name="documentName">The document name.</param>
        /// <param name="path">The document path.</param>
        /// <param name="settings">The settings.</param>
        public OpenApiDocumentMiddleware(RequestDelegate nextDelegate, IServiceProvider serviceProvider, string documentName, string path, OpenApiDocumentMiddlewareSettings settings)
        {
            _nextDelegate = nextDelegate;

            _documentName = documentName;
            _path         = path;

            _apiDescriptionGroupCollectionProvider = serviceProvider.GetService <IApiDescriptionGroupCollectionProvider>() ??
                                                     throw new InvalidOperationException("API Explorer not registered in DI.");
            _documentProvider = serviceProvider.GetService <OpenApiDocumentProvider>() ??
                                throw new InvalidOperationException("The NSwag DI services are not registered: Call " + nameof(NSwagServiceCollectionExtensions.AddSwaggerDocument) + "() in ConfigureServices().");

            _settings = settings;
        }
Example #4
0
        public void Generate(ITypeProvider typeProvider)
        {
            Log.Information("Starting Code Generation in {RootDirectory}", _settings.RootDirectory);

            if (_settings.NewAppSettings?.CreateNew == true)
            {
                var newProjectGen    = new NewProjectGenerator(_settings, _fs);
                var newProjectResult = newProjectGen.Generate();
                if (newProjectResult == false)
                {
                    Log.Error("Error generating new project - exiting");
                    return;
                }
            }

            if (_settings.AddGeneratedOptionsToDatabase)
            {
                var sb = new StringBuilder();
                sb.AppendLine("-- generated by a tool");
                typeProvider.DropGeneratedOperations(_settings, sb);
                typeProvider.DropGeneratedTypes(_settings, sb);
                var dropFile = new CodeFile()
                {
                    Contents = sb.ToString(), Name = "drop_generated.sql"
                };
                _fileWriter.ApplyCodeFiles(new List <CodeFile> {
                    dropFile
                }, DatabaseScriptsFolder);
                Log.Information("Finishing dropping generated operations");
            }

            var domain = typeProvider.GetDomain(_settings);

            Log.Information("Finished building domain");

            domain.DefaultNamespace = _settings.ApplicationName;

            SetupRootFolder();

            GenerateDbFunctions(domain, _settings.AddGeneratedOptionsToDatabase, typeProvider);
            Log.Information("Finished generating db functions");

            typeProvider.GetOperations(domain);
            Log.Information("Finished adding operations to domain");

            SanityCheckDomain(domain);

            GenerateClasses(domain);
            Log.Information("Finished generating classes");

            GenerateRepositories(domain);
            Log.Information("Finished generating repositories");

            if (_settings.GenerateTestRepos && !string.IsNullOrEmpty(_settings.TestDataDirectory))
            {
                // this is very much a work-in-progress
                GenerateTestRepositories(domain);
                Log.Information("Finished generating test repositories");
            }

            if (domain.ResultTypes.Any(rt => !rt.Ignore))
            {
                GenerateReturnTypes(domain);
                Log.Information("Finished generating return types");
            }

            if (_settings.WebUIType == WebUIType.MVC)
            {
                GenerateControllers(domain);
                GenerateViews(domain);
                GenerateViewModels(domain);
                Log.Information("Finished generating MVC UI");
            }

            if (_settings.WebUIType == WebUIType.React)
            {
                GenerateWebApi(domain);
                GenerateWebApiModels(domain);

                if (!string.IsNullOrEmpty(_settings.OpenApiUri))
                {
                    var openApiDocProvider    = new OpenApiDocumentProvider(_fs, _settings);
                    var openApiDomainProvider = new OpenApiDomainProvider(openApiDocProvider);
                    openApiDomainProvider.AugmentDomainFromOpenApi(domain);
                }

                GenerateClientServiceProxy(domain);
                GenerateClientApiModels(domain);
                GenerateClientPages(domain);
                Log.Information("Finished generating react UI");
            }

            if (_settings.ClientAppTypes.Contains(ClientAppUIType.Flutter))
            {
                var flutterGen = new Flutter.Generator(_fs, _settings, _fileWriter);
                flutterGen.Generate(domain);
            }

            if (_settings.TestDataSize != null && _settings.TestDataSize > 0)
            {
                var testDataGen = new TestDataGenerator();
                var testData    = testDataGen.Generate(domain);
                if (testData.Any())
                {
                    typeProvider.AddTestData(testData);
                }
            }

            Log.Information("Finished Code Generation");
        }