/*
         * private KProtoFile FindKProtoFile(KGrpcProject grpcKProject, CMethod method)
         * {
         *  KProtoFile kProtoFile = null;
         *
         *  foreach (var mPf in grpcKProject.ProtoFile)
         *  {
         *      foreach (var mRpc in mPf.Rpc)
         *          if (mRpc.RpcName.ToLower() == method.MethodName.ToLower())
         *          {
         *              kProtoFile = mPf;
         *              break;
         *          }
         *      if (kProtoFile != null)
         *          break;
         *  }
         *
         *  if (kProtoFile == null)
         *  {
         *      kProtoFile = grpcKProject.ProtoFile.FirstOrDefault();
         *      if (kProtoFile == null)
         *      {
         *          kProtoFile = new KProtoFile {ProtoFileName = grpcKProject.ProjectName};
         *          grpcKProject.ProtoFile.Add(kProtoFile);
         *      }
         *  }
         *  if (kProtoFile.GeneratedProtoFile == null)
         *  {
         *      var protoNamespace = kProtoFile.CSharpNamespace; //
         *      if (string.IsNullOrEmpty(protoNamespace))
         *          protoNamespace =
         *              $@"{grpcKProject.CompanyName}.{grpcKProject.ProjectName}{grpcKProject.NamespaceSuffix}.{
         *                      grpcKProject.ProjectSuffix
         *                  }.Proto.Types";
         *      kProtoFile.GeneratedProtoFile = BuildProtoFile(grpcKProject, kProtoFile, protoNamespace);
         *  }
         *
         *
         *  return kProtoFile;
         * }*/

        private CProtoFile BuildProtoFile(KGrpcProject grpcKProject, KProtoFile kProtoFile, string protoNamespace)
        {
            var protoFile = new CProtoFile();

            protoFile.Import.Add("google/protobuf/timestamp.proto");
            protoFile.Import.Add("google/protobuf/duration.proto");
            protoFile.Import.Add("google/protobuf/descriptor.proto");

            protoFile.CSharpNamespace = protoNamespace;

            protoFile.Option.Add($@"csharp_namespace = ""{protoNamespace}"";");
            protoFile.Option.Add($@"(version) = ""1.0.0"";");

            var protoService = new CProtoService(protoFile)
            {
                ServiceName = $@"{kProtoFile.ProtoFileName}Service"
            };

            protoFile.ProtoService.Add(protoService);

            return(protoFile);
        }
