Exemplo n.º 1
0
        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;
                    }
                }
            });
        }
Exemplo n.º 5
0
        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>();
                }
            }));
        }