protected override void Validate()
        {
            var invalidProperties = new List <string>();
            var columnNames       = ColumnNames;

            foreach (var property in DbRequest.Properties())
            {
                var propertyName = Database.ToDbCase(property.Name);
                if (columnNames.Contains(propertyName))
                {
                    if (!Columns.Any(q => q.IsReadonly && q.ColumnName == propertyName))
                    {
                        DbRequest[propertyName]    = property.Value;
                        DbToJsonName[propertyName] = propertyName;
                    }
                    else
                    {
                        Response.AddError(DbToJsonName[property.Name], Database.ErrorMessages.ReadonlyProperty);
                    }
                }
                else
                {
                    invalidProperties.Add(property.Name);
                }
            }

            if (invalidProperties.Count == 0)
            {
                return;
            }

            Response.SetBadRequestError(Database.ErrorMessages.InvalidProperties(string.Join(", ", invalidProperties)));
            Response.Continue = false;
        }
Exemplo n.º 2
0
        void IResultWriter.AfterCloseReader(int affectedRows)
        {
            var duration = Stopwatch.GetTimestamp() - _beforeExecuteReaderTimestamp;
            var now      = LocalTime.Default.Now;
            var affected = affectedRows >= 0
                ? $"{affectedRows} row(s) affected."
                : null;
            var message = $"Command[{_commandCount - 1}] completed in {StopwatchTimeSpan.ToString(duration, 3)} seconds. {affected}";

            _addInfoMessage(new InfoMessage(now, InfoMessageSeverity.Verbose, null, message));

            if (_query != null)
            {
                var directory = _fileName != null?Path.GetDirectoryName(_fileName) : Path.GetTempPath();

                var results = _query.Results.EmptyIfNull().Zip(_results, ToResult).ToReadOnlyCollection();
                var query   = new DbRequest(directory, _query.Name, _query.Using, _query.Namespace, _commandText, 0, _parameters, results);

                var queryBuilder     = new DbRequestBuilder(query);
                var csharpSourceCode = queryBuilder.Build();

                var path = Path.Combine(query.Directory, $"{query.Name}.generated.cs");
                File.WriteAllText(path, csharpSourceCode, Encoding.UTF8);

                _query       = null;
                _parameters  = null;
                _commandText = null;
                _results     = null;
            }
        }
Exemplo n.º 3
0
        public async Task <IHttpActionResult> CallRequestRegistration([FromUri] string param1, [FromUri] string param2, [FromBody] string param3)
        {
            try
            {
                var fileText = await Request.Content.ReadAsStringAsync();

                if (!CheckingHelper <string> .CheckForNullEmptyWhiteSpace(fileText))
                {
                    return(ResponseMessage(RequiredParameterIsLost("Текст файла")));
                }

                FileController.FileController.SaveFile(param1, fileText, Settings.Instance.BasePath);
                var dbRequest = new DbRequest();
                dbRequest.InsertNewFileInfo(param2, param1);
                var response = new BaseStringResponse()
                {
                    Error    = false,
                    Message  = "Запрос выполнен успешно",
                    Response = null
                };
                var resultJson = Serializer.Serialize(response);
                var result     = new HttpResponseMessage(System.Net.HttpStatusCode.OK)
                {
                    Content = new StringContent(resultJson, Encoding.UTF8, "application/json")
                };
                return(ResponseMessage(result));
            }
            catch (Exception exc)
            {
                return(ResponseMessage(RequestError(exc.Message)));
            }
        }
