Implement active user tiers, class-based Tailwind theme switcher, 3-tiled static dashboard layout, Minio object storage integration, school & state settings database sync, and streak wishes onboarding modal
This commit is contained in:
@@ -456,6 +456,8 @@ class UserUpdate(BaseModel):
|
||||
name: Optional[str] = None
|
||||
target_exam: Optional[models.ExamEnum] = None
|
||||
student_class: Optional[models.ClassEnum] = None
|
||||
school: Optional[str] = None
|
||||
state: Optional[str] = None
|
||||
|
||||
@app.put("/api/users/{user_id}", response_model=models.User, tags=["Users"])
|
||||
def update_user_profile(user_id: UUID, payload: UserUpdate, session: Session = Depends(get_session)):
|
||||
@@ -468,14 +470,36 @@ def update_user_profile(user_id: UUID, payload: UserUpdate, session: Session = D
|
||||
if payload.target_exam is not None:
|
||||
user.target_exam = payload.target_exam
|
||||
if payload.student_class is not None:
|
||||
# Note: mapping alias 'class' in User class to 'student_class'
|
||||
user.student_class = payload.student_class
|
||||
if payload.school is not None:
|
||||
user.school = payload.school
|
||||
if payload.state is not None:
|
||||
user.state = payload.state
|
||||
|
||||
session.add(user)
|
||||
session.commit()
|
||||
session.refresh(user)
|
||||
return user
|
||||
|
||||
from fastapi import UploadFile, File
|
||||
from storage import upload_file
|
||||
|
||||
@app.post("/api/users/{user_id}/upload-avatar", tags=["Users"])
|
||||
async def upload_user_avatar(user_id: UUID, file: UploadFile = File(...), session: Session = Depends(get_session)):
|
||||
user = session.get(models.User, user_id)
|
||||
if not user:
|
||||
raise HTTPException(status_code=404, detail="User not found")
|
||||
|
||||
contents = await file.read()
|
||||
file_extension = file.filename.split(".")[-1] if "." in file.filename else "jpg"
|
||||
object_name = f"avatar_{user_id}.{file_extension}"
|
||||
public_url = upload_file(contents, object_name, content_type=file.content_type)
|
||||
|
||||
if not public_url:
|
||||
raise HTTPException(status_code=500, detail="Failed to upload image to Minio.")
|
||||
|
||||
return {"url": public_url}
|
||||
|
||||
@app.get("/api/tests", response_model=List[models.Test], tags=["CBT Engine"])
|
||||
def list_tests(exam_pattern: Optional[models.ExamEnum] = None, session: Session = Depends(get_session)):
|
||||
query = select(models.Test)
|
||||
|
||||
Reference in New Issue
Block a user