| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- from datetime import datetime
- from flask_login import UserMixin
- from werkzeug.security import generate_password_hash, check_password_hash
- from app import db, login_manager
- class User(UserMixin, db.Model):
- __tablename__ = 'users'
- id = db.Column(db.Integer, primary_key=True)
- username = db.Column(db.String(64), unique=True, index=True)
- email = db.Column(db.String(120), unique=True, index=True)
- password_hash = db.Column(db.String(256))
- google_id = db.Column(db.String(128), unique=True, nullable=True)
- is_admin = db.Column(db.Boolean, default=False)
- is_probation = db.Column(db.Boolean, default=True)
- profile_pic_url = db.Column(db.String(256))
-
- restaurants = db.relationship('Restaurant', backref='author', lazy='dynamic')
- def set_password(self, password):
- self.password_hash = generate_password_hash(password)
- def check_password(self, password):
- return check_password_hash(self.password_hash, password)
- def __repr__(self):
- return f'<User {self.username}>'
- @login_manager.user_loader
- def load_user(id):
- return User.query.get(int(id))
- class Restaurant(db.Model):
- __tablename__ = 'restaurants'
- id = db.Column(db.Integer, primary_key=True)
- name = db.Column(db.String(128), index=True)
- address = db.Column(db.String(256))
- latitude = db.Column(db.Float)
- longitude = db.Column(db.Float)
- google_place_id = db.Column(db.String(128)) # To link with Google Maps
-
- # Lunch Special Info
- min_price = db.Column(db.Float)
- max_price = db.Column(db.Float)
- single_price = db.Column(db.Boolean, default=False)
- drink_included = db.Column(db.Boolean, default=False)
- options_count = db.Column(db.Integer)
-
- # User Review/Rating
- user_rating = db.Column(db.Integer) # 1-10
- user_description = db.Column(db.Text)
-
- # Meta
- created_at = db.Column(db.DateTime, default=datetime.utcnow)
- status = db.Column(db.String(20), default='pending') # pending, approved, rejected
- user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
-
- images = db.relationship('RestaurantImage', backref='restaurant', lazy='dynamic', cascade="all, delete-orphan")
- def __repr__(self):
- return f'<Restaurant {self.name}>'
- class RestaurantImage(db.Model):
- __tablename__ = 'restaurant_images'
- id = db.Column(db.Integer, primary_key=True)
- image_url = db.Column(db.String(512))
- restaurant_id = db.Column(db.Integer, db.ForeignKey('restaurants.id'))
|