Exemplo n.º 2
0
        public KSolution BuildSolution(KickstartWizardModel kickstartWizardModel)
        {
            var solution = new KSolution()
            {
                CompanyName = kickstartWizardModel.CompanyName, SolutionName = kickstartWizardModel.SolutionName
            };

            KProtoFile kProtoFile = null;

            if (kickstartWizardModel.MetadataSource == MetadataSource.Grpc)
            {
                kProtoFile = kickstartWizardModel.MetadataSource == MetadataSource.Grpc ? _protoToKProtoConverter.Convert("zzz", kickstartWizardModel.ProtoFileText) : null;

                //this will override whatever user typed on first standard VS dialog
                if (kickstartWizardModel.CurrentStep == KickstartWizardModel.Step.ProtoFile)
                {
                    kickstartWizardModel.SolutionName = InferSolutionName(kProtoFile);
                    kickstartWizardModel.ProjectName  = InferProjectName(kProtoFile);
                }
                else
                {
                }

                var databaseProject = BuildDatabaseProject(kickstartWizardModel, kProtoFile);
                solution.Project.Add(databaseProject);

                var databaseTestProject = BuildDatabaseTestProject(kickstartWizardModel, kProtoFile);
                solution.Project.Add(databaseTestProject);

                //_databaseSqlView.Bind(databaseProject);

                //if (_currentStep == Step.GenerationStart)
                {
                    var dataLayerProject = BuildDataLayerProject(kickstartWizardModel, databaseProject);
                    var grpcProject      = BuildGrpcProject(kickstartWizardModel, databaseProject, dataLayerProject, kProtoFile);
                    solution.Project.Add(grpcProject);

                    solution.Project.Add(dataLayerProject);
                }
            }
            else if (kickstartWizardModel.MetadataSource == MetadataSource.SqlScripts)
            {
                var databaseProjectStart = BuildDatabaseProject(kickstartWizardModel, null);

                var connectionString = "Server=localhost;";
                var outputRootPath   = string.Empty;

                var databaseProject = _dbToKSolutionConverter.BuildSqlMeta(connectionString, outputRootPath, databaseProjectStart);

                var dataLayerProject = BuildDataLayerProject(kickstartWizardModel, databaseProject);

                solution.Project.Add(databaseProject);
                solution.Project.Add(dataLayerProject);

                var grpcProject = BuildGrpcProject(kickstartWizardModel, databaseProject, dataLayerProject, null);
                grpcProject.CompanyName = kickstartWizardModel.CompanyName;
                solution.Project.Add(grpcProject);

                var protoFiles = _dataLayerProjectToKProtoFileConverter.Convert(databaseProject, dataLayerProject, grpcProject);
                foreach (var pf in protoFiles)
                {
                    grpcProject.ProtoFile.Add(pf);
                }
                //_databaseSqlStep.Bind(databaseProject);

                var pf3 = protoFiles.FirstOrDefault();
                if (pf3 != null)
                {
                    pf3.ProtoFileText = _protoFileToProtoFileConverter.Convert(pf3.GeneratedProtoFile);
                    // _protoFileView.Bind(pf3);
                }
            }


            if (kickstartWizardModel.CreateGrpcServiceTestClientProject)
            {
                solution.Project.Add(new KGrpcServiceClientTestProject {
                    ProjectName = kickstartWizardModel.ProjectName
                });
            }
            if (kickstartWizardModel.CreateDockerBuildProject)
            {
                solution.Project.Add(new KDockerBuildScriptProject {
                    ProjectName = kickstartWizardModel.ProjectName
                });
            }
            if (kickstartWizardModel.CreateGrpcUnitTestProject)
            {
                solution.Project.Add(new KGrpcServiceUnitTestProject {
                    ProjectName = kickstartWizardModel.ProjectName
                });
            }
            if (kickstartWizardModel.CreateIntegrationTestProject)
            {
                solution.Project.Add(new KGrpcServiceIntegrationTestProject {
                    ProjectName = kickstartWizardModel.ProjectName
                });
            }

            if (kickstartWizardModel.CreateWebAppProject)
            {
                solution.Project.Add(new KWebUIProject {
                    ProjectName = kickstartWizardModel.ProjectName
                });
            }

            if (kickstartWizardModel.CreateDockerComposeProject)
            {
                solution.Project.Add(new KDockerComposeProject()
                {
                    ProjectName = kickstartWizardModel.ProjectName
                });
            }

            if (kickstartWizardModel.CreateGrpcClientProject)
            {
                solution.Project.Add(new KGrpcClientProject()
                {
                    ProjectName = kickstartWizardModel.ProjectName
                });
            }
            return(solution);
        }
Exemplo n.º 3
0
 private string InferProjectName(KProtoFile kProtoFile)
 {
     return(kProtoFile.GeneratedProtoFile.ProtoService.First().ServiceName.Replace("Service", ""));
 }
Exemplo n.º 4
0
        public KDataStoreTestProject BuildDatabaseTestProject(KickstartWizardModel kickstartWizardModel, KProtoFile kProtoFile)
        {
            var databaseProject = new KDataStoreTestProject {
                CompanyName = kickstartWizardModel.CompanyName, ProjectName = kickstartWizardModel.ProjectName,
                Kickstart   = kickstartWizardModel.CreateDatabaseTestProject
            };

            databaseProject.DataStoreType = kickstartWizardModel.DatabaseType;

            return(databaseProject);
        }
Exemplo n.º 5
0
        public KDataStoreProject BuildDatabaseProject(KickstartWizardModel kickstartWizardModel, KProtoFile kProtoFile)
        {
            KDataStoreProject databaseProject = new KDataStoreProject {
                CompanyName = kickstartWizardModel.CompanyName, ProjectName = kickstartWizardModel.ProjectName, KickstartCRUDStoredProcedures = false, Kickstart = kickstartWizardModel.CreateDatabaseProject
            };

            databaseProject.GenerateStoredProcAsEmbeddedQuery = kickstartWizardModel.GenerateStoredProcAsEmbeddedQuery;
            databaseProject.ConvertToSnakeCase = kickstartWizardModel.ConvertToSnakeCase;
            databaseProject.DataStoreType      = kickstartWizardModel.DatabaseType;


            if (kickstartWizardModel.MetadataSource == MetadataSource.Grpc && !kickstartWizardModel.HasSql())
            {
                databaseProject.InferSqlFromProto(kProtoFile);
            }
            else if (kickstartWizardModel.MetadataSource == MetadataSource.SqlScripts || kickstartWizardModel.HasSql())
            {
                databaseProject.SqlTableText           = kickstartWizardModel.SqlTableText;
                databaseProject.SqlTableTypeText       = kickstartWizardModel.SqlTableTypeText;
                databaseProject.SqlStoredProcedureText = kickstartWizardModel.SqlStoredProcText;
            }


            return(databaseProject);
        }
