Untitled
unknown
plain_text
a year ago
3.8 kB
5
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