Spaces:
Runtime error
Runtime error
| """ | |
| App Feedback model for storing user feedback about the platform | |
| """ | |
| from sqlalchemy import Column, Integer, String, Text, DateTime, Float, ForeignKey | |
| from sqlalchemy.orm import relationship | |
| from datetime import datetime | |
| from config.database import Base | |
| class AppFeedback(Base): | |
| """Store feedback submitted by users about the platform""" | |
| __tablename__ = 'app_feedback' | |
| id = Column(Integer, primary_key=True) | |
| user_id = Column(Integer, ForeignKey('users.id'), nullable=True) | |
| # Feedback details | |
| feedback_type = Column(String(50), nullable=False, default='general') # general, bug, feature, improvement | |
| rating = Column(Float, nullable=True) # 1-5 stars | |
| message = Column(Text, nullable=False) | |
| # Contact info (may differ from user's email) | |
| contact_email = Column(String(255), nullable=True) | |
| submitter_name = Column(String(255), nullable=True) | |
| user_role = Column(String(50), nullable=True) # therapist, patient | |
| # Status tracking | |
| status = Column(String(50), default='new') # new, reviewed, resolved, archived | |
| reviewed_at = Column(DateTime, nullable=True) | |
| reviewed_by = Column(Integer, ForeignKey('users.id'), nullable=True) | |
| admin_notes = Column(Text, nullable=True) | |
| # Timestamps | |
| created_at = Column(DateTime, default=datetime.utcnow) | |
| # Relationships | |
| user = relationship('User', foreign_keys=[user_id], backref='feedback_submitted') | |
| def to_dict(self): | |
| return { | |
| 'id': self.id, | |
| 'user_id': self.user_id, | |
| 'feedback_type': self.feedback_type, | |
| 'rating': self.rating, | |
| 'message': self.message, | |
| 'contact_email': self.contact_email, | |
| 'submitter_name': self.submitter_name, | |
| 'user_role': self.user_role, | |
| 'status': self.status, | |
| 'reviewed_at': self.reviewed_at.isoformat() if self.reviewed_at else None, | |
| 'reviewed_by': self.reviewed_by, | |
| 'admin_notes': self.admin_notes, | |
| 'created_at': self.created_at.isoformat() if self.created_at else None | |
| } | |