async def _generate_issue_entities(
        self, client: httpx.AsyncClient, project: JiraProjectEntity
    ) -> AsyncGenerator[JiraIssueEntity, None]:
        """Generate JiraIssueEntity for each issue in the given project using JQL search."""
        project_key = project.project_key
        logger.info(f"Starting issue entity generation for project: {project_key} ({project.name})")

        # Setup for pagination
        search_url = f"{self.base_url}/rest/api/3/search"
        start_at = 0
        max_results = 50
        page = 1
        total_issues = 0

        while True:
            # Construct parameters with JQL query for the project
            params = {
                "jql": f"project = {project_key}",
                "startAt": start_at,
                "maxResults": max_results,
                "fields": "summary,description,status,issuetype,created,updated",
            }

            # Convert params to URL query string
            query_string = "&".join([f"{k}={v}" for k, v in params.items()])
            full_url = f"{search_url}?{query_string}"

            logger.info(f"Fetching issues page {page} for project {project_key}")
            data = await self._get_with_auth(client, full_url)

            # Log response overview
            total = data.get("total", 0)
            issues = data.get("issues", [])
            logger.info(f"Found {len(issues)} issues on page {page} (total available: {total})")

            # Process each issue
            for issue_data in issues:
                total_issues += 1
                issue_entity = self._create_issue_entity(issue_data, project)
                yield issue_entity

            # Check if we've processed all issues
            start_at += max_results
            page += 1

            if start_at >= total:
                logger.info(
                    f"Completed fetching all {total_issues} issues for project {project_key}"
                )
                break

            logger.debug(f"Moving to next page, startAt={start_at}")
Generate JiraIssueEntity for each issue in the given project using JQL search.
backend/airweave/platform/sources/jira.py