Subversion Repositories SmartDukaan

Rev

Rev 5036 | Rev 5341 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5036 Rev 5326
Line 4... Line 4...
4
@author: ashish
4
@author: ashish
5
'''
5
'''
6
from shop2020.model.v1.user.impl import Dataservice
6
from shop2020.model.v1.user.impl import Dataservice
7
from shop2020.utils.Utils import log_entry, to_py_date
7
from shop2020.utils.Utils import log_entry, to_py_date
8
from shop2020.thriftpy.model.v1.user.ttypes import WidgetType as WType
8
from shop2020.thriftpy.model.v1.user.ttypes import WidgetType as WType
9
from shop2020.model.v1.user.impl.Dataservice import User, UserCommunication, IPMap,\
9
from shop2020.model.v1.user.impl.Dataservice import User, UserCommunication, \
10
    Address, SocialHandle, UserState, InternalInfo, SocialService, Affiliate, Tracker, TrackLog,\
10
    Address, Affiliate, Tracker, TrackLog,\
11
    MasterAffiliate, UserNote, UserWidgetItem
11
    MasterAffiliate, UserNote, UserWidgetItem
12
from shop2020.thriftpy.model.v1.user.ttypes import UserContextException,\
12
from shop2020.thriftpy.model.v1.user.ttypes import UserContextException,\
13
    AuthenticationException, AccountStatus, Sex
13
    AuthenticationException, AccountStatus, Sex
14
from elixir import session
14
from elixir import session
15
import datetime
15
import datetime
16
from sqlalchemy import desc
16
from sqlalchemy import desc
-
 
17
from shop2020.model.v1.user.impl.CartDataAccessors import create_cart
17
 
18
 
18
 
19
 
19
def initialize(dbname='user', db_hostname="localhost"):
20
def initialize(dbname='user', db_hostname="localhost"):
20
    log_entry("initialize@DataAccessor", "Initializing data service")
21
    log_entry("initialize@DataAccessor", "Initializing data service")
21
    Dataservice.initialize(dbname, db_hostname)
22
    Dataservice.initialize(dbname, db_hostname)
22
 
23
 
23
def create_anonymous_user(jsession_id, cart):
24
def create_anonymous_user(jsession_id):
24
    user=User.get_by(jsession_id=jsession_id)
25
    user=User.get_by(jsession_id=jsession_id)
25
    #user=User.query.with_lockmode("update").filter_by(jsession_id=jsession_id)
26
    #user=User.query.with_lockmode("update").filter_by(jsession_id=jsession_id)
26
    if not user is None:
27
    if not user is None:
27
        return user
28
        return user
-
 
29
    cart = create_cart()
28
    user = User()
30
    user = User()
29
    anonymous_str = "anonymous"
31
    anonymous_str = "anonymous"
30
    user.email = jsession_id + "@anonymous.com"
32
    user.email = jsession_id + "@anonymous.com"
31
    user.password = anonymous_str
33
    user.password = anonymous_str
32
    user.name = anonymous_str
34
    user.name = anonymous_str
33
    user.communication_email = jsession_id + "@anonymous.com"
35
    user.communication_email = jsession_id + "@anonymous.com"
34
    user.jsession_id = jsession_id
36
    user.jsession_id = jsession_id
35
    user.is_anonymous = True
37
    user.is_anonymous = True
36
    user.sex = Sex.WONT_SAY
38
    user.sex = Sex.WONT_SAY
37
    user.active_cart_id = cart.id
39
    user.active_cart = cart
38
    user.trust_level = 0
40
    user.trust_level = 0
39
    #initialize userState
-
 
40
    user_state = UserState()
-
 
41
    user_state.is_email_verified = False
-
 
42
    user_state.is_sms_verified = False
-
 
43
    user_state.account_status = AccountStatus.ACTIVE
-
 
44
    user_state.ip_list = []
-
 
45
    user_state.active_since = datetime.datetime.now()
41
    user.active_since = datetime.datetime.now()
46
    user_state.user = user
-
 
47
    session.commit()
42
    session.commit()
48
 
43
 
49
    cart.user_id = user.id    
-
 
50
    session.commit()
-
 
51
    
-
 
52
    return user
44
    return user
