Clean arch

This commit is contained in:
Artem Kokos
2026-01-19 23:13:02 +07:00
parent a191ba3a8f
commit d1b1648940
9 changed files with 217 additions and 152 deletions

34
redmine_reporter/core.py Normal file
View File

@@ -0,0 +1,34 @@
from typing import List
from .client import RedmineClient
from .models import IssueRecord
def fetch_issues_for_period(
client: RedmineClient,
from_date: str,
to_date: str
) -> List[IssueRecord]:
user_id = client.get_current_user_id()
time_entries = client.get_time_entries(user_id, from_date, to_date)
if not time_entries:
return []
issue_ids = list({str(e.issue.id) for e in time_entries if hasattr(e, 'issue') and e.issue})
issues = client.get_issues_by_ids(issue_ids)
records = []
for issue in issues:
project = str(getattr(issue, 'project', 'Unknown'))
version = str(getattr(issue, 'version', '<N/A>'))
status = str(getattr(issue, 'status', 'Unknown'))
records.append(IssueRecord(
project=project,
version=version,
issue_id=issue.id,
subject=issue.subject,
status=status
))
records.sort(key=lambda r: (r.project, r.version))
return records