AURORA-1096-back: поправил фильтры в журнале аудита

This commit is contained in:
tsygankoviva 2026-06-18 16:42:41 +03:00
parent 70bf9fa5b5
commit b9d109bd23
6 changed files with 17 additions and 4 deletions

View File

@ -1,3 +1,5 @@
from datetime import datetime
from fastapi import APIRouter, Depends, status from fastapi import APIRouter, Depends, status
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
@ -35,8 +37,10 @@ async def get_audit_logs(
task_id=params.task_id, task_id=params.task_id,
form_id=params.form_id, form_id=params.form_id,
event_type=params.event_type, event_type=params.event_type,
date_from=params.date_from, event=params.event,
date_to=params.date_to, date_from=datetime.combine(params.date_from, datetime.min.time()) if params.date_from else None,
date_to=datetime.combine(params.date_to, datetime.max.time()) if params.date_to else None,
) )
result = [audit_service.orm_log_to_response(log) for log in logs] result = [audit_service.orm_log_to_response(log) for log in logs]
return BaseListResponse(result=result, count=count) return BaseListResponse(result=result, count=count)

View File

@ -455,8 +455,9 @@ class AuditLogQueryParams(BaseModel):
task_id: Optional[int] = Field(None, description="ID задачи") task_id: Optional[int] = Field(None, description="ID задачи")
form_id: Optional[int] = Field(None, description="ID формы") form_id: Optional[int] = Field(None, description="ID формы")
event_type: Optional[str] = Field(None, description="Тип события") event_type: Optional[str] = Field(None, description="Тип события")
date_from: Optional[datetime] = Field(None, description="Дата начала (ISO 8601)") event: Optional[str] = Field(None, description="Cобытиу")
date_to: Optional[datetime] = Field(None, description="Дата окончания (ISO 8601)") date_from: Optional[date] = Field(None, description="Дата начала (ISO 8601)")
date_to: Optional[date] = Field(None, description="Дата окончания (ISO 8601)")

View File

@ -39,6 +39,7 @@ class AuditLogRepository:
task_id: int | None = None, task_id: int | None = None,
form_id: int | None = None, form_id: int | None = None,
event_type: str | None = None, event_type: str | None = None,
event: str | None = None,
date_from: datetime | None = None, date_from: datetime | None = None,
date_to: datetime | None = None, date_to: datetime | None = None,
) -> tuple[Iterable[AuditLog], int]: ) -> tuple[Iterable[AuditLog], int]:
@ -61,6 +62,9 @@ class AuditLogRepository:
if event_type is not None: if event_type is not None:
query = query.where(AuditLog.event_type == event_type) query = query.where(AuditLog.event_type == event_type)
query_count = query_count.where(AuditLog.event_type == event_type) query_count = query_count.where(AuditLog.event_type == event_type)
if event is not None:
query = query.where(AuditLog.event == event)
query_count = query_count.where(AuditLog.event == event)
if date_from is not None: if date_from is not None:
query = query.where(AuditLog.event_dt >= date_from) query = query.where(AuditLog.event_dt >= date_from)
query_count = query_count.where(AuditLog.event_dt >= date_from) query_count = query_count.where(AuditLog.event_dt >= date_from)

View File

@ -41,6 +41,7 @@ class AuditLogService:
task_id: int | None = None, task_id: int | None = None,
form_id: int | None = None, form_id: int | None = None,
event_type: str | None = None, event_type: str | None = None,
event: str | None = None,
date_from: datetime | None = None, date_from: datetime | None = None,
date_to: datetime | None = None, date_to: datetime | None = None,
) -> tuple[Iterable[AuditLog], int]: ) -> tuple[Iterable[AuditLog], int]:
@ -60,6 +61,7 @@ class AuditLogService:
event_type=event_type, event_type=event_type,
date_from=date_from, date_from=date_from,
date_to=date_to, date_to=date_to,
event=event,
) )
def _can_view_audit_logs(self, user: AppUser) -> bool: def _can_view_audit_logs(self, user: AppUser) -> bool:

View File

@ -65,6 +65,7 @@ def test_projects_write_smoke(client, admin_tokens, auth_headers):
json={"line_id": line_id, "column": "q1.m1", "value": 100}, json={"line_id": line_id, "column": "q1.m1", "value": 100},
headers=auth_headers(admin_tokens), headers=auth_headers(admin_tokens),
) )
assert upd_cell_response.status_code == 200 assert upd_cell_response.status_code == 200
assert isinstance(upd_cell_response.json(), list) assert isinstance(upd_cell_response.json(), list)

View File

@ -58,6 +58,7 @@ async def test_get_all_allowed_for_admin(service_with_mock_repo, admin_user):
event_type="form", event_type="form",
date_from=None, date_from=None,
date_to=None, date_to=None,
event=None,
) )