53
 
45
 
54
def get_user_by_id(user_id):
46
def get_user_by_id(user_id):
55
    return User.get_by(id=user_id)
47
    return User.get_by(id=user_id)
56
 
48
 
-
 
49
def get_user_by_cart_id(cart_id):
-
 
50
    return User.get_by(active_cart_id=cart_id)
-
 
51
 
57
def get_user_by_mobile_number(mobile_number):
52
def get_user_by_mobile_number(mobile_number):
58
    return User.get_by(mobile_number=mobile_number)
53
    return User.get_by(mobile_number=mobile_number)
59
 
54
 
60
def get_user_by_email(email):
55
def get_user_by_email(email):
61
    return User.get_by(email=email)
56
    return User.get_by(email=email)
62
 
57
 
63
def create_user(user_to_add, cart):
58
def create_user(user_to_add):
64
    if user_to_add.userId:
-
 
65
        raise UserContextException(109, "id is set, user cannot be created")
-
 
66
    if user_exists(user_to_add.email):
59
    if user_exists(user_to_add.email):
67
        raise UserContextException(109, "User already exists with this email id.")
60
        raise UserContextException(109, "User already exists with this email id.")
-
 
61
    
-
 
62
    cart = create_cart()
-
 
63
 
68
    user = User()
64
    user = User()
69
    user.email = user_to_add.email
65
    user.email = user_to_add.email
70
    user.password = user_to_add.password
66
    user.password = user_to_add.password
71
    user.name = user_to_add.name
67
    user.name = user_to_add.name
72
    user.communication_email = user_to_add.communicationEmail
68
    user.communication_email = user_to_add.communicationEmail
73
    user.jsession_id = user_to_add.jsessionId
69
    user.jsession_id = user_to_add.jsessionId
74
    user.is_anonymous = False
70
    user.is_anonymous = False
75
    user.sex = user_to_add.sex
71
    user.sex = user_to_add.sex
76
    user.date_of_birth = user_to_add.dateOfBirth
72
    user.date_of_birth = user_to_add.dateOfBirth
77
    user.active_cart_id = cart.id
73
    user.active_cart = cart
78
    user.mobile_number = user_to_add.mobileNumber
74
    user.mobile_number = user_to_add.mobileNumber
79
    user.source = user_to_add.source
75
    user.source = user_to_add.source
80
    user.source_start_time = to_py_date(user_to_add.sourceStartTime)
76
    user.source_start_time = to_py_date(user_to_add.sourceStartTime)
81
    user.trust_level = 0
77
    user.trust_level = 0
82
 
-
 
83
    #initialize userState
-
 
84
    user_state = UserState()
-
 
85
    user_state.is_email_verified = False
-
 
86
    user_state.is_sms_verified = False
-
 
87
    user_state.account_status = AccountStatus.ACTIVE
-
 
88
    user_state.ip_list = []
-
 
89
    user_state.active_since = datetime.datetime.now()
78
    user.active_since = datetime.datetime.now()
90
    user_state.user = user
-
 
91
    session.commit();
-
 
92
    
-
 
93
    #Now create the user phones. Mostly, this should only be a mobile number
-
 
94
 
-
 
95
    cart.user_id = user.id    
-
 
96
    session.commit()
79
    session.commit()
97
 
-
 
98
    return user
80
    return user
99
 
81
 
100
#===============================================================================
82
#===============================================================================
101
# Need to provide the update apis here for relevant fields in PrimaryInfo.
83
# Need to provide the update apis here for relevant fields in PrimaryInfo.
102
#===============================================================================
84
#===============================================================================
Line 110... Line 92...
110
    user.communication_email = user_to_update.communicationEmail
92
    user.communication_email = user_to_update.communicationEmail
111
    user.jsession_id = user_to_update.jsessionId
93
    user.jsession_id = user_to_update.jsessionId
112
    user.is_anonymous = user_to_update.isAnonymous
94
    user.is_anonymous = user_to_update.isAnonymous
113
    user.sex = user_to_update.sex
95
    user.sex = user_to_update.sex
114
    user.date_of_birth = user_to_update.dateOfBirth
96
    user.date_of_birth = user_to_update.dateOfBirth
