Spaces:
Running
Running
File size: 4,405 Bytes
3f55893 2e67005 5aa5283 3f55893 5aa5283 3f55893 5aa5283 3f55893 5aa5283 3f55893 5aa5283 2e67005 3f55893 2e67005 3f55893 5aa5283 2e67005 5aa5283 3f55893 103bb6b 3f55893 103bb6b 3f55893 2e67005 3f55893 2e67005 5aa5283 3f55893 5aa5283 3f55893 5aa5283 b37d30d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
from sqlalchemy import Column, Integer, String, Boolean, Text, JSON, ForeignKey, DateTime, text,TIMESTAMP
from sqlalchemy.orm import relationship, Mapped, mapped_column
from sqlalchemy.sql import func
from .database import Base
from typing import List, Optional
from datetime import datetime
class Ingredient(Base):
__tablename__ = "ingredients"
id = Column(Integer, primary_key=True, index=True)
name = Column(String(255), unique=True, index=True)
alternate_names = Column(Text, nullable=True)
safety_rating = Column(Integer, nullable=True)
description = Column(Text, nullable=True)
health_effects = Column(Text, nullable=True)
allergic_info = Column(Text, nullable=True)
diet_type = Column(String(255), nullable=True)
# Fix the default timestamp for MySQL
created_at = Column(TIMESTAMP, server_default=text('CURRENT_TIMESTAMP'))
updated_at = Column(DateTime(timezone=True),nullable=True)
# Relationships
sources = relationship("IngredientSource", back_populates="ingredient")
class IngredientSource(Base):
__tablename__ = "ingredient_sources"
id = Column(Integer, primary_key=True, index=True)
ingredient_id = Column(Integer, ForeignKey("ingredients.id"))
source_name = Column(String(255), nullable=False)
found = Column(Boolean, default=False)
summary = Column(Text, nullable=True)
data = Column(Text, nullable=True)
# Relationships
ingredient = relationship("Ingredient", back_populates="sources")
class Marker(Base):
__tablename__ = "markers"
id = Column(Integer, primary_key=True, index=True)
image_name = Column(String(255), nullable=False)
vuforia_id = Column(String(255), nullable=False)
product_id = Column(Integer, ForeignKey("products.id"))
# Traditional relationship syntax
product = relationship("Product", back_populates="markers")
class Product(Base):
__tablename__ = "products"
id = Column(Integer, primary_key=True, index=True)
product_name = Column(String(255), nullable=False)
ingredients = Column(Text, nullable=True)
ingredients_analysis = Column(Text, nullable=True)
overall_safety_score = Column(Integer, nullable=True)
suitable_diet_types = Column(String(255), nullable=True)
allergy_warnings = Column(Text, nullable=True)
usage_recommendations = Column(Text, nullable=True)
health_insights = Column(Text, nullable=True)
ingredient_interactions = Column(Text, nullable=True)
key_takeaway = Column(Text, nullable=True)
ingredients_count = Column(Integer, nullable=True)
user_id = Column(Integer, nullable=True)
timestamp = Column(DateTime, nullable=True)
ingredient_ids= Column(Text, nullable=True)
data_quality_warnings = Column(Text, nullable=True)
markers: Mapped[List["Marker"]] = relationship(back_populates="product")
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
name = Column(String(255), unique=False, index=False, nullable=False)
email = Column(String(255), unique=True, index=True, nullable=False)
hashed_password = Column(String(255), nullable=False)
is_active = Column(Boolean, default=True)
# Relationships
preferences = relationship(
"UserPreferences",
back_populates="user",
cascade="all, delete-orphan"
)
scan_history = relationship(
"ScanHistory",
back_populates="user",
cascade="all, delete-orphan"
)
class UserPreferences(Base):
__tablename__ = "user_preferences"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"))
dietary_restrictions = Column(String(255), nullable=True)
allergens = Column(Text, nullable=True)
preferred_ingredients = Column(Text, nullable=True)
disliked_ingredients = Column(Text, nullable=True)
# Relationships
user = relationship("User", back_populates="preferences")
class ScanHistory(Base):
__tablename__ = "scan_history"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"))
product_id = Column(Integer)
scan_date = Column(DateTime, default=datetime.now)
# Relationships
user = relationship("User", back_populates="scan_history")
|