private void UpdatePipelineItemPlacements( CompanyEntity company, ICollection <PipelineItemEntity> pipelineItems, ICollection <PipelineItemPlacementDto> pipelineItemPlacements ) { foreach (PipelineItemPlacementDto pipelineItemPlacement in pipelineItemPlacements) { PipelineItemEntity pipelineItemEntity = pipelineItems.FirstOrDefault( pi => pi.id == pipelineItemPlacement.PipelineItemId.Value ); ManufactoryEntity manufactoryPlacement = GetManufactoryByPoint( company, pipelineItemPlacement.X.Value, pipelineItemPlacement.Y.Value ); if (manufactoryPlacement == null) { throw new PlacementException(); } pipelineItemEntity.manufactory_id = manufactoryPlacement.id; pipelineItemEntity.x = pipelineItemPlacement.X; pipelineItemEntity.y = pipelineItemPlacement.Y; } }
public async Task <PipelineItemModel> Create(AuthorizedDto <PipelineItemDto> dto) { return(await Execute(async() => { using (UnitOfWork db = new UnitOfWork()) { PipelineItemEntity pipelineItemEntity = dto.Data.ToModel <PipelineItemModel>().ToEntity <PipelineItemEntity>(); pipelineItemEntity.PipelineItemSettingsValues = null; await db.GetRepo <PipelineItemEntity>().Create(pipelineItemEntity); await db.Save(); PipelineItemPrefabEntity prefab = await db.GetRepo <PipelineItemPrefabEntity>().Get(pipelineItemEntity.pipeline_item_prefab_id); RoleEntity ownerRole = await RoleService.GetCompanyOwnerRole(prefab.company_id, db); ownerRole.PipelineItemPermissions.Add(pipelineItemEntity); RoleEntity creatorRole = await RoleService.GetCompanyWorkerRole(dto.Session.UserId, db); creatorRole?.PipelineItemPermissions.Add(pipelineItemEntity); await db.Save(); return pipelineItemEntity.ToModel <PipelineItemModel>(); } })); }
public async Task <PipelineItemModel> SetupDetector(AuthorizedDto <SetupDetectorDto> dto) { return(await Execute(async() => { using (UnitOfWork db = new UnitOfWork()) { DetectorEntity detector = await db.GetRepo <DetectorEntity>().FirstOrDefault(d => d.id == dto.Data.DetectorId.Value); detector.pipeline_item_id = dto.Data.PipelineItemId.Value; await db.Save(); PipelineItemEntity pipelineItemEntity = await db.GetRepo <PipelineItemEntity>().FirstOrDefault( p => p.id == dto.Data.PipelineItemId.Value ); return pipelineItemEntity.ToModel <PipelineItemModel>(); } })); }
public async Task TryInteract(PipelineItemInteractionDto dto) { await Execute(async() => { using (UnitOfWork db = new UnitOfWork()) { PipelineItemEntity pipelineItem = await db.GetRepo <PipelineItemEntity>().Get(dto.PipelineItemId.Value); AccountEntity account = await db.GetRepo <AccountEntity>().Get(dto.AccountId.Value); PipelineItemInteractionEventEntity pipelineItemEvent = new PipelineItemInteractionEventEntity() { account_id = account.id, pipeline_item_id = pipelineItem.id, timespan = DateTime.Now }; NotPermittedException ex = null; if (account.Roles.SelectMany(r => r.PipelineItemPermissions).Any(m => m.id == pipelineItem.id)) { pipelineItemEvent.log = $"Interaction with Pipeline item #{pipelineItem.id} by Account #{account.id}: SUCCESS"; } else { pipelineItemEvent.log = $"Interaction with Pipeline item #{pipelineItem.id} by Account #{account.id}: ACCESS DENIED"; ex = new NotPermittedException(pipelineItemEvent.log); } await db.GetRepo <PipelineItemInteractionEventEntity>().Create(pipelineItemEvent); await db.Save(); if (ex != null) { throw ex; } } }); }
private void UpdatePipelineConnections( ICollection <PipelineItemEntity> pipelineItems, ICollection <StorageCellEntity> storageCells, PipelineDto pipelineDto, PipelineEntity pipeline ) { foreach (PipelineConnectionDto connection in pipelineDto.Connections) { PipelineItemEntity pipelineItemEntity = pipelineItems.FirstOrDefault( pi => pi.id == connection.PipelineItemId.Value ); pipelineItemEntity.pipeline_id = pipeline.id; PipelineItemEntity[] inputPipelineItems = connection.InputPipelineItems.Select( inputPipelineItem => pipelineItems.FirstOrDefault(pi => pi.id == inputPipelineItem.Id.Value) ).ToArray(); foreach (PipelineItemEntity pipelineItemToRemove in pipelineItemEntity.InputPipelineItems.Except(inputPipelineItems).ToArray()) { pipelineItemEntity.InputPipelineItems.Remove(pipelineItemToRemove); } foreach (PipelineItemEntity pipelineItemToAdd in inputPipelineItems.Except(pipelineItemEntity.InputPipelineItems).ToArray()) { pipelineItemEntity.InputPipelineItems.Add(pipelineItemToAdd); } PipelineItemEntity[] outputPipelineItems = connection.OutputPipelineItems.Select( outputPipelineItem => pipelineItems.FirstOrDefault(pi => pi.id == outputPipelineItem.Id.Value) ).ToArray(); foreach (PipelineItemEntity pipelineItemToRemove in pipelineItemEntity.OutputPipelineItems.Except(outputPipelineItems).ToArray()) { pipelineItemEntity.OutputPipelineItems.Remove(pipelineItemToRemove); } foreach (PipelineItemEntity pipelineItemToAdd in outputPipelineItems.Except(pipelineItemEntity.OutputPipelineItems).ToArray()) { pipelineItemEntity.OutputPipelineItems.Add(pipelineItemToAdd); } StorageCellEntity[] inputStorageCells = connection.InputStorageCells.Select( inputStorageCell => storageCells.FirstOrDefault(pi => pi.id == inputStorageCell.Id.Value) ).ToArray(); foreach (StorageCellEntity storageCell in inputStorageCells) { storageCell.pipeline_id = pipeline.id; } foreach (StorageCellEntity storageCellToRemove in pipelineItemEntity.InputStorageCells.Except(inputStorageCells).ToArray()) { pipelineItemEntity.InputStorageCells.Remove(storageCellToRemove); } foreach (StorageCellEntity storageCellToAdd in inputStorageCells.Except(pipelineItemEntity.InputStorageCells).ToArray()) { pipelineItemEntity.InputStorageCells.Add(storageCellToAdd); } StorageCellEntity[] outputStorageCells = connection.OutputStorageCells.Select( outputStorageCell => storageCells.FirstOrDefault(pi => pi.id == outputStorageCell.Id.Value) ).ToArray(); foreach (StorageCellEntity storageCell in outputStorageCells) { storageCell.pipeline_id = pipeline.id; } foreach (StorageCellEntity storageCellToRemove in pipelineItemEntity.OutputStorageCells.Except(outputStorageCells).ToArray()) { pipelineItemEntity.OutputStorageCells.Remove(storageCellToRemove); } foreach (StorageCellEntity storageCellToAdd in outputStorageCells.Except(pipelineItemEntity.OutputStorageCells).ToArray()) { pipelineItemEntity.OutputStorageCells.Add(storageCellToAdd); } } }
public async Task <PipelineItemModel> SetupSettings(AuthorizedDto <PipelineItemDto> dto) { return(await Execute(async() => { using (UnitOfWork db = new UnitOfWork()) { IRepo <PipelineItemEntity> pipelineItemRepo = db.GetRepo <PipelineItemEntity>(); PipelineItemEntity pipelineItemEntity = await pipelineItemRepo.FirstOrDefault(pi => pi.id == dto.Data.Id.Value); PipelineItemInteractionEventEntity pipelineItemEvent = new PipelineItemInteractionEventEntity() { account_id = dto.Session.UserId, pipeline_item_id = pipelineItemEntity.id, timespan = DateTime.Now, log = $"Settings setup for Pipeline Item #{pipelineItemEntity.id} by {dto.Session.UserId}" }; await db.GetRepo <PipelineItemInteractionEventEntity>().Create(pipelineItemEvent); foreach (PipelineItemSettingsValueDto settingsValueDto in dto.Data.SettingsValues) { if (settingsValueDto.Id.HasValue) { PipelineItemSettingsValueEntity settingsValueEntity = pipelineItemEntity.PipelineItemSettingsValues.First( setting => setting.id == settingsValueDto.Id.Value ); DataType dataType = settingsValueEntity.PipelineItemSettingsPrefab.DataType.name.FromName(); DataTypeService.CheckIsDataOfType(settingsValueDto.ValueBase64, dataType); settingsValueEntity.option_data_value_base64 = settingsValueDto.ValueBase64; } else { PipelineItemSettingsPrefabEntity pipelineItemSettingsPrefab = pipelineItemEntity.PipelineItemPrefab.PipelineItemSettingsPrefabs.FirstOrDefault( settingsPrefab => settingsPrefab.id == settingsValueDto.PrefabId.Value ); if (pipelineItemSettingsPrefab == null) { throw new NotFoundException("PipelineItemSettingsPrefab"); } DataType dataType = pipelineItemSettingsPrefab.DataType.name.FromName(); DataTypeService.CheckIsDataOfType(settingsValueDto.ValueBase64, dataType); PipelineItemSettingsValueEntity settingWithSameSettingPrefab = pipelineItemEntity.PipelineItemSettingsValues.FirstOrDefault( setting => setting.pipeline_item_settings_prefab_id == settingsValueDto.PrefabId.Value ); if (settingWithSameSettingPrefab != null) { settingWithSameSettingPrefab.option_data_value_base64 = settingsValueDto.ValueBase64; } else { PipelineItemSettingsValueEntity settingsValueEntity = new PipelineItemSettingsValueEntity() { pipeline_item_id = pipelineItemEntity.id, option_data_value_base64 = settingsValueDto.ValueBase64, pipeline_item_settings_prefab_id = settingsValueDto.PrefabId.Value }; pipelineItemEntity.PipelineItemSettingsValues.Add(settingsValueEntity); } } } await db.Save(); return pipelineItemEntity.ToModel <PipelineItemModel>(); } })); }