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'' @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'' 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'))