from typing import List, Optional, Set from redminelib import Redmine from redminelib.resources import Issue from .config import Config def fetch_issues_by_time_entries(from_date: str, to_date: str) -> Optional[List[Issue]]: """ Fetch unique issues linked to time entries of the current user in given date range. """ redmine = Redmine( Config.REDMINE_URL, username=Config.REDMINE_USER, password=Config.REDMINE_PASSWORD, requests={'verify': '/etc/ssl/certs/ca-certificates.crt'} ) current_user = redmine.user.get('current') time_entries = redmine.time_entry.filter( user_id=current_user.id, from_date=from_date, to_date=to_date ) issue_ids: Set[int] = set() for entry in time_entries: if hasattr(entry, 'issue') and entry.issue: issue_ids.add(entry.issue.id) if not issue_ids: return None # Fetch full issue objects with project/version/status issue_list_str = ','.join(str(i) for i in issue_ids) issues = redmine.issue.filter( issue_id=issue_list_str, status_id='*', sort='project:asc' ) return list(issues)