Ejemplo n.º 1
0
        public IDataLayerServiceProjectService Create(DataStoreTypes dataStoreType)
        {
            switch (dataStoreType)
            {
            case DataStoreTypes.Kinesis:
            case DataStoreTypes.Kafka:
            {
                var s = _container.GetInstance <StreamDataLayerServiceProjectService>();
                s.ConnectsToDatabaseType = dataStoreType;
                return(s);
            }

            case DataStoreTypes.SqlServer:
            case DataStoreTypes.Postgres:
            {
                var service = _container.GetInstance <RelationalDataLayerServiceProjectService>();
                service.ConnectsToDatabaseType = dataStoreType;
                return(service);
            }

            case DataStoreTypes.GenericResource:
            case DataStoreTypes.Tfs:
            case DataStoreTypes.Okta:
            {
                var s = _container.GetInstance <GenericResourceDataLayerServiceProjectService>();
                s.ConnectsToDatabaseType = dataStoreType;
                return(s);
            }

            default:
                throw new NotImplementedException();
            }
        }
Ejemplo n.º 2
0
        public KDataLayerProject(DataStoreTypes connectsToDatabaseType)
        {
            ProjectIs           = CProjectIs.DataAccess;
            ProjectSuffix       = $"Data";
            ProjectSuffixSuffix = $"{connectsToDatabaseType}";

            ConnectsToDatabaseType = connectsToDatabaseType;
        }
Ejemplo n.º 3
0
        public static string UnwrapReserved(this string str, DataStoreTypes databaseType)
        {
            if (databaseType == DataStoreTypes.SqlServer)
            {
                if (str.StartsWith("[") && str.EndsWith("]"))
                {
                    str = str.Substring(1, str.Length - 2);
                }
            }
            else
            {
                throw new NotImplementedException();
            }

            return(str);
        }
        public IDataStoreTestProjectService Create(DataStoreTypes dataStoreType)
        {
            switch (dataStoreType)
            {
            case DataStoreTypes.SqlServer:
                return(_container.GetInstance <ISqlServerTestProjectService>());

            case DataStoreTypes.Postgres:
                return(null);

            case DataStoreTypes.Kinesis:
                return(null);

            case DataStoreTypes.Tfs:
                return(null);

            case DataStoreTypes.Okta:
                return(null);

            default:
                throw new NotImplementedException();
            }
        }
Ejemplo n.º 5
0
        public IDataStoreProjectService Create(DataStoreTypes dataStoreType)
        {
            switch (dataStoreType)
            {
            case DataStoreTypes.SqlServer:
                return(_container.GetInstance <ISqlServerProjectService>());

            case DataStoreTypes.MySql:
            case DataStoreTypes.Postgres:
                return(_container.GetInstance <IFlywayProjectService>());

            case DataStoreTypes.Kinesis:
                return(_container.GetInstance <IKinesisProjectService>());

            case DataStoreTypes.Tfs:
                return(null);    //will build full data layer, later, if needed

            case DataStoreTypes.Okta:
                return(null);

            default:
                throw new NotImplementedException();
            }
        }
Ejemplo n.º 6
0
 public CFunction(DataStoreTypes databaseType)
 {
     DatabaseType = databaseType;
 }
