feat: admin date-time calendar controller, dpp ui cleanup, 4-subject jee+neet tracker, calendar filter, and clean new account state

This commit is contained in:
2026-10-23 12:23:36 +05:30
parent 8a5ea57feb
commit 19edf83684
10 changed files with 1143 additions and 200 deletions

View File

@@ -899,8 +899,8 @@ DEMO_DEFINITIONS = {
"state": "Bihar",
"school": "Loyola High School",
"tier": models.TierEnum.FREE,
"streak_count": 1,
"longest_streak": 1,
"streak_count": 0,
"longest_streak": 0,
# trial_end is intentionally omitted here — it is set dynamically at creation time
},
}
@@ -1110,7 +1110,6 @@ DEMO_USER_UUIDS = {
"11111111-1111-1111-1111-111111111111", # Aarav (AI Coach - JEE)
"22222222-2222-2222-2222-222222222222", # Neha (AI Coach - NEET)
"33333333-3333-3333-3333-333333333333", # Rohan (AI Coach - JEE+NEET)
"44444444-4444-4444-4444-444444444444", # Amit (Free - JEE)
}
@app.get("/api/users/{user_id}/stats", tags=["Users"])
@@ -1343,6 +1342,7 @@ async def upload_admin_test(
exam_pattern: str = Form(...),
time_limit: int = Form(...),
scheduled_date: Optional[datetime] = Form(None),
end_date: Optional[datetime] = Form(None),
admin_id: Optional[UUID] = Form(None),
session: Session = Depends(get_session),
current_user: models.User = Depends(get_current_user),
@@ -1388,6 +1388,7 @@ async def upload_admin_test(
total_time=time_limit,
difficulty="Medium",
scheduled_date=scheduled_date,
end_date=end_date,
is_active=True,
created_by=effective_admin_id,
pdf_url=url
@@ -1534,6 +1535,42 @@ def toggle_test_status(test_id: UUID, session: Session = Depends(get_session), c
return {"status": "success", "is_active": test_obj.is_active}
class UpdateTestScheduleInput(BaseModel):
scheduled_date: Optional[datetime] = None
end_date: Optional[datetime] = None
title: Optional[str] = None
is_active: Optional[bool] = None
@app.put("/api/admin/tests/{test_id}/schedule", tags=["Admin"])
def update_test_schedule(
test_id: UUID,
data: UpdateTestScheduleInput,
session: Session = Depends(get_session),
current_user: models.User = Depends(get_current_user)
):
test_obj = session.get(models.Test, test_id)
if not test_obj:
raise HTTPException(status_code=404, detail="Test not found")
test_obj.scheduled_date = data.scheduled_date
test_obj.end_date = data.end_date
if data.title is not None:
test_obj.title = data.title
if data.is_active is not None:
test_obj.is_active = data.is_active
session.add(test_obj)
session.commit()
session.refresh(test_obj)
return {
"status": "success",
"test_id": test_obj.id,
"title": test_obj.title,
"scheduled_date": test_obj.scheduled_date,
"end_date": test_obj.end_date,
"is_active": test_obj.is_active
}
@app.delete("/api/admin/tests/{test_id}", tags=["Admin"])
def delete_test(test_id: UUID, session: Session = Depends(get_session), current_user: models.User = Depends(get_current_user)):
from sqlmodel import select