Untitled

 avatar
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