Spaces:
Sleeping
Sleeping
| # models.py | |
| # All SQLAlchemy database models | |
| from extensions import db | |
| from datetime import datetime | |
| class User(db.Model): | |
| __tablename__ = "users" | |
| id = db.Column(db.Integer, primary_key=True) | |
| name = db.Column(db.String(100), nullable=False) | |
| email = db.Column(db.String(255), nullable=False, unique=True) | |
| password = db.Column(db.String(255), nullable=False) | |
| student_id = db.Column(db.String(50), nullable=False, unique=True) | |
| bio = db.Column(db.Text, default=None) | |
| department = db.Column(db.String(100), default=None) | |
| profile_image = db.Column(db.String(255), default=None) | |
| cover_image = db.Column(db.String(255), default=None) | |
| is_admin = db.Column(db.Boolean, default=False) | |
| location_city = db.Column(db.String(100), default=None) | |
| location_country = db.Column(db.String(100), default=None) | |
| location_lat = db.Column(db.Numeric(10,8), default=None) | |
| location_lng = db.Column(db.Numeric(11,8), default=None) | |
| feeling = db.Column(db.String(50), default=None) | |
| feeling_emoji = db.Column(db.String(10), default=None) | |
| created_at = db.Column(db.DateTime, default=datetime.utcnow) | |
| updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) | |
| def to_dict(self): | |
| return { | |
| "id": self.id, | |
| "name": self.name, | |
| "email": self.email, | |
| "student_id": self.student_id, | |
| "bio": self.bio, | |
| "department": self.department, | |
| "profile_image": self.profile_image, | |
| "cover_image": self.cover_image, | |
| "is_admin": self.is_admin, | |
| "feeling": self.feeling, | |
| "feeling_emoji": self.feeling_emoji, | |
| "location_city": self.location_city, | |
| "location_country": self.location_country, | |
| } | |
| class Post(db.Model): | |
| __tablename__ = "posts" | |
| id = db.Column(db.Integer, primary_key=True) | |
| user_id = db.Column(db.Integer, db.ForeignKey("users.id", ondelete="CASCADE"), nullable=False) | |
| content = db.Column(db.Text, nullable=False) | |
| image = db.Column(db.String(255), default=None) | |
| feeling = db.Column(db.String(50), default=None) | |
| feeling_emoji = db.Column(db.String(10), default=None) | |
| location_city = db.Column(db.String(100), default=None) | |
| location_lat = db.Column(db.Numeric(10,8), default=None) | |
| location_lng = db.Column(db.Numeric(11,8), default=None) | |
| sentiment = db.Column(db.String(20), default=None) # POSITIVE | NEGATIVE | NEUTRAL | |
| sentiment_score = db.Column(db.Float, default=None) | |
| created_at = db.Column(db.DateTime, default=datetime.utcnow) | |
| updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) | |
| def to_dict(self, like_count=0, comment_count=0, user_liked=False, author=None): | |
| return { | |
| "id": self.id, | |
| "user_id": self.user_id, | |
| "author": author, | |
| "content": self.content, | |
| "image": self.image, | |
| "feeling": self.feeling, | |
| "feeling_emoji": self.feeling_emoji, | |
| "sentiment": self.sentiment, | |
| "sentiment_score": self.sentiment_score, | |
| "likes": like_count, | |
| "comments": comment_count, | |
| "user_liked": user_liked, | |
| "created_at": self.created_at.isoformat(), | |
| } | |
| class Comment(db.Model): | |
| __tablename__ = "comments" | |
| id = db.Column(db.Integer, primary_key=True) | |
| post_id = db.Column(db.Integer, db.ForeignKey("posts.id", ondelete="CASCADE"), nullable=False) | |
| user_id = db.Column(db.Integer, db.ForeignKey("users.id", ondelete="CASCADE"), nullable=False) | |
| parent_id = db.Column(db.Integer, db.ForeignKey("comments.id", ondelete="CASCADE"), default=None) | |
| content = db.Column(db.Text, nullable=False) | |
| created_at = db.Column(db.DateTime, default=datetime.utcnow) | |
| updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) | |
| class Like(db.Model): | |
| __tablename__ = "likes" | |
| id = db.Column(db.Integer, primary_key=True) | |
| post_id = db.Column(db.Integer, db.ForeignKey("posts.id", ondelete="CASCADE"), nullable=False) | |
| user_id = db.Column(db.Integer, db.ForeignKey("users.id", ondelete="CASCADE"), nullable=False) | |
| created_at = db.Column(db.DateTime, default=datetime.utcnow) | |
| __table_args__ = (db.UniqueConstraint("post_id", "user_id"),) | |
| class FriendRequest(db.Model): | |
| __tablename__ = "friend_requests" | |
| id = db.Column(db.Integer, primary_key=True) | |
| sender_id = db.Column(db.Integer, db.ForeignKey("users.id", ondelete="CASCADE"), nullable=False) | |
| receiver_id = db.Column(db.Integer, db.ForeignKey("users.id", ondelete="CASCADE"), nullable=False) | |
| status = db.Column(db.String(20), default="pending") # pending | accepted | rejected | |
| created_at = db.Column(db.DateTime, default=datetime.utcnow) | |
| updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) | |
| __table_args__ = (db.UniqueConstraint("sender_id", "receiver_id"),) | |
| class Friend(db.Model): | |
| __tablename__ = "friends" | |
| id = db.Column(db.Integer, primary_key=True) | |
| user_id = db.Column(db.Integer, db.ForeignKey("users.id", ondelete="CASCADE"), nullable=False) | |
| friend_id = db.Column(db.Integer, db.ForeignKey("users.id", ondelete="CASCADE"), nullable=False) | |
| created_at = db.Column(db.DateTime, default=datetime.utcnow) | |
| __table_args__ = (db.UniqueConstraint("user_id", "friend_id"),) | |
| class Announcement(db.Model): | |
| __tablename__ = "announcements" | |
| id = db.Column(db.Integer, primary_key=True) | |
| admin_id = db.Column(db.Integer, db.ForeignKey("users.id", ondelete="CASCADE"), nullable=False) | |
| title = db.Column(db.String(255), nullable=False) | |
| content = db.Column(db.Text, nullable=False) | |
| priority = db.Column(db.String(20), default="normal") # low | normal | high | |
| created_at = db.Column(db.DateTime, default=datetime.utcnow) | |
| class Message(db.Model): | |
| __tablename__ = "messages" | |
| id = db.Column(db.Integer, primary_key=True) | |
| sender_id = db.Column(db.Integer, db.ForeignKey("users.id", ondelete="CASCADE"), nullable=False) | |
| receiver_id = db.Column(db.Integer, db.ForeignKey("users.id", ondelete="CASCADE"), nullable=False) | |
| message = db.Column(db.Text, nullable=False) | |
| is_read = db.Column(db.Boolean, default=False) | |
| created_at = db.Column(db.DateTime, default=datetime.utcnow) |