|
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() |
|
) |
|
|