123 lines
4.3 KiB
Python
123 lines
4.3 KiB
Python
from sqlalchemy import Table, Column, Integer, String, DateTime, Boolean, MetaData, ForeignKey, Text
|
|
from datetime import datetime, timezone
|
|
|
|
metadata = MetaData()
|
|
|
|
# Table definitions
|
|
# Table des utilisateurs
|
|
users_table = Table(
|
|
'users',
|
|
metadata,
|
|
Column('id', Integer, primary_key=True, autoincrement=True),
|
|
Column('email', String(255), unique=True, nullable=False),
|
|
Column('full_name', String(255), nullable=False),
|
|
Column('phone', String(20)),
|
|
Column('date_of_birth', String(20)),
|
|
Column('organization', String(255)),
|
|
Column('hashed_password', String(255), nullable=False),
|
|
Column('role', String(50), nullable=False),
|
|
Column('is_banned', Boolean, default=False),
|
|
Column('is_blocked', Boolean, default=False),
|
|
Column('is_deleted', Boolean, default=False)
|
|
)
|
|
|
|
# Table des rôles
|
|
roles_table = Table(
|
|
'roles',
|
|
metadata,
|
|
Column('id', Integer, primary_key=True, autoincrement=True),
|
|
Column('name', String(50), unique=True, nullable=False)
|
|
)
|
|
|
|
# Table des permissions
|
|
permissions_table = Table(
|
|
'permissions',
|
|
metadata,
|
|
Column('id', Integer, primary_key=True, autoincrement=True),
|
|
Column('name', String(100), unique=True, nullable=False)
|
|
)
|
|
|
|
# Table d'association entre rôles et permissions
|
|
role_permissions_table = Table(
|
|
'role_permissions',
|
|
metadata,
|
|
Column('role_id', Integer, ForeignKey('roles.id'), primary_key=True),
|
|
Column('permission_id', Integer, ForeignKey('permissions.id'), primary_key=True)
|
|
)
|
|
|
|
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('contact_email', String(255)),
|
|
Column('contact_phone', String(20)),
|
|
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.now(timezone.utc)),
|
|
Column("updated_at", DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc))
|
|
) |