Spaces:
Running
Running
| from flask_sqlalchemy import SQLAlchemy | |
| from datetime import datetime | |
| # initializes the SQLAlchemy object for the application | |
| db = SQLAlchemy() | |
| # defines the main data model for a scraped disaster post | |
| class DisasterPost(db.Model): | |
| # sets the name of the database table | |
| __tablename__ = 'posts' | |
| # primary key for the table | |
| id = db.Column(db.Integer, primary_key=True) | |
| # unique ID from Reddit to prevent duplicates | |
| reddit_id = db.Column(db.String(50), unique=True, nullable=False) | |
| # title of the Reddit post | |
| title = db.Column(db.String(300), nullable=False) | |
| # full body content of the post | |
| content = db.Column(db.Text, nullable=True) | |
| # stores the contact person's name or Reddit username | |
| author = db.Column(db.String(50), nullable=True) | |
| # timestamp when the post was created (UTC) | |
| timestamp = db.Column(db.DateTime, default=datetime.utcnow) | |
| # Intelligence Fields | |
| # extracted location or address of the incident | |
| location = db.Column(db.String(100), nullable=True) | |
| # extracted mobile or contact number | |
| contact_number = db.Column(db.String(50), nullable=True) | |
| # AI-classified type of disaster (e.g., Flood, Fire) | |
| disaster_type = db.Column(db.String(50), nullable=True) | |
| # AI-classified specific assistance needed (e.g., Medical, Rescue) | |
| assistance_type = db.Column(db.String(50), nullable=True) | |
| # dynamically assigned severity level (High, Medium, Low) | |
| urgency_level = db.Column(db.String(20), nullable=True) | |
| # boolean flag indicating if the post is a help request | |
| is_help_request = db.Column(db.Boolean, default=False) | |
| # Metadata | |
| # operational status of the post (New, Verified, Resolved) | |
| status = db.Column(db.String(20), default="New") | |
| # converts the model object into a dictionary format for API responses | |
| def to_dict(self): | |
| # converts the timestamp to ISO 8601 format | |
| iso_time = self.timestamp.isoformat() | |
| # ensures the time string ends with 'Z' for standardized UTC representation | |
| if not iso_time.endswith("Z"): | |
| iso_time += "Z" | |
| return { | |
| "id": self.id, | |
| "reddit_id": self.reddit_id, | |
| "title": self.title, | |
| "content": self.content, | |
| "author": self.author, | |
| "timestamp": iso_time, | |
| "location": self.location, | |
| "contact_number": self.contact_number or "Check Post", | |
| "disaster_type": self.disaster_type, | |
| "assistance_type": self.assistance_type, | |
| "urgency_level": self.urgency_level, | |
| "status": self.status | |
| } |