Spaces:
Runtime error
Runtime error
Download models.py from noor122/smartparking: direct link, hf CLI and curl.
- Browser
- Download file 5.29 kB
-
https://huggingface.co/spaces/noor122/smartparking/resolve/main/models.py
- Command line
-
hf download hf://spaces/noor122/smartparking/models.py
-
curl -L -o models.py https://huggingface.co/spaces/noor122/smartparking/resolve/main/models.py
5.29 kB
| from flask_sqlalchemy import SQLAlchemy | |
| from flask_login import UserMixin | |
| from datetime import datetime, timedelta | |
| # هنحتاج نستورد JSONB عشان نوع الداتا الجديد اللي هاجر ضافته | |
| from sqlalchemy.dialects.postgresql import JSONB | |
| db = SQLAlchemy() | |
| # الدالة دي بتجيب توقيت مصر وتجهزه عشان يتحفظ في الداتابيز صح | |
| def get_cairo_time(): | |
| return datetime.utcnow() + timedelta(hours=3) | |
| class User(db.Model, UserMixin): | |
| __tablename__ = 'users' | |
| user_id = db.Column(db.Integer, primary_key=True) | |
| name = db.Column(db.String(100), nullable=False) | |
| email = db.Column(db.String(150), unique=True, nullable=False) | |
| phone = db.Column(db.String(20), unique=True, nullable=True) | |
| password = db.Column(db.String(255), nullable=False) | |
| balance = db.Column(db.Numeric(10, 2), default=50.00) | |
| # Relationships | |
| cars = db.relationship('Car', backref='owner', lazy=True) | |
| notifications = db.relationship('Notification', backref='user', lazy=True) | |
| transactions = db.relationship('Transaction', backref='user_owner', lazy=True) | |
| def get_id(self): | |
| return str(self.user_id) | |
| class Notification(db.Model): | |
| __tablename__ = 'notifications' | |
| id = db.Column(db.BigInteger, primary_key=True) # int8 | |
| user_id = db.Column(db.Integer, db.ForeignKey('users.user_id', ondelete='CASCADE')) | |
| title = db.Column(db.Text) | |
| message = db.Column(db.Text) | |
| is_read = db.Column(db.Boolean, default=False) | |
| created_at = db.Column(db.DateTime(timezone=True), default=get_cairo_time) | |
| class Car(db.Model): | |
| __tablename__ = 'cars' | |
| car_id = db.Column(db.Integer, primary_key=True) | |
| user_id = db.Column(db.Integer, db.ForeignKey('users.user_id', ondelete='CASCADE')) | |
| plate_no = db.Column(db.String(20), unique=True, nullable=False) | |
| tire_condition = db.Column(JSONB) # تعديل النوع | |
| # Relationships | |
| reservations = db.relationship('Reservation', backref='car', lazy=True) | |
| class Garage(db.Model): | |
| __tablename__ = 'garages' | |
| garage_id = db.Column(db.Integer, primary_key=True) | |
| name = db.Column(db.String(100), nullable=False) | |
| fixed_price = db.Column(db.Numeric(10, 2), nullable=False) # تعديل الاسم | |
| latitude = db.Column(db.Numeric(10, 8), nullable=False) | |
| longitude = db.Column(db.Numeric(11, 8), nullable=False) | |
| address = db.Column(db.Text) | |
| slots = db.relationship('Slot', backref='garage', lazy=True) | |
| sensors = db.relationship('Sensor', backref='garage', lazy=True) # علاقة جديدة | |
| class Slot(db.Model): | |
| __tablename__ = 'slots' | |
| slot_id = db.Column(db.Integer, primary_key=True) | |
| garage_id = db.Column(db.Integer, db.ForeignKey('garages.garage_id', ondelete='CASCADE')) | |
| slot_name = db.Column(db.String(20), nullable=False) | |
| status = db.Column(db.String(50), default='empty') | |
| coordinates = db.Column(JSONB) # عمود جديد | |
| # تم إزالة علاقة السينسور من هنا ونقلها للجراج | |
| class Sensor(db.Model): | |
| __tablename__ = 'sensors' | |
| sensor_id = db.Column(db.Integer, primary_key=True) | |
| garage_id = db.Column(db.Integer, db.ForeignKey('garages.garage_id', ondelete='CASCADE')) # تعديل الربط | |
| status = db.Column(db.Text) # تعديل النوع | |
| sensor_type = db.Column(db.Text) # عمود جديد | |
| class Reservation(db.Model): | |
| __tablename__ = 'reservations' | |
| reserv_id = db.Column(db.Integer, primary_key=True) | |
| car_id = db.Column(db.Integer, db.ForeignKey('cars.car_id', ondelete='CASCADE')) | |
| slot_id = db.Column(db.Integer, db.ForeignKey('slots.slot_id')) | |
| reserv_status = db.Column(db.Text, default='active') | |
| created_at = db.Column(db.DateTime(timezone=True), default=get_cairo_time) | |
| # الأعمدة الجديدة بدل start_t و end_t | |
| Duration_T = db.Column(db.Integer) | |
| Spot_Type = db.Column(db.Text) | |
| Reserved_hour_price = db.Column(db.Float) | |
| # Relationships | |
| logs = db.relationship('ParkingLog', backref='reservation', lazy=True) | |
| transactions = db.relationship('Transaction', backref='reservation', lazy=True) | |
| slot = db.relationship('Slot', backref='reservations', lazy=True) | |
| class ParkingLog(db.Model): | |
| __tablename__ = 'logs' | |
| log_id = db.Column(db.Integer, primary_key=True) | |
| reserv_id = db.Column(db.Integer, db.ForeignKey('reservations.reserv_id', ondelete='CASCADE')) | |
| log_in_t = db.Column(db.DateTime(timezone=True), default=get_cairo_time) | |
| log_out_t = db.Column(db.DateTime(timezone=True)) | |
| tire_condition = db.Column(db.JSON) | |
| class Transaction(db.Model): | |
| __tablename__ = 'transactions' | |
| trans_id = db.Column(db.Integer, primary_key=True) | |
| reserv_id = db.Column(db.Integer, db.ForeignKey('reservations.reserv_id')) | |
| fees = db.Column(db.Numeric(10, 2)) | |
| status = db.Column(db.String(50), default='deducted') | |
| created_at = db.Column(db.DateTime(timezone=True), default=get_cairo_time) | |
| # أعمدة جديدة | |
| user_id = db.Column(db.Integer, db.ForeignKey('users.user_id')) | |
| amount = db.Column(db.Float) | |
| trans_type = db.Column(db.Text) |