Exemplo n.º 4
0
 public IHttpActionResult GetCallState([FromBody] FileNames param1)
 {
     try
     {
         if (!CheckingHelper <FileNames> .CheckForNull(param1))
         {
             return(ResponseMessage(RequiredParameterIsLost("Names")));
         }
         var callStates = new List <CallState>();
         var dbRequest  = new DbRequest();
         callStates = dbRequest.GetCallStates(param1.Files);
         var response = new BaseResponse <CallState>()
         {
             Error    = false,
             Message  = "Запрос выполнен успешно",
             Response = callStates
         };
         var resultJson = Serializer.Serialize(response);
         var result     = new HttpResponseMessage(System.Net.HttpStatusCode.OK)
         {
             Content = new StringContent(resultJson, Encoding.UTF8, "application/json")
         };
         return(ResponseMessage(result));
     }
     catch (Exception exc)
     {
         LogWriter.Add($"{exc.ToString()} {exc.InnerException.ToString()}");
         return(ResponseMessage(RequestError(exc.Message)));
     }
 }
        public string GetHubs(string value)
        {
            string hubs = string.Empty;

            try
            {
                DbRequest request = new DbRequest();
                request.isSelectQuery = true;
                request.Query         = "SELECT hub_code FROM OPN_HUBS";
                DbResponse response = Database_Access.Execute_Db_Query(request);
                if (null != response)
                {
                    if (null != response.dataTable)
                    {
                        response.dataTable.Rows.Cast <DataRow>().ToList().ForEach(row =>
                        {
                            hubs = hubs + "," + Convert.ToString(row[0]);
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                hubs = "ERROR" + "," + ex.Message;
                hubs = hubs + "," + ex.StackTrace;
            }
            return(hubs);
        }
Exemplo n.º 6
0
        void IResultWriter.AfterCloseReader(int affectedRows)
        {
            var duration      = Stopwatch.GetTimestamp() - _beforeExecuteReaderTimestamp;
            var header        = StopwatchTimeSpan.ToString(duration, 3);
            var stringBuilder = new StringBuilder();

            stringBuilder.Append($"Command[{_commandCount - 1}] completed.");
            if (affectedRows >= 0)
            {
                stringBuilder.Append($" {affectedRows} row(s) affected.");
            }
            var message = stringBuilder.ToString();

            _addInfoMessage(InfoMessageFactory.Create(InfoMessageSeverity.Verbose, header, message));

            if (_query != null)
            {
                var directory = _fileName != null?Path.GetDirectoryName(_fileName) : Path.GetTempPath();

                var results = _query.Results.EmptyIfNull().Zip(_results, ToResult).ToReadOnlyList();
                var query   = new DbRequest(directory, _query.Name, _query.Using, _query.Namespace, _commandText, 0, _parameters, results);

                var queryBuilder     = new DbRequestBuilder(query);
                var csharpSourceCode = queryBuilder.Build();

                var path = Path.Combine(query.Directory, $"{query.Name}.generated.cs");
                File.WriteAllText(path, csharpSourceCode, Encoding.UTF8);

                _query       = null;
                _parameters  = null;
                _commandText = null;
                _results     = null;
            }
        }
Exemplo n.º 7
0
        protected override void Validate()
        {
            var columnNames = Columns.Where(q => q.IsRequired).Select(s => s.ColumnName);

            foreach (var property in DbRequest.Properties())
            {
                if (columnNames.Contains(property.Name) && string.IsNullOrWhiteSpace(property.Value <string>()))
                {
                    Response.AddError(DbToJsonName[property.Name], Database.ErrorMessages.Required);
                }
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// Получить id всех потомков
        /// </summary>
        /// <param name="db"></param>
        /// <param name="req"></param>
        /// <returns></returns>
        private IList <int> GetChildsIds(DbContext db, DbRequest req)
        {
            var childs = db.Requests.Where(o => o.ParentId == req.Id);
            var result = childs.Select(o => o.Id).ToList();

            foreach (var childReq in childs)
            {
                result.AddRange(GetChildsIds(db, childReq));
            }

            return(result);
        }
Exemplo n.º 9
0
        /// <summary>
        /// Проверка на возможность закрытия задачи
        /// </summary>
        /// <param name="db">Соединение с базой</param>
        /// <param name="req">Проверяемая задача</param>
        /// <returns></returns>
        private bool CanComplete(DbContext db, DbRequest req)
        {
            var checkedIds = GetChildsIds(db, req);

            //checkedIds.Add(req.Id);

            //Если в подзадачах есть хоть одна задача со статусом назначена, закрывать нельзя
            return(!db.Requests.Where(o => checkedIds.Contains(o.Id)).Any(o => o.Status == (int)Models.Enums.Statuses.Assigned));

            //return !(req.InverseParent.Any(o => o.Status == (int)Models.Enums.Statuses.Assigned)
            //&& req.InverseParent.Select(o => CanComplete(db, o.Id)).Any(o => o == false));
            //|| db.Requests.Where(o => checkedIds.Contains(o.Id)).Any(o => o.Status == (int)Models.Enums.Statuses.Assigned));
        }
Exemplo n.º 10
0
        private void CompleteRequest(DbContext db, DbRequest req)
        {
            if (req.Status != (int)Models.Enums.Statuses.Completed)
            {
                req.EndDate = DateTime.Now;
                req.Status  = (int)Models.Enums.Statuses.Completed;
            }
            var childs = db.Requests.Where(o => o.ParentId == req.Id);

            foreach (var childReq in childs)
            {
                CompleteRequest(db, childReq);
            }
        }
        protected override void Validate()
        {
            var columnNames = Columns.Where(q => q.IsPrimaryKey).Select(s => s.ColumnName);

            foreach (var columnName in columnNames)
            {
                if (!DbRequest.ContainsKey(columnName))
                {
                    Response.AddError(DbToJsonName[columnName], Database.ErrorMessages.MissingProperty);
                    Response.Continue = false;
                }
                else if (string.IsNullOrEmpty(DbRequest[columnName].Value <string>()))
                {
                    Response.AddError(DbToJsonName[columnName], Database.ErrorMessages.Required);
                }
            }
        }
Exemplo n.º 12
0
        public async Task <IActionResult> GetDatabaseDetailAsync([FromBody] DbRequest request)
        {
            Logger?.LogDebug("'{0}' has been invoked", nameof(GetDatabaseDetailAsync));

            var response = new SingleResponse <DatabaseDetail>();

            try
            {
                response.Model = await DbService.GetDatabaseDetailAsync(request.Name);
            }
            catch (Exception ex)
            {
                response.SetError(ex, Logger);
            }

            return(response.ToHttpResponse());
        }
Exemplo n.º 13
0
 private Request GetRequest(DbRequest obj)
 {
     return(new Request
     {
         Id = obj.Id,
         ParentId = obj.ParentId,
         Name = obj.Name,
         Comment = obj.Comment,
         Performers = obj.Performers,
         CreateDate = obj.CreateDate,
         StartDate = obj.StartDate,
         EndDate = obj.EndDate,
         Deadline = obj.Deadline,
         Status = (Models.Enums.Statuses)obj.Status,
         //ParentName = obj.Parent != null ? obj.Parent.Name : null,
         //ChildsNames = obj.InverseParent.Select(o => o.Name).ToList(),
     });
 }
        public async Task TestGetDatabaseDetailAsync()
        {
            // Arrange
            var logger             = LoggingHelper.GetLogger <DocumentationController>();
            var hostingEnvironment = HostingEnvironmentMocker.GetHostingEnvironment();
            var apiConfig          = new ApiConfig();
            var dbService          = new DbService(hostingEnvironment, apiConfig);
            var controller         = new DocumentationController(logger, dbService);
            var request            = new DbRequest
            {
                Name = "OnlineStore"
            };

            // Act
            var response = await controller.GetDatabaseDetailAsync(request) as ObjectResult;

            var value = response.Value as ISingleResponse <DatabaseDetail>;

            // Assert
            Assert.False(value.DidError);
        }
Exemplo n.º 15
0
        public async Task TestGetTableAsync()
        {
            // Arrange
            var hostingEnvironment = HostingEnvironmentMocker.GetMockHostingEnvironment();
            var apiConfig          = new ApiConfig();
            var logger             = LoggerMocker.GetLogger <DbController>();
            var dbService          = new DbService(hostingEnvironment, apiConfig);
            var controller         = new DbController(logger, dbService);
            var request            = new DbRequest
            {
                Name  = "Store",
                Table = "Sales.Order"
            };

            // Act
            var response = await controller.GetTableAsync(request) as ObjectResult;

            var value = response.Value as ISingleResponse <ITable>;

            // Assert
            Assert.False(value.DidError);
        }
Exemplo n.º 16
0
        public async Task <DbResponse <TOut[]> > ExecuteStoredProcedure <TOut>(DbRequest request)
        {
            _logger.Information("Executing DB request {@request}", request);

            try
            {
                using (var connection = _connectionFactory.Create(Constants.DatabaseNames.MsSql))
                {
                    var executor = new SpExecutor(connection);
                    var result   = (await executor.Execute <TOut>(request.ProcedureName, request.Parameter))
                                   .ToArray();

                    _logger.Information("DB response {@response}", result);

                    return(request.Ok(result));
                }
            }
            catch (Exception e)
            {
                _logger.Error(e, "Error occured during executing DB request {@request}", request);
                return(request.Fail <TOut[]>(e));
            }
        }
        public async Task TestEditDescriptionAsync()
        {
            // Arrange
            var hostingEnvironment = HostingEnvironmentMocker.GetHostingEnvironment();
            var apiConfig          = new ApiConfig();
            var dbService          = new DbService(hostingEnvironment, apiConfig);
            var logger             = LoggingHelper.GetLogger <DocumentationController>();
            var controller         = new DocumentationController(logger, dbService);
            var request            = new DbRequest
            {
                Name        = "OnlineStore",
                Table       = "Warehouse.Product",
                Type        = "table",
                Description = "Products catalog (unit tests)"
            };

            // Act
            var response = await controller.EditDescriptionAsync(request) as ObjectResult;

            var value = response.Value as ISingleResponse <EditDescription>;

            // Assert
            Assert.False(value.DidError);
        }
Exemplo n.º 18
0
        public async Task <IActionResult> EditDescriptionAsync([FromBody] DbRequest request)
        {
            Logger?.LogDebug("'{0}' has been invoked", nameof(EditDescriptionAsync));

            var response = new SingleResponse <EditDescription>();

            try
            {
                var db = await DbService.GetDatabaseAsync(request.Name);

                var databaseFactory = new SqlServerDatabaseFactory
                {
                    DatabaseImportSettings = await DbService.GetDatabaseImportSettingsAsync(request.Name)
                };

                if (request.Type == Tokens.TABLE)
                {
                    var table = db.FindTable(request.Table);

                    if (string.IsNullOrEmpty(request.Column))
                    {
                        databaseFactory.AddOrUpdateExtendedProperty(table, Tokens.MS_DESCRIPTION, request.FixedDescription);

                        table.Description = request.Description;
                    }
                    else
                    {
                        var column = table.Columns.First(item => item.Name == request.Column);

                        databaseFactory.AddOrUpdateExtendedProperty(table, column, Tokens.MS_DESCRIPTION, request.FixedDescription);

                        column.Description = request.Description;
                    }
                }
                else if (request.Type == Tokens.VIEW)
                {
                    var view = db.FindView(request.View);

                    if (string.IsNullOrEmpty(request.Column))
                    {
                        databaseFactory.AddOrUpdateExtendedProperty(view, Tokens.MS_DESCRIPTION, request.FixedDescription);

                        view.Description = request.Description;
                    }
                    else
                    {
                        var column = view.Columns.First(item => item.Name == request.Column);

                        databaseFactory.AddOrUpdateExtendedProperty(view, view.Columns.First(item => item.Name == request.Column), Tokens.MS_DESCRIPTION, request.FixedDescription);

                        column.Description = request.Description;
                    }
                }

                await DbService.SerializeAsync(db);

                await DbService.SerializeAsync(databaseFactory.DatabaseImportSettings);
            }
            catch (Exception ex)
            {
                response.SetError(ex, Logger);
            }

            return(response.ToHttpResponse());
        }
Exemplo n.º 19
0
 public DbRequestBuilder(DbRequest request)
 {
     Assert.IsNotNull(request);
     _request = request;
 }
Exemplo n.º 20
0
 public void Setup()
 {
     RequestsScripts = File.ReadAllText(DbRequest.Requests()).Split(new string[] { "GO\r\n", "GO ", "GO\t" }, StringSplitOptions.RemoveEmptyEntries);
 }
Exemplo n.º 21
0
 public DbRequestBuilder(DbRequest request)
 {
     ArgumentNullException.ThrowIfNull(request);
     _request = request;
 }