async def save_pipeline( pipeline: Pipeline, principal_service: PrincipalService = Depends(get_admin_principal) ) -> Pipeline: validate_tenant_id(pipeline, principal_service) pipeline_service = get_pipeline_service(principal_service) action = ask_save_pipeline_action(pipeline_service, principal_service) return trans(pipeline_service, lambda: action(pipeline))
async def save_topic( topic: Topic, principal_service: PrincipalService = Depends(get_admin_principal) ) -> Topic: validate_tenant_id(topic, principal_service) topic_service = get_topic_service(principal_service) action = ask_save_topic_action(topic_service, principal_service, True) return trans_with_tail(topic_service, lambda: action(topic))
async def save_user_group( user_group: UserGroup, principal_service: PrincipalService = Depends(get_admin_principal) ) -> UserGroup: validate_tenant_id(user_group, principal_service) user_group_service = get_user_group_service(principal_service) action = ask_save_user_group_action(user_group_service, principal_service) return trans(user_group_service, lambda: action(user_group))
async def save_user( user: User, principal_service: PrincipalService = Depends(get_any_admin_principal) ) -> User: validate_tenant_id(user, principal_service) user_service = get_user_service(principal_service) action = ask_save_user_action(user_service, principal_service) return trans(user_service, lambda: action(user))
async def save_catalog( catalog: Catalog, principal_service: PrincipalService = Depends(get_admin_principal) ) -> Catalog: validate_tenant_id(catalog, principal_service) catalog_service = get_catalog_service(principal_service) action = ask_save_catalog_action(catalog_service, principal_service) return trans(catalog_service, lambda: action(catalog))
async def save_scheduler( scheduler: TopicSnapshotScheduler, principal_service: PrincipalService = Depends(get_admin_principal) ) -> TopicSnapshotScheduler: validate_tenant_id(scheduler, principal_service) scheduler_service = get_topic_snapshot_scheduler_service(principal_service) action = ask_save_scheduler_action(scheduler_service, principal_service) return trans_with_tail(scheduler_service, lambda: action(scheduler))
async def save_monitor_rules( rules: List[MonitorRule], principal_service: PrincipalService = Depends(get_admin_principal) ) -> List[MonitorRule]: monitor_rule_service = get_monitor_rule_service(principal_service) ArrayHelper(rules).each(lambda x: validate_tenant_id(x, principal_service)) def for_one(rule: MonitorRule) -> MonitorRule: if monitor_rule_service.is_storable_id_faked(rule.ruleId): monitor_rule_service.redress_storable_id(rule) monitor_rule = monitor_rule_service.create(rule) else: existing_rule: Optional[MonitorRule] = monitor_rule_service.find_by_id(rule.ruleId) if existing_rule is None: raise_404() if existing_rule.tenantId != principal_service.get_tenant_id(): raise_404() monitor_rule = monitor_rule_service.update(rule) # noinspection PyTypeChecker return monitor_rule def action() -> List[MonitorRule]: save_rules = ArrayHelper(rules).map(for_one).to_list() monitor_rule_service.delete_others_by_ids( ArrayHelper(save_rules).map(lambda x: x.ruleId).to_list(), principal_service.get_tenant_id()) return save_rules return trans(monitor_rule_service, action)
async def save_bucket(bucket: Bucket, principal_service: PrincipalService = Depends(get_admin_principal)) -> Bucket: validate_tenant_id(bucket, principal_service) bucket_service = get_bucket_service(principal_service) # noinspection DuplicatedCode def action(a_bucket: Bucket) -> Bucket: if bucket_service.is_storable_id_faked(a_bucket.bucketId): bucket_service.redress_storable_id(a_bucket) # noinspection PyTypeChecker a_bucket: Bucket = bucket_service.create(a_bucket) else: # noinspection PyTypeChecker existing_bucket: Optional[Bucket] = bucket_service.find_by_id(a_bucket.bucketId) if existing_bucket is not None: if existing_bucket.tenantId != a_bucket.tenantId: raise_403() # noinspection PyTypeChecker a_bucket: Bucket = bucket_service.update(a_bucket) return a_bucket return trans(bucket_service, lambda: action(bucket))
async def save_enum( an_enum: Enum, principal_service: PrincipalService = Depends(get_admin_principal) ) -> Enum: validate_tenant_id(an_enum, principal_service) enum_service = get_enum_service(principal_service) def action(enumeration: Enum) -> Enum: if enum_service.is_storable_id_faked(enumeration.enumId): enum_service.redress_storable_id(enumeration) if enumeration.items is None: enumeration.items = [] # noinspection PyTypeChecker enumeration: Enum = enum_service.create(enumeration) enum_item_service = get_enum_item_service(enum_service) ArrayHelper(enumeration.items).each( lambda x: create_enum_item(enum_item_service, x, enumeration)) else: # noinspection PyTypeChecker existing_enum: Optional[Enum] = enum_service.find_by_id( enumeration.enumId) if existing_enum is not None: if existing_enum.tenantId != enumeration.tenantId: raise_403() if enumeration.items is None: enumeration.items = [] # noinspection PyTypeChecker enumeration: Enum = enum_service.update(enumeration) enum_item_service = get_enum_item_service(enum_service) enum_item_service.delete_by_enum_id(enumeration.enumId) ArrayHelper(enumeration.items).each( lambda x: create_enum_item(enum_item_service, x, enumeration)) return enumeration return trans(enum_service, lambda: action(an_enum))
async def save_indicator( indicator: Indicator, principal_service: PrincipalService = Depends(get_admin_principal)) -> Indicator: validate_tenant_id(indicator, principal_service) indicator_service = get_indicator_service(principal_service) # noinspection DuplicatedCode def action(an_indicator: Indicator) -> Indicator: if indicator_service.is_storable_id_faked(an_indicator.indicatorId): indicator_service.redress_storable_id(an_indicator) user_group_ids = ArrayHelper(an_indicator.groupIds).distinct().to_list() an_indicator.groupIds = user_group_ids # noinspection PyTypeChecker an_indicator: Indicator = indicator_service.create(an_indicator) # synchronize space to user groups sync_indicator_to_groups(indicator_service, an_indicator.indicatorId, user_group_ids, indicator.tenantId) else: # noinspection PyTypeChecker existing_indicator: Optional[Indicator] = indicator_service.find_by_id(an_indicator.indicatorId) if existing_indicator is not None: if existing_indicator.tenantId != an_indicator.tenantId: raise_403() user_group_ids = ArrayHelper(an_indicator.groupIds).distinct().to_list() an_indicator.groupIds = user_group_ids # noinspection PyTypeChecker an_indicator: Indicator = indicator_service.update(an_indicator) # remove indicator from user groups, in case user groups are removed removed_user_group_ids = ArrayHelper(existing_indicator.groupIds).difference(user_group_ids).to_list() remove_indicator_from_groups( indicator_service, indicator.indicatorId, removed_user_group_ids, indicator.tenantId) # synchronize indicator to user groups sync_indicator_to_groups(indicator_service, indicator.indicatorId, user_group_ids, indicator.tenantId) return an_indicator return trans(indicator_service, lambda: action(indicator))
async def save_space( space: Space, principal_service: PrincipalService = Depends(get_admin_principal)) -> Space: validate_tenant_id(space, principal_service) space_service = get_space_service(principal_service) action = ask_save_space_action(space_service, principal_service) return trans(space_service, lambda: action(space))