diff --git a/backend/main.py b/backend/main.py index 327b54f..4446d69 100644 --- a/backend/main.py +++ b/backend/main.py @@ -307,6 +307,16 @@ def bulk_delete_students(payload: DeleteUsersRequest, session: Session = Depends session.commit() return {"success": True} +@app.put("/api/admin/students/{user_id}/toggle", tags=["Admin"]) +def toggle_student_active(user_id: UUID, session: Session = Depends(get_session)): + user = session.get(models.User, user_id) + if not user: + raise HTTPException(status_code=404, detail="User not found") + user.is_active = not getattr(user, 'is_active', True) + session.add(user) + session.commit() + return {"success": True, "is_active": user.is_active} + @app.post("/api/auth/register", tags=["Authentication"]) def register(payload: RegisterPayload, session: Session = Depends(get_session)): import bcrypt diff --git a/backend/models.py b/backend/models.py index c5b5c41..e13e550 100644 --- a/backend/models.py +++ b/backend/models.py @@ -65,6 +65,7 @@ class User(SQLModel, table=True): created_at: datetime = Field(default_factory=datetime.utcnow) last_active: datetime = Field(default_factory=datetime.utcnow) active_session_token: Optional[str] = None + is_active: bool = Field(default=True) class Parent(SQLModel, table=True): id: UUID = Field(default_factory=uuid4, primary_key=True) diff --git a/src/app/admin/layout.tsx b/src/app/admin/layout.tsx index 1a6fdc1..7aec9b1 100644 --- a/src/app/admin/layout.tsx +++ b/src/app/admin/layout.tsx @@ -28,8 +28,6 @@ export default function AdminLayout({ children }: { children: ReactNode }) { diff --git a/src/app/admin/settings/page.tsx b/src/app/admin/settings/page.tsx index 6124f2c..15e5924 100644 --- a/src/app/admin/settings/page.tsx +++ b/src/app/admin/settings/page.tsx @@ -1,4 +1,4 @@ -"use client"; +"use client"; import { fetchWithAuth } from "@/lib/apiClient"; import { useState, useEffect } from "react"; @@ -65,24 +65,6 @@ export default function SettingsPage() {
- {testType === 'CBT' - ? '✅ This will appear under Dashboard → Mock Tests (CBT) for students to attempt.' - : '✅ This will appear under AI Coach → PrepPilot AI as a DPP with full CBT interface.'} + {testType === 'CBT' && '✅ Purely for CBT. Appears under Dashboard → Mock Tests.'} + {testType === 'PREP_PILOT' && '✅ Purely for CBT. Appears under AI Coach → PrepPilot AI.'} + {testType === 'DPP_PDF' && '✅ Uploads a PDF to Minio storage for Class/Plan aligned DPP.'}