Ejemplo n.º 7
0
        public static string WrapReservedAndSnakeCase(this string str, DataStoreTypes databaseType, bool snakeCase)
        {
            if (str == null)
            {
                return(str);
            }
            if (snakeCase)
            {
                str = str.ToSnakeCase();
            }
            if (databaseType == DataStoreTypes.Postgres)
            {
                if (str.ToLower() == "order")
                {
                    return($@"""{str}""");
                }
                if (str.ToLower() == "user")
                {
                    return($@"""{str}""");
                }

                if (str.ToLower() == "end")
                {
                    return($@"""{str}""");
                }
                if (str.ToLower() == "primary")
                {
                    return($@"""{str}""");
                }

                if (str.ToLower() == "default")
                {
                    return($@"""{str}""");
                }

                if (str.ToLower() == "distinct")
                {
                    return($@"""{str}""");
                }
                if (str.ToLower() == "position")
                {
                    return($@"""{str}""");
                }
            }
            else if (databaseType == DataStoreTypes.SqlServer)
            {
                //todo: read data from somewhere like
                // https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-2017
                if (str.ToLower() == "order")
                {
                    return($@"[{str}]");
                }
                if (str.ToLower() == "user")
                {
                    return($@"[{str}]");
                }
                if (str.ToLower() == "end")
                {
                    return($@"[{str}]");
                }
                if (str.ToLower() == "primary")
                {
                    return($@"[{str}]");
                }
                if (str.ToLower() == "default")
                {
                    return($@"[{str}]");
                }
                if (str.ToLower() == "distinct")
                {
                    return($@"[{str}]");
                }
                if (str.ToLower() == "position")
                {
                    return($@"[{str}]");
                }
                if (str.ToLower() == "group")
                {
                    return($@"[{str}]");
                }
            }
            else
            {
                throw new NotImplementedException();
            }

            return(str);
        }
Ejemplo n.º 8
0
 /// <summary>
 /// Converts the <see cref="sourceValue" /> parameter to the <see cref="destinationType" /> parameter using <see cref="formatProvider"
 /// /> and <see cref="ignoreCase" />
 /// </summary>
 /// <param name="sourceValue">the <see cref="System.Object"/> to convert from</param>
 /// <param name="destinationType">the <see cref="System.Type" /> to convert to</param>
 /// <param name="formatProvider">not used by this TypeConverter.</param>
 /// <param name="ignoreCase">when set to <c>true</c>, will ignore the case when converting.</param>
 /// <returns>
 /// an instance of <see cref="DataStoreTypes" />, or <c>null</c> if there is no suitable conversion.
 /// </returns>
 public override object ConvertFrom(object sourceValue, global::System.Type destinationType, global::System.IFormatProvider formatProvider, bool ignoreCase) => DataStoreTypes.CreateFrom(sourceValue);
Ejemplo n.º 9
0
 public CTable(DataStoreTypes databaseType)
 {
     DatabaseType = databaseType;
 }
Ejemplo n.º 10
0
 public CTableType(DataStoreTypes databaseType) : base(databaseType)
 {
 }
Ejemplo n.º 11
0
 public CStoredProcedure(DataStoreTypes databaseType)
 {
     DatabaseType = databaseType;
 }
Ejemplo n.º 12
0
 public KFunction(DataStoreTypes databaseType) : base(databaseType)
 {
 }
