Untitled
unknown
plain_text
8 months ago
3.8 kB
3
Indexable
@mutation async def approve_reject_rel_groups( self, info: Info, inputs: List[UpdateRelationInput] ) -> RelateTopicSubcatPayload: try: for input in inputs: result = self.process_relation_approval_rejection(info, input) if not result.success: return result return RelateTopicSubcatPayload( message="Relations processed successfully", success=True, updated_relations=inputs, ) except Exception as e: info.context.session.rollback() return RelateTopicSubcatPayload( message=f"Relation Updation Failed: {str(e)}", success=False, updated_relations=[], ) def process_relation_approval_rejection( self, info: Info, input: UpdateRelationInput ) -> RelateTopicSubcatPayload: """ Handles the approval/rejection logic for a single group relation. """ group_relation_revision = fetch_group_relation_revision(info, input.group_rel_id) if group_relation_revision is None: return RelateTopicSubcatPayload( message="No active group relation revision found", success=False, updated_relations=[], ) if not check_approval_status(info, group_relation_revision): return RelateTopicSubcatPayload( message="Please approve Category/Subcategory First", success=False, updated_relations=[], ) if input.submit_type == SubmitType.APPROVE: return self.handle_approval(info, input, group_relation_revision) elif input.submit_type == SubmitType.REJECT: return self.handle_rejection(info, input, group_relation_revision) return RelateTopicSubcatPayload( message="Invalid submit type provided", success=False, updated_relations=[], ) def handle_approval( self, info: Info, input: UpdateRelationInput, group_relation_revision: GroupRelationRevision ) -> RelateTopicSubcatPayload: """ Handles the approval flow for a group relation. """ update_current_record(info, group_relation_revision) new_revision_id, new_status_id = insert_new_group_relation_revision( info, group_relation_revision, input.submit_type ) if new_revision_id is None: return RelateTopicSubcatPayload( message="Failed to insert new group relation revision", success=False, updated_relations=[], ) update_group_relation( info, input.group_rel_id, new_revision_id, new_status_id, group_relation_revision, ) return RelateTopicSubcatPayload( message="Relation approved successfully", success=True, updated_relations=[input], ) def handle_rejection( self, info: Info, input: UpdateRelationInput, group_relation_revision: GroupRelationRevision ) -> RelateTopicSubcatPayload: """ Handles the rejection flow for a group relation. """ update_current_record(info, group_relation_revision) new_revision_id, new_status_id = insert_new_group_relation_revision( info, group_relation_revision, input.submit_type ) if new_revision_id is None: return RelateTopicSubcatPayload( message="Failed to insert new group relation revision", success=False, updated_relations=[], ) if group_relation_revision.status_id == RequestStatus.PENDING_NEW.value: update_group_relation( info, input.group_rel_id, new_revision_id, new_status_id, group_relation_revision, ) return RelateTopicSubcatPayload( message="Relation rejected successfully", success=True, updated_relations=[input], )
Editor is loading...
Leave a Comment