from fastapi import APIRouter, Depends, HTTPException from motor.motor_asyncio import AsyncIOMotorDatabase from src.core.database import mongo_db from src.models.mongo.feedback_model import FeedbackModel from pydantic import BaseModel, Field from typing import Optional, Dict, Any from bson import ObjectId router = APIRouter() class FeedbackCreate(BaseModel): user_id: str interview_id: str feedback_content: Dict[str, Any] feedback_date: str class FeedbackResponse(BaseModel): id: str = Field(alias="_id") user_id: str interview_id: str feedback_content: Dict[str, Any] feedback_date: str class Config: populate_by_name = True json_encoders = {ObjectId: str} @router.post("/feedbacks", response_model=FeedbackResponse) async def create_feedback(feedback: FeedbackCreate, db: AsyncIOMotorDatabase = Depends(lambda: mongo_db)): feedback_entry = FeedbackModel(**feedback.model_dump(by_alias=True)) feedback_id = await FeedbackModel.create(db, FeedbackModel.collection_name, feedback_entry.model_dump(exclude_unset=True)) feedback_entry.id = feedback_id return feedback_entry @router.get("/feedbacks/{feedback_id}", response_model=FeedbackResponse) async def get_feedback_by_id(feedback_id: str, db: AsyncIOMotorDatabase = Depends(lambda: mongo_db)): feedback = await FeedbackModel.get(db, FeedbackModel.collection_name, {"_id": feedback_id}) if feedback is None: raise HTTPException(status_code=404, detail="Feedback not found") return feedback