Arslan1997 commited on
Commit
1215efd
·
1 Parent(s): f1dfe1c

made it faster and added color picker

Browse files
Files changed (1) hide show
  1. app/routes/analytics.py +15 -9
app/routes/analytics.py CHANGED
@@ -9,6 +9,7 @@ from fastapi import APIRouter, Depends, HTTPException, status, Request
9
  from sqlalchemy.orm import Session
10
  from typing import Optional
11
  from datetime import datetime
 
12
 
13
  from ..core.db import get_db
14
  from ..core.security import get_current_user
@@ -22,14 +23,19 @@ logger = logging.getLogger(__name__)
22
  router = APIRouter(prefix="/api", tags=["analytics"])
23
 
24
 
 
 
 
 
 
 
 
 
25
  @router.post("/public/forms/{token}/track")
26
  async def track_public_event(
27
  token: str,
28
- event_type: str,
29
- session_id: str,
30
  request: Request,
31
- question_id: Optional[int] = None,
32
- time_spent: Optional[int] = None,
33
  db: Session = Depends(get_db)
34
  ):
35
  """
@@ -51,18 +57,18 @@ async def track_public_event(
51
  # Track event
52
  await analytics_service.track_event(
53
  db=db,
54
- event_type=event_type,
55
  form_id=public_form.form_id,
56
- session_id=session_id,
57
  request=request,
58
- question_id=question_id,
59
- time_spent_seconds=time_spent
60
  )
61
 
62
  return {"success": True, "message": "Event tracked"}
63
 
64
  except Exception as e:
65
- logger.error(f"Analytics tracking failed: {e}")
66
  # Silently fail - analytics shouldn't break form
67
  return {"success": False, "message": "Tracking failed"}
68
 
 
9
  from sqlalchemy.orm import Session
10
  from typing import Optional
11
  from datetime import datetime
12
+ from pydantic import BaseModel
13
 
14
  from ..core.db import get_db
15
  from ..core.security import get_current_user
 
23
  router = APIRouter(prefix="/api", tags=["analytics"])
24
 
25
 
26
+ class TrackEventRequest(BaseModel):
27
+ """Request model for tracking analytics events"""
28
+ event_type: str
29
+ session_id: str
30
+ question_id: Optional[int] = None
31
+ time_spent: Optional[int] = None
32
+
33
+
34
  @router.post("/public/forms/{token}/track")
35
  async def track_public_event(
36
  token: str,
37
+ payload: TrackEventRequest,
 
38
  request: Request,
 
 
39
  db: Session = Depends(get_db)
40
  ):
41
  """
 
57
  # Track event
58
  await analytics_service.track_event(
59
  db=db,
60
+ event_type=payload.event_type,
61
  form_id=public_form.form_id,
62
+ session_id=payload.session_id,
63
  request=request,
64
+ question_id=payload.question_id,
65
+ time_spent_seconds=payload.time_spent
66
  )
67
 
68
  return {"success": True, "message": "Event tracked"}
69
 
70
  except Exception as e:
71
+ logger.error(f"Analytics tracking failed: {e}", exc_info=True)
72
  # Silently fail - analytics shouldn't break form
73
  return {"success": False, "message": "Tracking failed"}
74