| from app.auth.schema import TokenData | |
| from app.user.models import User | |
| from sqlalchemy.orm import Session | |
| from . import models, schema | |
| async def new_feedback( | |
| request: schema.Feedback, current_user: TokenData, database: Session | |
| ) -> models.Feedback: | |
| """ | |
| Adds new feedback to the database associated with the current user. | |
| This asynchronous function creates a new feedback entry in the database using | |
| the provided feedback data and associates it with the current user. It first | |
| retrieves the user from the database based on the email in the `current_user` object, | |
| then creates and stores the new feedback entry. | |
| Args: | |
| request (schema.Feedback): An object containing the feedback details such as score, | |
| image file name, predicted class, and feedback text. | |
| current_user (TokenData): An object containing the email of the currently authenticated user. | |
| database (Session): The database session used for querying and committing changes to the database. | |
| Returns: | |
| models.Feedback: The newly created feedback entry stored in the database. | |
| Raises: | |
| Exception: If there is an issue with adding or committing the feedback to the database. | |
| """ | |
| user = database.query(User).filter(User.email == current_user.email).first() | |
| new_feedback = models.Feedback( | |
| score=request.score, | |
| image_file_name=request.image_file_name, | |
| predicted_class=request.predicted_class, | |
| user=user, | |
| feedback=request.feedback, | |
| ) | |
| database.add(new_feedback) | |
| database.commit() | |
| database.refresh(new_feedback) | |
| return new_feedback | |
| async def all_feedback(database: Session, current_user: TokenData) -> models.Feedback: | |
| """ | |
| Retrieves all feedback entries associated with the current user from the database. | |
| This asynchronous function queries the database for all feedback entries linked to | |
| the user identified by the `current_user` object. It returns a list of feedback entries | |
| associated with the user's ID. | |
| Args: | |
| database (Session): The database session used for querying the database. | |
| current_user (TokenData): An object containing the email of the currently authenticated user. | |
| Returns: | |
| list[models.Feedback]: A list of feedback entries associated with the current user. | |
| Raises: | |
| Exception: If there is an issue with querying the feedback entries from the database. | |
| """ | |
| user = database.query(User).filter(User.email == current_user.email).first() | |
| return ( | |
| database.query(models.Feedback).filter(models.Feedback.user_id == user.id).all() | |
| ) | |