Ejemplo n.º 13
0
        private CMethod BuildAddAppServicesMethod(KGrpcProject grpcKProject, DataStoreTypes connectsToDatabaseType, CInterface dbProviderInterface, CClass dbProviderClass)
        {
            var method = new CMethod
            {
                AccessModifier    = CAccessModifier.Private,
                IsStatic          = true,
                IsExtensionMethod = true,
                ReturnType        = "void",
                MethodName        = "AddAppServices",
                Parameter         = new List <CParameter>
                {
                    new CParameter {
                        Type = "IServiceCollection", ParameterName = "services"
                    },
                    new CParameter {
                        Type = "IConfiguration", ParameterName = "configuration"
                    }
                }
            };
            var methodSnippet = new CodeWriter();

            methodSnippet.WriteLine($@"services.AddSingleton(");
            methodSnippet.WriteLine($@"p => p.GetRequiredService<IOptions<ServiceSettings>>().Value);");
            methodSnippet.WriteLine();
            methodSnippet.Unindent();


            methodSnippet.WriteLine($@"services.AddSingleton(");
            methodSnippet.Indent();
            methodSnippet.WriteLine($@"p => p.GetRequiredService<IOptions<CloudformationOutputs>>().Value);");
            methodSnippet.Unindent();

            methodSnippet.WriteLine();

            methodSnippet.WriteLine($@"services.AddSingleton(");
            methodSnippet.Indent();
            methodSnippet.WriteLine($@"p => p.GetRequiredService<IOptions<AuthenticationSettings>>().Value);");

            methodSnippet.WriteLine();
            methodSnippet.Unindent();

            if (dbProviderInterface != null)
            {
                methodSnippet.WriteLine($@"services.AddTransient<{dbProviderInterface.InterfaceName}>(");
                methodSnippet.Indent();
                methodSnippet.WriteLine(
                    $@"p => 
                    {{
                        var outputs = p.GetRequiredService<CloudformationOutputs>();");

                methodSnippet.Indent();
                if (connectsToDatabaseType == DataStoreTypes.SqlServer ||
                    connectsToDatabaseType == DataStoreTypes.Postgres ||
                    connectsToDatabaseType == DataStoreTypes.MySql)
                {
                    methodSnippet.WriteLine(
                        $@"if (!string.IsNullOrWhiteSpace(outputs.DBEndpoint))
                        {{
                            return new {grpcKProject.ProjectNameAsClassNameFriendly}DbProvider(
                                outputs.DBEndpoint,
                                outputs.Database,
                                outputs.DBUsername,
                                outputs.DBPassword,
                                outputs.Port);  
                        }}

                        return new {dbProviderClass.ClassName}(configuration.GetConnectionString(""{
                                grpcKProject.ProjectName
                            }""));");
                }
                else
                {
                    methodSnippet.WriteLine($@"return new {dbProviderClass.ClassName}();");
                    methodSnippet.Unindent();
                }

                methodSnippet.WriteLine("});");
                methodSnippet.WriteLine();
                methodSnippet.Unindent();
                methodSnippet.Unindent();
            }

            method.CodeSnippet = methodSnippet.ToString();

            return(method);
        }
Ejemplo n.º 14
0
        public CClass AddContainerClass(KGrpcProject grpcKProject, DataStoreTypes connectsToDatabaseType,
                                        CProject project,
                                        CInterface dbProviderInterface,
                                        CClass dbProviderClass,
                                        CInterface dbDiagnosticsFactoryInterface,
                                        CClass dbDiagnosticsFactoryClass)
        {
            var @class = new CClass($"ContainerExtensions")
            {
                Namespace = new CNamespace
                {
                    NamespaceName =
                        $"{grpcKProject.CompanyName}.{grpcKProject.ProjectName}{grpcKProject.NamespaceSuffix}.{grpcKProject.ProjectSuffix}.Infrastructure"
                },
                AccessModifier = CAccessModifier.Public,
                IsStatic       = true
            };

            @class.NamespaceRef.Add(new CNamespaceRef {
                ReferenceTo = new CNamespace {
                    NamespaceName = "System"
                }
            });
            @class.NamespaceRef.Add(new CNamespaceRef {
                ReferenceTo = new CNamespace {
                    NamespaceName = "Grpc.Core"
                }
            });
            @class.NamespaceRef.Add(new CNamespaceRef
            {
                ReferenceTo = new CNamespace {
                    NamespaceName = "Microsoft.Extensions.DependencyInjection"
                }
            });
            @class.NamespaceRef.Add(new CNamespaceRef
            {
                ReferenceTo = new CNamespace {
                    NamespaceName = "Microsoft.Extensions.Configuration"
                }
            });

            @class.NamespaceRef.Add(new CNamespaceRef
            {
                ReferenceTo = new CNamespace {
                    NamespaceName = "Microsoft.Extensions.Options"
                }
            });

            //@class.NamespaceRef.Add(new CNamespaceRef { ReferenceTo = new CNamespace { NamespaceName = "StructureMap" } });
            @class.NamespaceRef.Add(new CNamespaceRef {
                ReferenceTo = new CNamespace {
                    NamespaceName = "MediatR"
                }
            });
            @class.NamespaceRef.Add(new CNamespaceRef
            {
                ReferenceTo = new CNamespace {
                    NamespaceName = "Company.GrpcCommon.Infrastructure"
                }
            });

            @class.NamespaceRef.Add(new CNamespaceRef
            {
                ReferenceTo = new CNamespace {
                    NamespaceName = "Company.GrpcCommon.Tracing"
                }
            });

            @class.NamespaceRef.Add(new CNamespaceRef
            {
                ReferenceTo = new CNamespace {
                    NamespaceName = $"{grpcKProject.CompanyName}.{grpcKProject.ProjectName}{grpcKProject.NamespaceSuffix}.{grpcKProject.ProjectSuffix}.Config"
                }
            });

            @class.NamespaceRef.Add(new CNamespaceRef
            {
                ReferenceTo = dbProviderInterface.Namespace
            });

            @class.NamespaceRef.Add(new CNamespaceRef
            {
                ReferenceTo = dbDiagnosticsFactoryInterface.Namespace
            });

            @class.NamespaceRef.Add(new CNamespaceRef
            {
                ReferenceTo = dbDiagnosticsFactoryClass.Namespace
            });

            @class.NamespaceRef.Add(new CNamespaceRef {
                ReferenceTo = new CNamespace {
                    NamespaceName = "Lamar"
                }
            });



            @class.Method.Add(new CMethod
            {
                AccessModifier    = CAccessModifier.Public,
                ReturnType        = "void",
                IsStatic          = true,
                IsExtensionMethod = true,
                MethodName        = "Configure",
                Parameter         = new List <CParameter>
                {
                    new CParameter {
                        Type = "ServiceRegistry", ParameterName = "r"
                    },
                    new CParameter {
                        Type = "IConfiguration", ParameterName = "configuration"
                    }
                },
                CodeSnippet = GetConfigureCodeSnippet(grpcKProject.ProjectNameAsClassNameFriendly)
            });

            /*
             * @class.Method.Add(new CMethod()
             * {
             *   AccessModifier = CAccessModifier.Public,
             *   ReturnType = "IServiceProvider",
             *   MethodName = "GetServiceProvider",
             *   CodeSnippet = "return _container.GetInstance<IServiceProvider>();"
             * });
             *
             * @class.Method.Add(new CMethod
             * {
             *   AccessModifier = CAccessModifier.Public,
             *   ReturnType = "void",
             *   MethodName = "ConfigureContainer",
             *
             *   CodeSnippet =
             *       $@"_container.Configure(config =>
             * {{
             *   // Register stuff in container, using the StructureMap APIs
             *   // also register MediatR specifics
             *   config.Scan(scanner =>
             *   {{
             *       scanner.AssembliesAndExecutablesFromApplicationBaseDirectory(a => a.FullName.StartsWith(""{
             *               grpcKProject.CompanyName
             *           }""));
             *       scanner.AssemblyContainingType<IMediator>();
             *       scanner.WithDefaultConventions();
             *       scanner.ConnectImplementationsToTypesClosing(typeof(IRequestHandler<,>));
             *       scanner.ConnectImplementationsToTypesClosing(typeof(IRequestHandler<,>));
             *       scanner.ConnectImplementationsToTypesClosing(typeof(INotificationHandler<>));
             *       scanner.ConnectImplementationsToTypesClosing(typeof(INotificationHandler<>));
             *   }});
             *
             *   config.For<ServiceFactory>().Use<ServiceFactory>(ctx => ctx.GetInstance);
             *
             *   config.For<IMediatorExecutor>().Use<MediatorExecutor>();
             *   // Populate the container using the service collection
             *   config.Populate(_services);
             * }});"
             * });
             */

            @class.Method.Add(BuildAddAppServicesMethod(grpcKProject, connectsToDatabaseType, dbProviderInterface, dbProviderClass));

            project.ProjectContent.Add(new CProjectContent
            {
                Content     = @class,
                BuildAction = grpcKProject.DotNetType == DotNetType.Framework ? CBuildAction.Compile : CBuildAction.DoNotInclude,
                File        = new CFile {
                    Folder = $@"Infrastructure", FileName = $"{@class.ClassName}.cs"
                }
            });

            return(@class);
        }