Subversion Repositories SmartDukaan

Rev

Rev 413 | 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

class SocialService(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    name = Field(String(100))
    handles = OneToMany("SocialHandle")

class SocialHandle(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    handle = Field(String(100))
    service = ManyToOne("SocialService")
    primary_info = ManyToOne("PrimaryInfo")
    
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)
    primary_info = ManyToOne("PrimaryInfo")
    
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)
    enabled = Field(Boolean)
    primary_info = ManyToOne("PrimaryInfo")
    
class Date(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    date = Field(Integer)
    month = Field(Integer)
    year = Field(Integer)
    type = Field(Integer)
    primary_info = ManyToOne("PrimaryInfo")
    
class IPMap(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    timestamp = Field(DateTime)
    ip = Field(String(30))
    user_info = ManyToOne("State")
    
class PrimaryInfo(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    title = Field(String(50))
    first_name = Field(String(50))
    middle_name = Field(String(50))
    last_name = Field(String(50))
    occupation = Field(String(50))
    hint_question = Field(String(200))
    hint_answer = Field(String(50))
    picture_id = Field(String(100))
    email = Field(String(100))
    user_handle = Field(String(100))
    password = Field(String(50))
    shipment_option = Field(Integer)
    phones = OneToMany("Phone")
    dates = OneToMany("Date")
    addresses = OneToMany("Address")
    social_handles = OneToMany("SocialHandle")
    user = ManyToOne("User")

class State(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    is_enrolled = Field(Boolean)
    is_email_verified = Field(Boolean)
    is_sms_verified =Field(Boolean)
    last_login_timestamp = Field(DateTime)
    last_logout = Field(DateTime)
    email_verification_sent_on = Field(DateTime)
    sms_verification_sent_on = Field(DateTime)
    active_since = Field(DateTime)
    current_shopping_cart = Field(Integer)
    is_logged_in = Field(Boolean)
    account_status = Field(Integer)
    ip_list = OneToMany("IPMap")
    user = ManyToOne("User")

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")
    
class User(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    session_id = Field(Integer)
    primary_info = OneToOne("PrimaryInfo")
    internal_info = OneToOne("InternalInfo")
    state = OneToOne("State")   

def initialize():
    metadata.bind = "sqlite:///user.sqlite" #need to read it from configserver.
    metadata.bind.echo = True
    setup_all(True)

if __name__=="__main__":
    initialize()