Subversion Repositories SmartDukaan

Rev

Rev 2717 | Rev 2981 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
48 ashish 1
namespace java in.shop2020.model.v1.user
95 ashish 2
namespace py shop2020.thriftpy.model.v1.user
48 ashish 3
 
4
/**
5
Exceptions
6
*/
7
exception AuthenticationException{
8
	1:string message,
9
	2:i32 errorCode
10
}
11
 
12
exception UserContextException{
13
	1:i32 errorCode,
14
	2:string message
15
}
16
 
552 chandransh 17
exception ShoppingCartException{
18
	1:i64 id,
19
	2:string message
20
}
21
 
1116 varun.gupt 22
exception UserCommunicationException{
23
	1:i64 id,
24
	2:string message
25
}
26
 
1995 vikas 27
exception UserAffiliateException{
1848 vikas 28
    1:i64 id,
29
    2:string message
30
}
31
 
1599 ankur.sing 32
enum UserType{
33
	USER = 0,
34
	ANONYMOUS = 1 
35
}
36
 
121 ashish 37
enum AddressType{
130 ashish 38
	WORK = 0,
39
	HOME = 1
48 ashish 40
}
41
 
130 ashish 42
enum PhoneType{
43
	WORK = 0,
44
	HOME = 1,
45
	MOBILE = 2
46
}
47
 
48
enum AccountStatus{
49
	ACTIVE = 0,
50
	DELETED = 1,
51
	INACTIVE = 2,
52
	INCOMPLETE = 3
53
}
54
 
48 ashish 55
/**
1116 varun.gupt 56
Form types for Contact Us form
57
*/
58
enum UserCommunicationType{
59
	RETURN_FORM = 1,
60
	ORDER_CANCELLATION = 2,
61
	DELIVERY_PROBLEM = 3,
62
	PAYMENT_STATUS = 4,
63
	ORDER_STATUS = 5,
64
	PRODUCT_REQUEST = 6,
65
	PRODUCT_QUESTION = 7,
66
	OTHER = 7
67
}
68
 
69
/**
121 ashish 70
All the social handles
48 ashish 71
*/
121 ashish 72
struct SocialHandles{
48 ashish 73
	1:string facebook,
74
	2:string opensocial,
75
	3:string twitter
76
}
77
 
121 ashish 78
/**
79
Address
80
*/
81
struct Address{
552 chandransh 82
	1:i64 id,
83
	2:string line1,
84
	3:string line2,
85
	4:string landmark,
86
	5:string city,
87
	6:string state,
88
	7:string pin,
89
	8:string country,
48 ashish 90
	9:bool enabled,
123 ashish 91
	10:AddressType type,
414 ashish 92
	11:i64 addedOn,
93
	12:string name,
94
	13:string phone
48 ashish 95
}
96
 
130 ashish 97
/**Phone
98
**/
99
struct Phone{
100
	1:i64 id,
101
	2:string countryCode,
102
	3:string areaCode,
103
	4:string number,
104
	5:string extension,
552 chandransh 105
	6:PhoneType type
130 ashish 106
}
107
 
121 ashish 108
/**
109
Internal information to be used by system. various variables which aid in serving the user are identified and put here
110
**/
111
struct UserInternalInfo{
48 ashish 112
	1:i64 userId,
121 ashish 113
	2:i64 geoZone,
114
	3:i64 shipmentZone,
48 ashish 115
	4:i64 taxZone,
116
	5:double userRankScore
117
}
118
 
121 ashish 119
/**
120
structure representing timestamp and ip at which user logged into the system
121
**/
122
struct IPMap{
123
	1:i64 timestamp
123 ashish 124
	2:string ip
48 ashish 125
}
126
 