Exemplo n.º 6
0
        private KGrpcProject BuildGrpcProject(KickstartWizardModel kickstartWizardModel, KDataStoreProject databaseProject, KDataLayerProject dataLayerProject, KProtoFile kProtoFile)
        {
            var grpcProject = new KGrpcProject()
            {
                CompanyName = kickstartWizardModel.CompanyName, ProjectName = kickstartWizardModel.ProjectName, Kickstart = kickstartWizardModel.CreateGrpcServiceProject
            };

            if (kProtoFile != null)
            {
                grpcProject.ProtoFile.Add(kProtoFile);
            }
            grpcProject.DependsOnProject.Add(databaseProject);
            grpcProject.DependsOnProject.Add(dataLayerProject);
            return(grpcProject);
        }
Exemplo n.º 7
0
 internal void Bind(KProtoFile kProtoFile)
 {
     this._textBoxProtoFileText.Text = kProtoFile.ProtoFileText;
 }
        public IList <KProtoFile> Convert(KDataStoreProject databaseProject, KDataLayerProject dataLayerProject,
                                          KGrpcProject grpcKProject)
        {
            var protoFiles = new List <KProtoFile>();

            _databaseProject = databaseProject;
            foreach (var dataLayerInter in dataLayerProject.DataServiceInterface)
            {
                //var messagesToAddToBulkRpc = new List<SProtoMessage>();
                var kProtoFile = new KProtoFile {
                    ProtoFileName = grpcKProject.ProjectName
                };
                kProtoFile.GeneratedProtoFile = BuildProtoFile(grpcKProject, kProtoFile,
                                                               $@"{grpcKProject.CompanyName}.{grpcKProject.ProjectName}{grpcKProject.NamespaceSuffix}.{grpcKProject.ProjectSuffix}.Proto.Types");
                protoFiles.Add(kProtoFile);

                foreach (var method in dataLayerInter.Method)
                {
                    var protoFile       = kProtoFile.GeneratedProtoFile;
                    var protoService    = protoFile.ProtoService.FirstOrDefault();
                    var storedProcedure = method.DerivedFrom as CStoredProcedure;

                    var storedProcedureList = method.DerivedFrom as CStoredProcList;
                    if (storedProcedure != null)
                    {
                        if (!storedProcedure.KickstartApi)
                        {
                            continue;
                        }

                        /*
                         *  if (!grpcKProject.KickstartCRUD)
                         *  {
                         *      //filter out anything that is CRUD
                         *      if (storedProcedure.DataOperationIs.HasFlag(SOperationIs.CRUD))
                         *      {
                         *          continue;
                         *      }
                         *
                         *  }*/
                        var rpc = BuildRpcFromStoredProc(protoFile, protoService, method, storedProcedure);

                        //if using Proto first, Rpc may already exist
                        if (!protoService.Rpc.Any(r => r.RpcName == rpc.RpcName))
                        {
                            protoService.Rpc.Add(rpc);
                        }
                    }
                    else if (storedProcedureList != null && storedProcedureList.List.Any())
                    {
                        var rpc = BuildBulkRpcFromStoredProcList(protoFile, protoService, method, storedProcedureList);
                        protoService.Rpc.Add(rpc);
                    }

                    else if (method.MethodIs.HasFlag(COperationIs.Bulk))
                    {
                        // if (addBulkRpc)
                        if (false)
                        {
                            /*
                             * var rpc = new SProtoRpc(protoService)
                             * {
                             *  RpcName = $"{method.MethodName}",
                             *  OperationIs = SOperationIs.Bulk | SOperationIs.Add | SOperationIs.Update | SOperationIs.Delete
                             * };
                             *
                             * var request = new SProtoMessage
                             * {
                             *  IsRequest = true,
                             *  MessageName = $"{rpc.RpcName}Request"
                             *
                             * };
                             *
                             * rpc.Request = request;
                             * foreach (var message in messagesToAddToBulkRpc)
                             * {
                             *  request.ProtoField.Add(new SProtoMessageField(null) { IsScalar = false, Repeated = true, MessageType = message.MessageName, FieldName = $"{message.MessageName}" });
                             * }
                             *
                             * var response = new SProtoMessage
                             * {
                             *  IsResponse = true,
                             *  MessageName = $"{rpc.RpcName}Response"
                             * };
                             * rpc.Response = response;
                             *
                             *
                             * protoService.Rpc.Add(rpc);*/
                        }
                    }
                }
            }

            return(protoFiles);
        }