115
    user.active_cart_id = user_to_update.activeCartId
-
 
116
    user.mobile_number = user_to_update.mobileNumber
97
    user.mobile_number = user_to_update.mobileNumber
117
    session.commit()
98
    session.commit()
118
    return user
99
    return user
119
 
100
 
120
def delete_user(user_id):
-
 
121
    user = get_user_by_id(user_id)
-
 
122
    
-
 
123
    if not user:
-
 
124
        raise_user_exception(user_id)
-
 
125
        
-
 
126
    user.state.account_status = AccountStatus.DELETED
-
 
127
    session.commit()
-
 
128
    return True
-
 
129
    
-
 
130
def get_user_state(user_id):
-
 
131
    userstate = UserState.get_by(user_id=user_id)
-
 
132
    return userstate
-
 
133
 
-
 
134
def get_internal_info(user_id):
-
 
135
    info = InternalInfo.get_by(user_id=user_id)
-
 
136
    return info
-
 
137
 
-
 
138
def authenticate_user(user_handle, password):
101
def authenticate_user(user_handle, password):
139
    user = User.get_by(email=user_handle)
102
    user = User.get_by(email=user_handle)
140
    if not user:
103
    if not user:
141
        raise AuthenticationException("This email address is not registered.", 102)
104
        raise AuthenticationException("This email address is not registered.", 102)
142
    
105
    
Line 200... Line 163...
200
    address.enabled = False
163
    address.enabled = False
201
    session.commit()
164
    session.commit()
202
    return True
165
    return True
203
 
166
 
204
def set_user_as_logged_in(user_id, time_stamp):
167
def set_user_as_logged_in(user_id, time_stamp):
205
    user_state = UserState.get_by(user_id=user_id)
-
 
206
    #user = get_user_by_id(user_id)
168
    user = User.get_by(id=user_id)
207
    
169
    
208
    if not user_state:
170
    if not user:
209
        raise_user_exception(user_id)
171
        raise_user_exception(user_id)
210
    
172
    
211
    if not time_stamp:
173
    if not time_stamp:
212
        user_state.last_login = datetime.datetime.now()
174
        user.last_login = datetime.datetime.now()
213
    else:
175
    else:
214
        user_state.last_login = to_py_date(time_stamp)
176
        user.last_login = to_py_date(time_stamp)
215
    session.commit()
177
    session.commit()
216
    return True
178
    return True
217
    
179
    
218
def set_user_as_logged_out(user_id, time_stamp):
180
def set_user_as_logged_out(user_id, time_stamp):
219
    user_state = UserState.get_by(user_id=user_id)
181
    user = User.get_by(id=user_id)
220
    
182
    
221
    if not user_state:
183
    if not user:
222
        raise_user_exception(user_id)
184
        raise_user_exception(user_id)
223
    
185
    
224
    if not time_stamp:
186
    if not time_stamp:
225
        user_state.last_logout = datetime.datetime.now()
187
        user.last_logout = datetime.datetime.now()
226
    else:
188
    else:
227
        user_state.last_logout = to_py_date(time_stamp)
189
        user.last_logout = to_py_date(time_stamp)
228
    session.commit()
190
    session.commit()
229
    return True
191
    return True
230
 
192
 
231
def set_default_address(user_id, address_id):
193
def set_default_address(user_id, address_id):
232
    user = get_user_by_id(user_id)
194
    user = get_user_by_id(user_id)
Line 369... Line 331...
369
 
331
 
370
def get_address(address_id):
332
def get_address(address_id):
371
    address = Address.get_by(id=address_id)
333
    address = Address.get_by(id=address_id)
372
    return address
334
    return address
373
 
335
 
374
def get_social_service(service_id):
-
 
375
    service = SocialService.get_by(service_id)
-
 
376
    return service
-
 
377
 
-
 
378
def add_ip_address_for_user(ip_address, time_stamp, user_id):
-
 
379
    user = get_user_by_id(user_id)
-
 
380
    if not user:
-
 
381
        raise_user_exception(user_id)
-
 
382
    #user exists create an IP address object
-
 
383
    ip_address = IPMap()
-
 
384
    ip_address.ip = ip_address
-
 
385
    ip_address.timestamp = to_py_date(time_stamp)
