diff --git a/api2/api/crud.py b/api2/api/crud.py index fd582407..ab23c702 100644 --- a/api2/api/crud.py +++ b/api2/api/crud.py @@ -40,10 +40,32 @@ def create_session(db: Session, user_id: str, session: schemas.SessionCreate): def create_message(db: Session, message: schemas.MessageCreate, session_id: int): db_message = models.Message( session_id=session_id, - message_type=message.message_type, + is_user=message.is_user, content=message.content, ) db.add(db_message) db.commit() db.refresh(db_message) return db_message + + +def get_metacognitions(db: Session, message_id: int): + return ( + db.query(models.Metacognitions) + .filter(models.Metacognitions.message_id == message_id) + .all() + ) + + +def create_metacognition( + db: Session, metacognition: schemas.MetacognitionsCreate, message_id: int +): + db_metacognition = models.Metacognitions( + message_id=message_id, + metacognition_type=metacognition.metacognition_type, + content=metacognition.content, + ) + db.add(db_metacognition) + db.commit() + db.refresh(db_metacognition) + return db_metacognition diff --git a/api2/api/main.py b/api2/api/main.py index 3f080de4..67f78a1f 100644 --- a/api2/api/main.py +++ b/api2/api/main.py @@ -47,3 +47,30 @@ def create_message_for_session( db: Session = Depends(get_db), ): return crud.create_message(db, message, session_id) + + +@app.get( + "/users/{user_id}/sessions/{session_id}/messages/{message_id}/metacognitions/", + response_model=list[schemas.Metacognitions], +) +def get_metacognitions_for_message( + user_id: str, + session_id: int, + message_id: int, + db: Session = Depends(get_db), +): + return crud.get_metacognitions(db, message_id) + + +@app.post( + "/users/{user_id}/sessions/{session_id}/messages/{message_id}/metacognitions/", + response_model=schemas.Metacognitions, +) +def create_metacognition_for_message( + user_id: str, + session_id: int, + message_id: int, + metacognition: schemas.MetacognitionsCreate, + db: Session = Depends(get_db), +): + return crud.create_metacognition(db, metacognition, message_id) diff --git a/api2/api/models.py b/api2/api/models.py index 7f8ce611..50bd5b9f 100644 --- a/api2/api/models.py +++ b/api2/api/models.py @@ -21,10 +21,19 @@ class Message(Base): __tablename__ = "messages" id = Column(Integer, primary_key=True, index=True, autoincrement=True) session_id = Column(Integer, ForeignKey("sessions.id")) - message_type = Column(String, index=True) + is_user = Column(Boolean) content = Column(String) session = relationship("Session", back_populates="messages") + metacognitions = relationship("Metacognitions", back_populates="message") # TODO: add metacognitive data to messages +class Metacognitions(Base): + __tablename__ = "metacognitions" + id = Column(Integer, primary_key=True, index=True, autoincrement=True) + message_id = Column(Integer, ForeignKey("messages.id")) + metacognition_type = Column(String, index=True) + content = Column(String) + + message = relationship("Message", back_populates="metacognitions") diff --git a/api2/api/schemas.py b/api2/api/schemas.py index 5993cb81..4926a12b 100644 --- a/api2/api/schemas.py +++ b/api2/api/schemas.py @@ -3,7 +3,7 @@ from pydantic import BaseModel class MessageBase(BaseModel): content: str - message_type: str + is_user: bool class MessageCreate(MessageBase): @@ -34,3 +34,19 @@ class Session(SessionBase): class Config: orm_mode = True + + +class MetacognitionsBase(BaseModel): + metacognition_type: str + content: str + + +class MetacognitionsCreate(MetacognitionsBase): + pass + + +class Metacognitions(MetacognitionsBase): + id: int + + class Config: + orm_mode = True