121 ashish 127
/**
128
dynamic user state 
129
**/
130
struct UserState{
48 ashish 131
	1:i64 userId,
552 chandransh 132
	2:i64 lastLogin,
133
	3:i64 lastLogout,
134
	4:i64 emailVerificationSentOn,
135
	5:i64 smsVerificationSentOn,
136
	6:bool isEmailVerified,
48 ashish 137
	7:bool isSMSVerified,
138
	8:i64 activeSince,
552 chandransh 139
	9:list<IPMap> ips,
140
	10:AccountStatus status
48 ashish 141
}
142
 
552 chandransh 143
enum Sex{
144
	MALE,
145
	FEMALE,
146
	WONT_SAY
147
}
148
 
121 ashish 149
/**
552 chandransh 150
The user structure holding the basic information that identifies the user.
121 ashish 151
**/
552 chandransh 152
struct User{
153
	1:i64 userId,
154
	2:string email,
155
	3:string password,
156
	4:string name,
566 rajveer 157
	5:string dateOfBirth,
1116 varun.gupt 158
	6:Sex sex,
159
	7:string mobileNumber,
552 chandransh 160
	8:SocialHandles socialHandles,
161
	9:list<Address> addresses,
162
	10:i64 defaultAddressId,
163
	11:string communicationEmail,
164
	12:i64 activeCartId,
165
	13:string jsessionId,
2020 vikas 166
	14:bool isAnonymous,
2814 vikas 167
	15:string source,
168
	16:i64 sourceStartTime
48 ashish 169
}
170
 
1116 varun.gupt 171
struct UserCommunication{
172
	1:i64 id,
173
	2:i64 userId,
174
	3:UserCommunicationType communicationType,
175
	4:i64 orderId,
176
	5:string airwaybillNo,
177
	6:string replyTo,
178
	7:string productName,
179
	8:string subject,
180
	9:string message,
1299 varun.gupt 181
	10:i64 communication_timestamp
1116 varun.gupt 182
}
183
 
1848 vikas 184
struct MasterAffiliate{
185
    1:i64 id,
186
    2:string name,
1861 vikas 187
    3:i64 addedOn
1848 vikas 188
}
189
 
190
struct Affiliate{
191
    1:i64 id,
192
    2:string name,
193
    3:string url,
1861 vikas 194
    4:i64 masterAffiliateId,
195
    5:i64 addedOn
1848 vikas 196
}
197
 
198
struct Tracker{
199
    1:i64 id,
1861 vikas 200
    2:i64 affiliateId,
1848 vikas 201
}
202
 
203
struct TrackLog{
204
    1:i64 id,
1861 vikas 205
    2:i64 addedOn,
1995 vikas 206
    3:i64 affiliateId,
1861 vikas 207
    4:i64 userId,
208
    5:string event,
209
    6:string url,
210
    7:string data
1848 vikas 211
}
212
 
2642 varun.gupt 213
struct UserNote{
214
	1:i64 user_id,
215
	2:i64 entity_id,
2717 varun.gupt 216
	3:string slide,
2642 varun.gupt 217
	4:string note
218
}
219
 
552 chandransh 220
//Various statuses for line items
221
enum LineStatus{
222
	LINE_ACTIVE,			//line is active
223
	LINE_DELETED,			//line is deleted
224
	LINE_EXPIRED,			//line is expired, on laspse of fixed amount of time
225
	LINE_COMMITED,			//line is committed, sent for processing.
226
	LINE_COMMIT_FAILED,		//line was committed, but commit failed due to some reason, possibly during cart validation.
227
	LINE_AUTO_DELETED,		//line was auto deleted internally due to some reason(item delisted, price changed etc).
228
}
229
 
230
//Various statuses for Cart
231
enum CartStatus{
232
	ACTIVE,					
233
	INACTIVE,
234
	EXPIRED,
235
	COMMITTED,
236
	COMMIT_FAILED
237
}
238
 
