Spaces:
Running
Running
| 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") | |