public void UpdateTask(DtoTask task, DtoOperation[] bindedOpers) { repository.UpdateTask(task, bindedOpers); UpdateDtoEntitiesList(operations); UpdateTaskList(); SendServiceInfo($"Changed task {task.Id}"); }
public long CreateTask(DtoTask task, DtoOperation[] bindedOpers) { var newTaskId = repository.CreateTask(task, bindedOpers); UpdateDtoEntitiesList(operations); UpdateTaskList(); SendServiceInfo($"Created task {newTaskId}"); return(newTaskId); }
public void UpdateTask(DtoTask task, params DtoOperation[] bindedOpers) { context.UsingTransaction(transContext => { try { var currentOperIds = context.CreateSimple ($"select id from operation where taskid={task.Id}") .ExecuteQueryFirstColumn <int>().ToList(); var newOperIds = bindedOpers.Select(oper => oper.Id).ToList(); var operIdsToDelete = currentOperIds.Except(newOperIds) .ToList(); var opersToUpdate = bindedOpers.Where(oper => newOperIds.Intersect(currentOperIds).Contains(oper.Id)).ToList(); var opersToWrite = bindedOpers.Where(oper => newOperIds.Except(currentOperIds).Contains(oper.Id)); transContext.Update("Task", task, "Id"); if (operIdsToDelete.Any()) { transContext.CreateSimple( $"Update Operation set isDeleted=1 where TaskId={task.Id} and " + $"id in ({string.Join(",", operIdsToDelete)})") .ExecuteNonQuery(); } foreach (var oper in opersToUpdate ) //no chances of so many opers will be updated so no losses { transContext.Update("Operation", oper, "Id"); } opersToWrite.WriteToServer(transContext, "Operation"); } catch (Exception e) { SendAppWarning("Error occured while updating Task" + $" record: {e.Message}"); throw; } }); }
public int CreateTask(DtoTask task, params DtoOperation[] bindedOpers) { int newTaskId = 0; context.UsingTransaction(transContext => { try { newTaskId = transContext.CreateInsertWithOutput("Task", task, new List <string> { "Id" }, "Id") .ExecuteQueryFirstColumn <int>().First(); if (bindedOpers == null) { return; } foreach (var oper in bindedOpers) { oper.TaskId = newTaskId; } bindedOpers.WriteToServer(transContext, "Operation"); } catch (Exception e) { SendAppWarning("Error occured while creating new Task" + $" record: {e.Message}"); throw; } }); return(newTaskId); }
public async Task TestExportPackageScriptCreator() { IContainer autofac = InitializeTestContainer(); await ConfigureDbForTestScenario(); var dtoTask = new DtoTask(); dtoTask.Id = 1; dtoTask.Name = $"{nameof(DbImporter)} - {nameof(DbPackageDataConsumer)} Test"; // setup a simple db import operation, which initializes an operaion package in the taskContext: string packageInitializingQuery1 = @"select id, ConfigTemplate from [dbo].[OperTemplate]"; CreateOperation(dtoTask.Id , 1 , nameof(DbImporter) , packageInitializingQuery1 , "PackageToConsume" , out DtoOperation packageInitializeOperation1); // setup a simple db import operation, which initializes an operaion package in the taskContext: string packageInitializingQuery2 = @"select 'AAA' testJoinField, 'Works' as msg union all select 'BBB', ' bad!' union all select 'AAA', 'fine!';"; CreateOperation(dtoTask.Id , 2 , nameof(DbImporter) , packageInitializingQuery2 , "PackageToConsume2" , out DtoOperation packageInitializeOperation2); // setup a package consuming operation: string consumingQuery = @"select o.id, tt.msg from [dbo].[Operation] o join #RepPackPackageToConsume t on t.ConfigTemplate = o.config join (select msg, testJoinField from #RepPackPackageToConsume2 where testJoinField != 'BBB') tt on o.config = tt.testJoinField"; CreateOperation(dtoTask.Id , 3 , nameof(DbPackageDataConsumer) , consumingQuery , "ConsumedPackage" , out DtoOperation packageConsumingOperation); SetupRepository(autofac, dtoTask, packageInitializeOperation1, packageInitializeOperation2, packageConsumingOperation); var logic = autofac.Resolve <ILogic>(); logic.Start(); logic.ForceExecute(dtoTask.Id); var taskContext = autofac.Resolve <IReportTaskRunContext>(); // as it was registered as singleton during init. var packageParser = autofac.Resolve <IPackageParser>(); while (taskContext.Packages.TryGetValue("ConsumedPackage", out _) == false) { await Task.Delay(1000); // delay till package appears. } var commandText = autofac.Resolve <SqlCommandInitializer>().ResolveCommand().CommandText; Assert.Equal( @$ "CREATE TABLE #RepPackPackageToConsume ([id] INT NOT NULL,[ConfigTemplate] NVARCHAR(4000) NOT NULL) INSERT INTO #RepPackPackageToConsume (" "id" "," "ConfigTemplate" ") VALUES(@p0,@p1) INSERT INTO #RepPackPackageToConsume (" "id" "," "ConfigTemplate" ") VALUES(@p2,@p3) INSERT INTO #RepPackPackageToConsume (" "id" "," "ConfigTemplate" ") VALUES(@p4,@p5) INSERT INTO #RepPackPackageToConsume (" "id" "," "ConfigTemplate" ") VALUES(@p6,@p7) CREATE TABLE #RepPackPackageToConsume2 ([testJoinField] NVARCHAR(4000) NOT NULL,[msg] NVARCHAR(4000) NOT NULL) INSERT INTO #RepPackPackageToConsume2 (" "testJoinField" "," "msg" ") VALUES(@p8,@p9) INSERT INTO #RepPackPackageToConsume2 (" "testJoinField" "," "msg" ") VALUES(@p10,@p11) INSERT INTO #RepPackPackageToConsume2 (" "testJoinField" "," "msg" ") VALUES(@p12,@p13) select o.id, tt.msg from [dbo].[Operation] o