feat: add per-user trial control in admin panel (backend + UI)
This commit is contained in:
@@ -1470,6 +1470,7 @@ class AdminUserPatch(BaseModel):
|
||||
school: Optional[str] = None
|
||||
city: Optional[str] = None
|
||||
state: Optional[str] = None
|
||||
trial_days: Optional[int] = None # number of trial days to grant from now (0 = remove trial)
|
||||
|
||||
@app.get("/api/admin/students", tags=["Admin"])
|
||||
def list_all_students(session: Session = Depends(get_session), current_user: models.User = Depends(get_current_user)):
|
||||
@@ -1608,7 +1609,7 @@ def get_student_detail(user_id: UUID, session: Session = Depends(get_session), c
|
||||
|
||||
@app.patch("/api/admin/students/{user_id}", tags=["Admin"])
|
||||
def patch_student(user_id: UUID, payload: AdminUserPatch, session: Session = Depends(get_session), current_user: models.User = Depends(get_current_user)):
|
||||
"""Admin update: tier, name, streak, exam, location."""
|
||||
"""Admin update: tier, name, streak, exam, location, trial."""
|
||||
user = session.get(models.User, user_id)
|
||||
if not user:
|
||||
raise HTTPException(status_code=404, detail="Student not found")
|
||||
@@ -1619,10 +1620,15 @@ def patch_student(user_id: UUID, payload: AdminUserPatch, session: Session = Dep
|
||||
if payload.school is not None: user.school = payload.school
|
||||
if payload.city is not None: user.city = payload.city
|
||||
if payload.state is not None: user.state = payload.state
|
||||
if payload.trial_days is not None:
|
||||
if payload.trial_days <= 0:
|
||||
user.trial_end = None # remove trial
|
||||
else:
|
||||
user.trial_end = datetime.utcnow() + timedelta(days=payload.trial_days)
|
||||
session.add(user)
|
||||
session.commit()
|
||||
session.refresh(user)
|
||||
return {"status": "ok", "user_id": str(user.id), "tier": user.tier.value}
|
||||
return {"status": "ok", "user_id": str(user.id), "tier": user.tier.value, "trial_end": user.trial_end.isoformat() if user.trial_end else None}
|
||||
|
||||
# --- BILLING & PAYMENTS ---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user