Feature - add logs for admin user

This commit is contained in:
2026-06-15 09:41:11 +03:00
parent bf1839607f
commit a1f523628e
23 changed files with 784 additions and 39 deletions

View File

@@ -0,0 +1,41 @@
import json
from typing import Any
from fastapi import Request
from sqlalchemy.orm import Session
from app.models.audit_log import AuditLog
from app.models.user import User
def get_client_ip(request: Request | None) -> str | None:
if request is None:
return None
forwarded = request.headers.get("x-forwarded-for")
if forwarded:
return forwarded.split(",")[0].strip()
if request.client:
return request.client.host
return None
def log_action(
db: Session,
action: str,
*,
user: User | None = None,
resource_type: str | None = None,
resource_id: int | None = None,
details: dict[str, Any] | None = None,
ip_address: str | None = None,
) -> None:
entry = AuditLog(
user_id=user.id if user else None,
username=user.username if user else None,
action=action,
resource_type=resource_type,
resource_id=resource_id,
details=json.dumps(details, ensure_ascii=False) if details else None,
ip_address=ip_address,
)
db.add(entry)