239
struct Line{
646 chandransh 240
	1:i64 cartId,				//identifier
552 chandransh 241
	2:i64 itemId,			//item id added
242
	3:double quantity,		//quantity added 
243
	4:i64 createdOn,		//addition timestamp
244
	5:i64 updatedOn, 		//any updation in quantity or status
245
	6:LineStatus lineStatus,	//current status
1984 varun.gupt 246
	7:i32 estimate,			//delivery estimate in hours
247
	8:double actualPrice,
248
	9:double discountedPrice
552 chandransh 249
}
250
 
251
struct Cart{
252
	1:i64 id,				//identifier
253
	2:list<Line> lines,		//list of lines
254
	3:CartStatus status,	//current status
255
	4:i64 createdOn,		//creation timestamp
256
	5:i64 updatedOn,		//time of last update in cart (like addition/deletion/updation of cart items )
687 chandransh 257
	6:i64 checkedOutOn,		//commited timestamp
552 chandransh 258
	7:i64 userId,			//user id to which it belongs
1984 varun.gupt 259
	8:i64 addressId,	    //address on which this will be shipped
260
	9:double totalPrice,
261
	10:double discountedPrice,
262
	11:string couponCode
552 chandransh 263
}
264
 
265
enum WidgetType{
770 rajveer 266
	MY_RESEARCH,
267
	BROWSE_HISTORY
268
}
269
 
270
/** Not used right now, will decide later
271
enum WidgetType{
272
	ACCESSORIES,
273
	RATINGS,
552 chandransh 274
	SIMILAR_ITEMS,
275
	RECOMMENDED_ITEMS,
770 rajveer 276
	DEAL_PROMOTIONS,
277
 
552 chandransh 278
	MY_RESEARCH,
770 rajveer 279
	BROWSE_HISTORY
552 chandransh 280
}
281
 
282
enum RatingType{
283
	SHOP2020,
284
	AMAZON,
285
	USER_ALL,
286
	USER_CURRENT
287
}
288
 
289
struct RatingsWidget{
290
	1:i64 catalog_item_id,
291
	2:map<RatingType,double> ratings,
292
	3:i64 user_id
293
}
770 rajveer 294
*/
552 chandransh 295
struct WidgetItem{
296
	1:i64 id,
297
	2:i64 item_id,
770 rajveer 298
	3:bool enabled,
299
	4:i64 timestamp
552 chandransh 300
}
301
 
302
struct Widget{
303
	1:i64 id,
304
	2:WidgetType type,
770 rajveer 305
	3:i64 user_id,
552 chandransh 306
	4:list<WidgetItem> items,
307
	5:bool enabled,
770 rajveer 308
	6:string name
552 chandransh 309
}
310
 
311
exception WidgetException{
312
	1:i64 id,
313
	2:string message
314
}
315
 
48 ashish 316
/**
1984 varun.gupt 317
Exceptions for Promotion Service
318
*/
319
exception PromotionException{
320
	1:i64 id,
321
	2:string message
322
}
323
 
324
/**
325
Types for Promotion Service
326
*/
327
 
328
struct Promotion{
329
	1:i64 id,
330
	2:string name,
331
	3:string ruleExecutionSrc,
332
	4:i64 startOn,
333
	5:i64 endOn,
334
	6:i64 createdOn
335
}
336
 
337
struct Coupon{
338
	1:string couponCode
339
	2:i64 promotionId
340
	3:string arguments
341
}
342
 
343
struct PromotionTracking{
344
	1:string couponCode,
345
	2:i64 transactionId,
346
	3:i64 userId,
347
	4:bool appliedOn
348
}
349
 
