After_Chido_Api/models/db.py

103 lines
3.6 KiB
Python

from sqlalchemy import Table, Column, Integer, String, DateTime, Boolean, MetaData, ForeignKey, Text
from datetime import datetime
metadata = MetaData()
# Table definitions
users_table = Table(
"users",
metadata,
Column("id", Integer, primary_key=True),
Column("email", String(255), unique=True, nullable=False),
Column("full_name", String(255), nullable=False),
Column("phone", String(20), nullable=False),
Column("date_of_birth", DateTime, nullable=False),
Column("organization", String(255)),
Column("hashed_password", String(255), nullable=False),
Column("role", String(50), default="user"),
Column("is_blocked", Boolean, default=False),
Column("is_deleted", Boolean, default=False)
)
roles_table = Table(
"roles",
metadata,
Column("id", Integer, primary_key=True),
Column("name", String(50), unique=True, nullable=False),
Column("permissions", Text)
)
need_requests_table = Table(
"need_requests",
metadata,
Column("id", Integer, primary_key=True),
Column("category", String(50), nullable=False),
Column("description", Text, nullable=False),
Column("adults", Integer, nullable=False),
Column("children", Integer, nullable=False),
Column("vulnerable", Integer, nullable=False),
Column("location", String(255), nullable=False),
Column("gps_coordinates", String(100)),
Column("requester_email", String(255), ForeignKey("users.email"), nullable=False),
Column("assigned_to", Integer, ForeignKey("users.id")),
Column("status", String(50), default="pending"),
Column("deleted", DateTime, default=None)
)
user_reports_table = Table(
"user_reports",
metadata,
Column("id", Integer, primary_key=True),
Column("reporter_id", Integer, ForeignKey("users.id"), nullable=False),
Column("reported_user_id", Integer, ForeignKey("users.id"), nullable=False),
Column("reason", Text, nullable=False),
Column("status", String(50), default="pending")
)
technical_issues_table = Table(
"technical_issues",
metadata,
Column("id", Integer, primary_key=True),
Column("user_id", Integer, ForeignKey("users.id"), nullable=False),
Column("description", Text, nullable=False),
Column("status", String(50), default="open")
)
points_of_interest_table = Table(
"points_of_interest",
metadata,
Column("id", Integer, primary_key=True),
Column("label", String(255), nullable=False),
Column("description", Text),
Column("icon", String(255)),
Column("organization", String(255)),
Column("gps_coordinates", String(100), nullable=False),
Column("added_by", Integer, ForeignKey("users.id"), nullable=False)
)
shelters_table = Table(
"shelters",
metadata,
Column("id", Integer, primary_key=True),
Column("label", String(255), nullable=False),
Column("description", Text),
Column("status", String(50), default="available"),
Column("contact_person", String(255)),
Column("gps_coordinates", String(100), nullable=False),
Column("added_by", Integer, ForeignKey("users.id"), nullable=False)
)
person_reports_table = Table(
"person_reports",
metadata,
Column("id", Integer, primary_key=True),
Column("full_name", String(255), nullable=False),
Column("date_of_birth", DateTime, nullable=False),
Column("status", String(50), nullable=False),
Column("location", String(255)),
Column("gps_coordinates", String(100)),
Column("photo_url", String(255)),
Column("reporter_email", String(255), ForeignKey("users.email"), nullable=False),
Column("created_at", DateTime, default=datetime.utcnow),
Column("updated_at", DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
)