from uuid import UUID from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.models.feedback import Feedback from app.schemas.feedback import FeedbackCreate class FeedbackService: """Service for feedback CRUD operations.""" async def create_feedback( self, db: AsyncSession, data: FeedbackCreate, user_id: UUID, ) -> Feedback: """Create a new feedback entry.""" feedback = Feedback( output_id=data.output_id, user_id=user_id, option_column=data.option_column, flag_type=data.flag_type, comment=data.comment, ) db.add(feedback) await db.flush() return feedback async def list_feedback( self, db: AsyncSession, output_id: UUID | None = None, user_id: UUID | None = None, ) -> list[Feedback]: """List feedback entries with optional filters.""" query = select(Feedback) if output_id: query = query.where(Feedback.output_id == output_id) if user_id: query = query.where(Feedback.user_id == user_id) query = query.order_by(Feedback.created_at.desc()) result = await db.execute(query) return list(result.scalars().all()) async def get_feedback( self, db: AsyncSession, feedback_id: UUID ) -> Feedback | None: """Get a single feedback entry by ID.""" result = await db.execute( select(Feedback).where(Feedback.id == feedback_id) ) return result.scalar_one_or_none() async def delete_feedback( self, db: AsyncSession, feedback_id: UUID ) -> bool: """Delete a feedback entry.""" feedback = await self.get_feedback(db, feedback_id) if feedback is None: return False await db.delete(feedback) await db.flush() return True