350
/**
351
Promotion Service
352
*/
353
service PromotionService{
354
	/**
355
	* For closing the open session in sqlalchemy
356
	*/
357
	void closeSession(),
358
 
359
	void createPromotion(1:string name, 2:string ruleExecutionSrc, 3:i64 startOn, 4:i64 endOn) throws (1:PromotionException pex),
360
	list<Promotion> getAllPromotions() throws (1:PromotionException pex),
361
	Promotion getPromotionById(1:i64 promotionId) throws (1:PromotionException pex),
362
	void generateCouponsForPromotion(1:i64 promotionId, 2:string couponCode) throws (1:PromotionException pex),
363
	Cart applyCoupon(1:string couponCode, 2:i64 cartId) throws (1:PromotionException pex),
364
    void trackCouponUsage(1:string couponCode, 2:i64 transactionId, 3:i64 userId) throws (1:PromotionException pex),
365
    i64 getCouponUsageCountByUser(1:string couponCode, 2:i64 userId) throws (1:PromotionException pex)
366
}
367
 
368
/**
48 ashish 369
service
370
*/
371
service UserContextService{
763 rajveer 372
	/**
373
	* For closing the open session in sqlalchemy
374
	*/
375
	void closeSession(),
376
 
552 chandransh 377
	User createAnonymousUser(1:string jsessionId) throws (1:UserContextException ucex),
378
	User getUserById(1:i64 userId) throws (1:UserContextException ucex),
1491 vikas 379
	User getUserByEmail(1:string email) throws (1:UserContextException ucex),
552 chandransh 380
	User createUser(1:User user) throws (1:UserContextException ucex),
381
	User updateUser(1:User user) throws (1:UserContextException ucex),
382
	bool deleteUser(1:i64 userId) throws (1:UserContextException ucex),
383
	UserState getUserState(1:i64 userId) throws (1:UserContextException ucex),
384
	User authenticateUser(1:string email, 2:string password) throws (1:AuthenticationException auex),
385
	bool userExists(1:string email) throws (1:UserContextException ucx),
566 rajveer 386
	i64 addAddressForUser(1:i64 userId, 2:Address address, 3:bool setDefault)throws (1:UserContextException ucx),
48 ashish 387
	bool removeAddressForUser(1:i64 userid, 2:i64 addressId)throws (1:UserContextException ucx),
388
	bool setUserAsLoggedIn(1:i64 userId, 2:i64 timestamp)throws (1:UserContextException ucx),
389
	bool setUserAsLoggedOut(1:i64 userid, 2:i64 timestamp)throws (1:UserContextException ucx),
506 rajveer 390
	bool setDefaultAddress(1:i64 userid, 2:i64 addressId)throws (1:UserContextException ucx),
592 rajveer 391
	bool updatePassword(1:i64 userid, 2:string oldPassword, 3:string newPassword)throws (1:UserContextException ucx),
895 rajveer 392
	bool forgotPassword(1:string email, 2:string newPassword)throws (1:UserContextException ucx),
592 rajveer 393
	list<Address> getAllAddressesForUser(1:i64 userId)throws (1:UserContextException ucx),
1892 vikas 394
	Address getAddressById(1:i64 addressId)throws (1:UserContextException ucx),
592 rajveer 395
	i64 getDefaultAddressId(1:i64 userId)throws (1:UserContextException ucx),
783 rajveer 396
	string getDefaultPincode(1:i64 userId)throws (1:UserContextException ucx),
552 chandransh 397
 
1167 varun.gupt 398
	bool saveUserCommunication(1:i64 userId, 2:string replyTo, 3:i64 communicationType, 4:i64 orderId, 5:string airwaybillNo, 6:string productName, 7:string subject, 8:string message)throws (1:UserCommunicationException ucx)
1590 varun.gupt 399
	UserCommunication getUserCommunicationById(1:i64 id) throws (1:UserCommunicationException ucx)
400
	list<UserCommunication> getUserCommunicationByUser(1:i64 userId) throws (1:UserCommunicationException ucx)
401
	list<UserCommunication> getAllUserCommunications() throws (1:UserCommunicationException ucx)
1116 varun.gupt 402
 
1995 vikas 403
	MasterAffiliate createMasterAffiliate(1:string name, 2:i64 addedOn) throws (1:UserAffiliateException utx)
404
	list<MasterAffiliate> getAllMasterAffiliates() throws (1:UserAffiliateException utx)
405
	MasterAffiliate getMasterAffiliateById(1:i64 id) throws (1:UserAffiliateException utx)
406
    MasterAffiliate getMasterAffiliateByName(1:string name) throws (1:UserAffiliateException utx)
407
	Affiliate createAffiliate(1:string name, 2:string url, 3:i64 masterAffiliateId, 4:i64 addedOn) throws (1:UserAffiliateException utx)
408
	Affiliate getAffiliateById(1:i64 id) throws (1:UserAffiliateException utx)
409
	Affiliate getAffiliateByName(1:string name) throws (1:UserAffiliateException utx)
410
	Tracker getTrackerById(1:i64 id) throws (1:UserAffiliateException utx)
411
	list<Affiliate> getAffiliatesByMasterAffiliate(1:i64 id) throws (1:UserAffiliateException utx)
412
	i64 addTrackLog(1:i64 affiliateId, 2:i64 userId, 3:string event, 4:string url, 5:string data, 6:i64 addedOn) throws (1:UserAffiliateException utx)
413
	TrackLog getTrackLogById(1:i64 id) throws (1:UserAffiliateException utx)
414
	list<TrackLog> getTrackLogsByAffiliate(1:i64 affiliateId) throws (1:UserAffiliateException utx)
415
	list<TrackLog> getTrackLogsByUser(1:i64 userId) throws (1:UserAffiliateException utx)
416
	list<TrackLog> getTrackLogs(1:i64 userId, 2:string event, 3:string url) throws (1:UserAffiliateException utx)
1848 vikas 417
 
552 chandransh 418
	i64 createCart(1:i64 userId) throws (1:ShoppingCartException scx),
419
	Cart getCurrentCart(1:i64 userId) throws (1:ShoppingCartException scx),	
420
	Cart getCart(1:i64 cartId) throws (1:ShoppingCartException scx),
421
	list<Cart> getCartsForUser(1:i64 userId, 2:CartStatus status) throws (1:ShoppingCartException scx),
422
	list<Cart> getCartsByStatus(1:CartStatus status) throws (1:ShoppingCartException scx),
423
	list<Cart> getCartsByTime(1:i64 from_time, 2:i64 to_time, 3:CartStatus status) throws (1:ShoppingCartException scx),
424
	void changeCartStatus(1:i64 cartId, 2:CartStatus status) throws (1:ShoppingCartException scx),
2033 rajveer 425
	string addItemToCart(1:i64 cartId, 2:i64 itemId, 3:i64 quantity) throws (1:ShoppingCartException scx),
552 chandransh 426
	void deleteItemFromCart(1:i64 cartId, 2:i64 itemId) throws (1:ShoppingCartException scx),
427
	void changeQuantity(1:i64 cartId, 2:i64 itemId, 3:i64 quantity) throws (1:ShoppingCartException scx),
428
	void changeItemStatus(1:i64 cartId, 2:i64 itemId, 3:LineStatus status) throws (1:ShoppingCartException scx),
577 chandransh 429
	void addAddressToCart(1:i64 cartId, 2:i64 addressId) throws (1:ShoppingCartException scx),
1984 varun.gupt 430
	void applyCouponToCart(1:i64 cartId, 2:string couponCode, 3:double totalPrice, 4:double discountedPrice) throws (1:ShoppingCartException scx),
431
	void removeCoupon(1:i64 cartId) throws (1:ShoppingCartException scx),
687 chandransh 432
 
433
	/**
434
	 Creates a transaction and multiple orders for the given cart. Returns the transaction ID created.
435
	*/
2814 vikas 436
	i64 createOrders(1:i64 cartId, 2:string sessionSource, 3:i64 sessionStartTime) throws (1:ShoppingCartException scx),
687 chandransh 437
 
438
	/**
439
	 Validates that:
440
	 1. The checkout timestamp is greater than the updatedOn timestamp.
1466 ankur.sing 441
	 2. All of the lines in the cart are active items.
687 chandransh 442
	 3. The estimate for any of the lines in cart doesn't change.
1466 ankur.sing 443
	 If all three are true, returns empty string; else returns appropriate message.
687 chandransh 444
	*/
1466 ankur.sing 445
	string validateCart(1:i64 cartId) throws (1:ShoppingCartException scex),
552 chandransh 446
 
687 chandransh 447
	/**
448
	 Merges the lines from the first cart into the second cart. Lines with duplicate items are removed.
449
	*/
450
	void mergeCart(1:i64 fromCartId, 2:i64 toCartId),
451
 
452
	/**
453
	 Sets the checkedOutOn timestamp of the cart. Raises an exception if the specified cart can't be found.
454
	*/
455
	bool checkOut(1:i64 cartId) throws (1:ShoppingCartException scex),
456
 
457
	/**
458
	 The second parameter is a map of item ids and their quantities which have been successfully processed.
459
	 This methods removes the specified quantiry of the specified item from the cart.
770 rajveer 460
	 */
461
	bool resetCart(1:i64 cartId, 2:map<i64, double> items) throws (1:ShoppingCartException scex),
462
 
463
	/**
464
	* Widgets 
687 chandransh 465
	*/
770 rajveer 466
	Widget getMyResearch(1:i64 userId) throws (1:WidgetException scx),
467
	bool updateMyResearch(1:i64 userId, 2:i64 itemId) throws (1:WidgetException scx),
468
	void deleteItemFromMyResearch(1:i64 userId, 2:i64 itemId) throws (1:WidgetException scx),
469
 
470
	void updateBrowseHistory(1:i64 userId, 2:i64 itemId),
471
	Widget getBrowseHistory(1:i64 userId) throws (1:WidgetException scx),
1599 ankur.sing 472
	void mergeBrowseHistory(1:i64 fromUserId, 2:i64 toUserId),
687 chandransh 473
 
1599 ankur.sing 474
	/**
475
	Returns number of registered users.
476
	If userType = null, then it returns count of all users, including anonymous
477
	If userType = UserType.ANONYMOUS, then it returns count of anonymous users only
478
	If userType = UserType.USER, then it returns count of non-anonymous users only
479
	*/
1672 ankur.sing 480
	i64 getUserCount(1:UserType userType),
1599 ankur.sing 481
 
1672 ankur.sing 482
	/**
1891 ankur.sing 483
	Returns list of users of type userType who registered between startDate and endDate (both inclusive).
484
	If any of startDate or endDate is -1, then that filter is ignored. 
485
	If userType is null, then returns all the users, irrespective of anonymous flag
486
 
1672 ankur.sing 487
	*/
2642 varun.gupt 488
	list<User> getAllUsers(1:UserType userType, 2:i64 startDate, 3:i64 endDate),
2717 varun.gupt 489
 
770 rajveer 490
	/** Masking right now. May be used later.	
552 chandransh 491
	void addWidget(1:Widget widget) throws (1:WidgetException scx),
492
	void addItemToWidget(1:i64 widget_id, 2:list<i64> items) throws (1:WidgetException scx),
493
	void deleteItemFromWidget(1:i64 widget_id, 2:i64 item_id) throws (1:WidgetException scx),
494
	void updateWidget(1:i64 widgetId, 2:bool enable) throws (1:WidgetException scx),
495
	void updateWidgetItem(1:i64 widgetId, 2:bool enable) throws (1:WidgetException scx),
496
	Widget getWidget(1:WidgetType type, 2:i64 userId, 3:bool onlyEnabled) throws (1:WidgetException scx),
770 rajveer 497
	*/
1599 ankur.sing 498
 
2717 varun.gupt 499
	void putUserNote(1:i64 user_id, 2:i64 entity_id, 3:string slide, 4:string note),
2642 varun.gupt 500
	list<UserNote> getUserNotes(1:i64 user_id, 2:i64 entity_id)
501
}