50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
from datetime import datetime
|
|
from flask import Blueprint, jsonify, request
|
|
from ..models import ActivityLog, ActivityCategory
|
|
|
|
bp = Blueprint("api", __name__, url_prefix="/api")
|
|
|
|
@bp.route("/activity_logs")
|
|
def get_activity_logs():
|
|
"""Get activity logs with filtering options."""
|
|
# Get query parameters
|
|
category = request.args.get("category")
|
|
action = request.args.get("action")
|
|
after = request.args.get("after")
|
|
limit = request.args.get("limit", 20, type=int)
|
|
|
|
# Build query
|
|
query = ActivityLog.query
|
|
|
|
if category:
|
|
query = query.filter(ActivityLog.category == category)
|
|
|
|
if action:
|
|
query = query.filter(ActivityLog.action == action)
|
|
|
|
if after:
|
|
try:
|
|
after_date = datetime.fromisoformat(after.replace("Z", "+00:00"))
|
|
query = query.filter(ActivityLog.timestamp > after_date)
|
|
except (ValueError, TypeError):
|
|
pass
|
|
|
|
# Order by most recent first and limit results
|
|
logs = query.order_by(ActivityLog.timestamp.desc()).limit(limit).all()
|
|
|
|
# Format the results
|
|
result = []
|
|
for log in logs:
|
|
log_data = {
|
|
"id": log.id,
|
|
"timestamp": log.timestamp.isoformat(),
|
|
"category": log.category,
|
|
"action": log.action,
|
|
"description": log.description,
|
|
"status": log.status,
|
|
"paper_id": log.paper_id,
|
|
"extra_data": log.extra_data
|
|
}
|
|
result.append(log_data)
|
|
|
|
return jsonify(result) |