-
 
386
    ip_address.user_state = user.state
-
 
387
    session.commit()
-
 
388
    return True
-
 
389
    
-
 
390
def get_social_service_by_name(service_name):
-
 
391
    service = SocialService.get_by(name=service_name)
-
 
392
    
-
 
393
    if not service:
-
 
394
        raise UserContextException(106, "No such social service exists")
-
 
395
    return service
-
 
396
    
-
 
397
def add_social_handle(user_id, social_service, handle):
-
 
398
    user = get_user_by_id(user_id)
-
 
399
    
-
 
400
    if not user:
-
 
401
        raise_user_exception(user_id)
-
 
402
    
-
 
403
    service = get_social_service_by_name(social_service)
-
 
404
    
-
 
405
    #get if use already has this service.
-
 
406
    social_handle = SocialHandle.filter(service=service).filter(user=user).one()
-
 
407
    if not social_handle:
-
 
408
        #create a new handle
-
 
409
        social_handle = SocialHandle()
-
 
410
        social_handle.service = service
-
 
411
        social_handle.user = user
-
 
412
        social_handle.handle = handle
-
 
413
    else:
-
 
414
        social_handle.handle = handle
-
 
415
    session.commit()
-
 
416
    return True
-
 
417
 
-
 
418
 
-
 
419
def forgot_password(email, password):
336
def forgot_password(email, password):
420
    try:
337
    try:
421
        user = User.get_by(email=email)
338
        user = User.get_by(email=email)
422
        if user:
339
        if user:
423
            user.password = password
340
            user.password = password
Line 426... Line 343...
426
        else:
343
        else:
427
            return False
344
            return False
428
    except:
345
    except:
429
        return False
346
        return False
430
 
347
 
431
 
-
 
432
'''
-
 
433
def forgot_password(email):
-
 
434
    try:
-
 
435
        user = User.get_by(email=email)
-
 
436
        if user:
-
 
437
            new_password = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(8))
-
 
438
            mail = Mail()
-
 
439
            mail.to = []
-
 
440
            mail.to.append(email)
-
 
441
            mail.sender = ""
-
 
442
            mail.password = ""
-
 
443
            mail.data = "Your new password is " + user.password
-
 
444
            helper_client = HelperClient()
-
 
445
            helper_client.__start__()
-
 
446
            client = helper_client.get_client()
-
 
447
            client.sendMail(mail);
-
 
448
            
-
 
449
            return True
-
 
450
        else:
-
 
451
            return False
-
 
452
    except:
-
 
453
        return False
-
 
454
'''    
-
 
455
        
-
 
456
def get_all_addresses_for_user(userId):
348
def get_all_addresses_for_user(userId):
457
    return Address.query.filter_by(user_id = userId, enabled=True).all()
349
    return Address.query.filter_by(user_id = userId, enabled=True).all()
458
    
350
    
459
def get_default_address_id(userId):
351
def get_default_address_id(userId):
460
    user = get_user_by_id(userId);
352
    user = get_user_by_id(userId);
Line 479... Line 371...
479
        return User.query.count()
371
        return User.query.count()
480
    else:
372
    else:
481
        return User.query.filter_by(is_anonymous = user_type).count()
373
        return User.query.filter_by(is_anonymous = user_type).count()
482
    
374
    
483
def get_users(user_type, start_date, end_date):
375
def get_users(user_type, start_date, end_date):
484
    query = session.query(User).join(UserState)
376
    query = session.query(User)
485
    if start_date != -1:
377
    if start_date != -1:
486
        query = query.filter(UserState.active_since >= to_py_date(start_date))
378
        query = query.filter(User.active_since >= to_py_date(start_date))
487
    if end_date != -1:
379
    if end_date != -1:
488
        query = query.filter(UserState.active_since <= to_py_date(end_date))
380
        query = query.filter(User.active_since <= to_py_date(end_date))
489
    if user_type is not None:
381
    if user_type is not None:
490
        query = query.filter(User.is_anonymous == user_type)
382
        query = query.filter(User.is_anonymous == user_type)
491
    return query.all()
383
    return query.all()
492
    
384
    
493
#=============================================================================
385
#=============================================================================