Subversion Repositories SmartDukaan

Rev

Rev 746 | Rev 1249 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

'''
Created on 28-Apr-2010

@author: ashish
'''

from elixir import *
from elixir.entity import Entity
from elixir.fields import Field
from sqlalchemy.types import Integer
from elixir.relationships import OneToMany, ManyToOne
import datetime
import elixir

class SocialService(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    name = Field(String(100))
    handles = OneToMany("SocialHandle")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class SocialHandle(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    handle = Field(String(100))
    service = ManyToOne("SocialService")
    user = ManyToOne("User")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
        
class Address(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    line_1 = Field(String(100))
    line_2 = Field(String(100))
    landmark = Field(String(100))
    city = Field(String(100))
    state = Field(String(100))
    pin = Field(String(10))
    country = Field(String(100))
    enabled = Field(Boolean)
    type = Field(Integer)
    added_on = Field(DateTime)
    name = Field(String(100))
    phone = Field(String(20))
    user = ManyToOne("User")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
        
class Phone(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    country_code = Field(String(5))
    area_code = Field(String(10))
    number = Field(String(20))
    extension = Field(String(10))
    type = Field(Integer)
    user = ManyToOne("User")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class InternalInfo(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    geo_zone = Field(Integer)
    shipment_zone = Field(Integer)
    tax_zone = Field(Integer)
    rank_score = Field(Float)
    user = ManyToOne("User")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
        
class IPMap(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    timestamp = Field(DateTime)
    ip = Field(String(30))
    user_state = ManyToOne("UserState")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
        
class UserState(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    last_login = Field(DateTime)
    last_logout = Field(DateTime)
    email_verification_sent_on = Field(DateTime)
    sms_verification_sent_on = Field(DateTime)
    is_email_verified = Field(Boolean)
    is_sms_verified =Field(Boolean)
    active_since = Field(DateTime)
    account_status = Field(Integer)
    ip_list = OneToMany("IPMap")
    user = ManyToOne("User")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class User(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    email = Field(String(100))
    password = Field(String(50))
    name = Field(String(150))
    default_address_id = Field(Integer)
    communication_email = Field(String(100))
    active_cart_id = Field(Integer)
    jsession_id = Field(String(64))
    is_anonymous = Field(Boolean)
    date_of_birth = Field(String(20))
    sex = Field(Integer)
    mobile_number = Field(String(20))
    addresses = OneToMany("Address")
    social_handles = OneToMany("SocialHandle")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class Line(Entity):
    cart = ManyToOne("Cart", primary_key=True)
    item_id = Field(Integer, primary_key=True, autoincrement=False)
    quantity = Field(Float)
    line_status = Field(Integer)
    estimate = Field(Integer)
    created_on = Field(DateTime)
    updated_on = Field(DateTime)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class Cart(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    user_id = Field(Integer)
    cart_status = Field(Integer)
    address_id = Field(Integer)
    checked_out_on = Field(DateTime)
    created_on = Field(DateTime)
    updated_on = Field(DateTime)
    lines = OneToMany("Line")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

#===============================================================================
# Different entities for the Widget service
#===============================================================================

class Widget(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    type = Field(Integer)
    user_id = Field(Integer)
    name = Field(String(100))
    enabled = Field(Boolean)
    items = OneToMany("WidgetItem")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class WidgetItem(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    added_on = Field(DateTime)
    item = ManyToOne("Item")
    widget = ManyToOne("Widget")
    using_options(shortnames=True)    
    using_table_options(mysql_engine="InnoDB")

class Item(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    item_id = Field(Integer)
    enabled = Field(Boolean)
    widget_items=OneToMany("WidgetItem")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

def initialize():
    #metadata.bind = "sqlite:///user.sqlite" #need to read it from configserver.
    metadata.bind = 'mysql://root:shop2020@localhost/user'
    metadata.bind.echo = True
    setup_all(True)

if __name__=="__main__":
    initialize()
    
    
'''
class Ratings(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    item_id = Field(Integer)
    type = Field(Integer)
    rating = Field(Float)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class UserRatings(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    item_id = Field(Integer)
    rating = Field(Float)
    user_id = Field(Integer)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
'''