
- User authentication with JWT tokens (register/login) - Tutor session management with CRUD operations - Message tracking for tutor conversations - SQLite database with Alembic migrations - CORS configuration for frontend integration - Health check and service info endpoints - Proper project structure with models, schemas, and API routes
128 lines
3.7 KiB
Python
128 lines
3.7 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.orm import Session
|
|
from typing import List
|
|
from app.db.session import get_db
|
|
from app.models.user import User
|
|
from app.models.tutor_session import TutorSession
|
|
from app.models.tutor_message import TutorMessage
|
|
from app.schemas.tutor_session import (
|
|
TutorSessionCreate,
|
|
TutorSessionUpdate,
|
|
TutorSession as TutorSessionSchema
|
|
)
|
|
from app.schemas.tutor_message import (
|
|
TutorMessageCreate,
|
|
TutorMessage as TutorMessageSchema
|
|
)
|
|
from app.api.auth import get_current_user
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.post("/sessions", response_model=TutorSessionSchema)
|
|
def create_tutor_session(
|
|
session: TutorSessionCreate,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user)
|
|
):
|
|
db_session = TutorSession(
|
|
user_id=current_user.id,
|
|
subject=session.subject,
|
|
topic=session.topic,
|
|
difficulty_level=session.difficulty_level
|
|
)
|
|
db.add(db_session)
|
|
db.commit()
|
|
db.refresh(db_session)
|
|
return db_session
|
|
|
|
|
|
@router.get("/sessions", response_model=List[TutorSessionSchema])
|
|
def get_user_sessions(
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user)
|
|
):
|
|
return db.query(TutorSession).filter(
|
|
TutorSession.user_id == current_user.id
|
|
).all()
|
|
|
|
|
|
@router.get("/sessions/{session_id}", response_model=TutorSessionSchema)
|
|
def get_session(
|
|
session_id: int,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user)
|
|
):
|
|
session = db.query(TutorSession).filter(
|
|
TutorSession.id == session_id,
|
|
TutorSession.user_id == current_user.id
|
|
).first()
|
|
if not session:
|
|
raise HTTPException(status_code=404, detail="Session not found")
|
|
return session
|
|
|
|
|
|
@router.put("/sessions/{session_id}", response_model=TutorSessionSchema)
|
|
def update_session(
|
|
session_id: int,
|
|
session_update: TutorSessionUpdate,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user)
|
|
):
|
|
session = db.query(TutorSession).filter(
|
|
TutorSession.id == session_id,
|
|
TutorSession.user_id == current_user.id
|
|
).first()
|
|
if not session:
|
|
raise HTTPException(status_code=404, detail="Session not found")
|
|
|
|
update_data = session_update.dict(exclude_unset=True)
|
|
for field, value in update_data.items():
|
|
setattr(session, field, value)
|
|
|
|
db.commit()
|
|
db.refresh(session)
|
|
return session
|
|
|
|
|
|
@router.post("/sessions/{session_id}/messages", response_model=TutorMessageSchema)
|
|
def add_message_to_session(
|
|
session_id: int,
|
|
message: TutorMessageCreate,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user)
|
|
):
|
|
session = db.query(TutorSession).filter(
|
|
TutorSession.id == session_id,
|
|
TutorSession.user_id == current_user.id
|
|
).first()
|
|
if not session:
|
|
raise HTTPException(status_code=404, detail="Session not found")
|
|
|
|
db_message = TutorMessage(
|
|
session_id=session_id,
|
|
message_type=message.message_type,
|
|
content=message.content
|
|
)
|
|
db.add(db_message)
|
|
db.commit()
|
|
db.refresh(db_message)
|
|
return db_message
|
|
|
|
|
|
@router.get("/sessions/{session_id}/messages", response_model=List[TutorMessageSchema])
|
|
def get_session_messages(
|
|
session_id: int,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user)
|
|
):
|
|
session = db.query(TutorSession).filter(
|
|
TutorSession.id == session_id,
|
|
TutorSession.user_id == current_user.id
|
|
).first()
|
|
if not session:
|
|
raise HTTPException(status_code=404, detail="Session not found")
|
|
|
|
return db.query(TutorMessage).filter(
|
|
TutorMessage.session_id == session_id
|
|
).order_by(TutorMessage.created_at).all() |