Subversion Repositories SmartDukaan

Rev

Rev 3858 | Rev 4494 | 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
 
3374 rajveer 4
include "GenericService.thrift"
5
 
48 ashish 6
/**
7
Exceptions
8
*/
9
exception AuthenticationException{
10
	1:string message,
11
	2:i32 errorCode
12
}
13
 
14
exception UserContextException{
15
	1:i32 errorCode,
16
	2:string message
17
}
18
 
552 chandransh 19
exception ShoppingCartException{
20
	1:i64 id,
21
	2:string message
22
}
23
 
1116 varun.gupt 24
exception UserCommunicationException{
25
	1:i64 id,
26
	2:string message
27
}
28
 
1995 vikas 29
exception UserAffiliateException{
1848 vikas 30
    1:i64 id,
31
    2:string message
32
}
33
 
1599 ankur.sing 34
enum UserType{
35
	USER = 0,
36
	ANONYMOUS = 1 
37
}
38
 
121 ashish 39
enum AddressType{
130 ashish 40
	WORK = 0,
41
	HOME = 1
48 ashish 42
}
43
 
130 ashish 44
enum PhoneType{
45
	WORK = 0,
46
	HOME = 1,
47
	MOBILE = 2
48
}
49
 
50
enum AccountStatus{
51
	ACTIVE = 0,
52
	DELETED = 1,
53
	INACTIVE = 2,
54
	INCOMPLETE = 3
55
}
56
 
48 ashish 57
/**
1116 varun.gupt 58
Form types for Contact Us form
59
*/
60
enum UserCommunicationType{
61
	RETURN_FORM = 1,
62
	ORDER_CANCELLATION = 2,
63
	DELIVERY_PROBLEM = 3,
64
	PAYMENT_STATUS = 4,
65
	ORDER_STATUS = 5,
66
	PRODUCT_REQUEST = 6,
67
	PRODUCT_QUESTION = 7,
3339 mandeep.dh 68
	OTHER = 8
1116 varun.gupt 69
}
70
 
71
/**
3379 vikas 72
Affiliate track log types for affiliate tracking
73
*/
74
enum TrackLogType{
75
    NEW_REGISTRATION = 1,
76
    PAYMENT_SUCCESS = 2
77
}
78
 
79
/**
121 ashish 80
All the social handles
48 ashish 81
*/
121 ashish 82
struct SocialHandles{
48 ashish 83
	1:string facebook,
84
	2:string opensocial,
85
	3:string twitter
86
}
87
 
121 ashish 88
/**
89
Address
90
*/
91
struct Address{
552 chandransh 92
	1:i64 id,
93
	2:string line1,
94
	3:string line2,
95
	4:string landmark,
96
	5:string city,
97
	6:string state,
98
	7:string pin,
99
	8:string country,
48 ashish 100
	9:bool enabled,
123 ashish 101
	10:AddressType type,
414 ashish 102
	11:i64 addedOn,
103
	12:string name,
104
	13:string phone
48 ashish 105
}
106
 
130 ashish 107
/**Phone
108
**/
109
struct Phone{
110
	1:i64 id,
111
	2:string countryCode,
112
	3:string areaCode,
113
	4:string number,
114
	5:string extension,
552 chandransh 115
	6:PhoneType type
130 ashish 116
}
117
 
121 ashish 118
/**
119
Internal information to be used by system. various variables which aid in serving the user are identified and put here
120
**/
121
struct UserInternalInfo{
48 ashish 122
	1:i64 userId,
121 ashish 123
	2:i64 geoZone,
124
	3:i64 shipmentZone,
48 ashish 125
	4:i64 taxZone,
126
	5:double userRankScore
127
}
128
 
121 ashish 129
/**
130
structure representing timestamp and ip at which user logged into the system
131
**/
132
struct IPMap{
133
	1:i64 timestamp
123 ashish 134
	2:string ip
48 ashish 135
}
136
 
121 ashish 137
/**
138
dynamic user state 
139
**/
140
struct UserState{
48 ashish 141
	1:i64 userId,
552 chandransh 142
	2:i64 lastLogin,
143
	3:i64 lastLogout,
144
	4:i64 emailVerificationSentOn,
145
	5:i64 smsVerificationSentOn,
146
	6:bool isEmailVerified,
48 ashish 147
	7:bool isSMSVerified,
148
	8:i64 activeSince,
552 chandransh 149
	9:list<IPMap> ips,
150
	10:AccountStatus status
48 ashish 151
}
152
 
552 chandransh 153
enum Sex{
154
	MALE,
155
	FEMALE,
156
	WONT_SAY
157
}
158
 
121 ashish 159
/**
552 chandransh 160
The user structure holding the basic information that identifies the user.
121 ashish 161
**/
552 chandransh 162
struct User{
163
	1:i64 userId,
164
	2:string email,
165
	3:string password,
166
	4:string name,
566 rajveer 167
	5:string dateOfBirth,
1116 varun.gupt 168
	6:Sex sex,
3853 mandeep.dh 169
	7:optional string mobileNumber,
552 chandransh 170
	8:SocialHandles socialHandles,
171
	9:list<Address> addresses,
172
	10:i64 defaultAddressId,
173
	11:string communicationEmail,
174
	12:i64 activeCartId,
175
	13:string jsessionId,
2020 vikas 176
	14:bool isAnonymous,
2814 vikas 177
	15:string source,
3499 mandeep.dh 178
	16:i64 sourceStartTime,
179
	17:double trustLevel
48 ashish 180
}
181
 
1116 varun.gupt 182
struct UserCommunication{
183
	1:i64 id,
184
	2:i64 userId,
185
	3:UserCommunicationType communicationType,
186
	4:i64 orderId,
187
	5:string airwaybillNo,
188
	6:string replyTo,
189
	7:string productName,
190
	8:string subject,
191
	9:string message,
1299 varun.gupt 192
	10:i64 communication_timestamp
1116 varun.gupt 193
}
194
 
1848 vikas 195
struct MasterAffiliate{
196
    1:i64 id,
197
    2:string name,
1861 vikas 198
    3:i64 addedOn
1848 vikas 199
}
200
 
201
struct Affiliate{
202
    1:i64 id,
203
    2:string name,
204
    3:string url,
1861 vikas 205
    4:i64 masterAffiliateId,
206
    5:i64 addedOn
1848 vikas 207
}
208
 
209
struct Tracker{
210
    1:i64 id,
1861 vikas 211
    2:i64 affiliateId,
1848 vikas 212
}
213
 
214
struct TrackLog{
215
    1:i64 id,
1861 vikas 216
    2:i64 addedOn,
1995 vikas 217
    3:i64 affiliateId,
1861 vikas 218
    4:i64 userId,
3379 vikas 219
    5:TrackLogType eventType,
1861 vikas 220
    6:string url,
221
    7:string data
1848 vikas 222
}
223
 
2642 varun.gupt 224
struct UserNote{
225
	1:i64 user_id,
226
	2:i64 entity_id,
2717 varun.gupt 227
	3:string slide,
2642 varun.gupt 228
	4:string note
229
}
230
 
552 chandransh 231
//Various statuses for line items
232
enum LineStatus{
233
	LINE_ACTIVE,			//line is active
234
	LINE_DELETED,			//line is deleted
235
	LINE_EXPIRED,			//line is expired, on laspse of fixed amount of time
236
	LINE_COMMITED,			//line is committed, sent for processing.
237
	LINE_COMMIT_FAILED,		//line was committed, but commit failed due to some reason, possibly during cart validation.
238
	LINE_AUTO_DELETED,		//line was auto deleted internally due to some reason(item delisted, price changed etc).
239
}
240
 
241
//Various statuses for Cart
242
enum CartStatus{
243
	ACTIVE,					
244
	INACTIVE,
245
	EXPIRED,
246
	COMMITTED,
247
	COMMIT_FAILED
248
}
249
 
3554 varun.gupt 250
struct Discount{
251
	1:i64 cart_id,
252
    2:i64 item_id,
253
    3:double discount,
254
    4:double quantity
255
}
256
 
552 chandransh 257
struct Line{
646 chandransh 258
	1:i64 cartId,				//identifier
552 chandransh 259
	2:i64 itemId,			//item id added
260
	3:double quantity,		//quantity added 
261
	4:i64 createdOn,		//addition timestamp
262
	5:i64 updatedOn, 		//any updation in quantity or status
263
	6:LineStatus lineStatus,	//current status
1984 varun.gupt 264
	7:i32 estimate,			//delivery estimate in hours
265
	8:double actualPrice,
3554 varun.gupt 266
	9:double discountedPrice,
267
	10:list<Discount> discounts
552 chandransh 268
}
269
 
270
struct Cart{
271
	1:i64 id,				//identifier
272
	2:list<Line> lines,		//list of lines
273
	3:CartStatus status,	//current status
274
	4:i64 createdOn,		//creation timestamp
275
	5:i64 updatedOn,		//time of last update in cart (like addition/deletion/updation of cart items )
687 chandransh 276
	6:i64 checkedOutOn,		//commited timestamp
552 chandransh 277
	7:i64 userId,			//user id to which it belongs
1984 varun.gupt 278
	8:i64 addressId,	    //address on which this will be shipped
279
	9:double totalPrice,
280
	10:double discountedPrice,
281
	11:string couponCode
552 chandransh 282
}
283
 
284
enum WidgetType{
770 rajveer 285
	MY_RESEARCH,
286
	BROWSE_HISTORY
287
}
288
 
2981 rajveer 289
struct UserWidgetItem{
290
	1:i64 userId,
291
	2:i64 widgetId,
292
	3:i64 itemId,
293
	4:i64 addedOn
552 chandransh 294
}
295
 
296
exception WidgetException{
297
	1:i64 id,
298
	2:string message
299
}
300
 
48 ashish 301
/**
1984 varun.gupt 302
Exceptions for Promotion Service
303
*/
304
exception PromotionException{
305
	1:i64 id,
306
	2:string message
307
}
308
 
309
/**
310
Types for Promotion Service
311
*/
312
 
313
struct Promotion{
314
	1:i64 id,
315
	2:string name,
316
	3:string ruleExecutionSrc,
317
	4:i64 startOn,
318
	5:i64 endOn,
319
	6:i64 createdOn
320
}
321
 
322
struct Coupon{
3554 varun.gupt 323
	1:string couponCode,
324
	2:Promotion promotion,
1984 varun.gupt 325
	3:string arguments
326
}
327
 
328
struct PromotionTracking{
329
	1:string couponCode,
330
	2:i64 transactionId,
331
	3:i64 userId,
332
	4:bool appliedOn
333
}
334
 
4189 varun.gupt 335
struct ItemCouponDiscount{
336
	1:i64 itemId,
337
	2:string couponCode,
338
	3:double discount
339
}
340
 
1984 varun.gupt 341
/**
342
Promotion Service
343
*/
3374 rajveer 344
service PromotionService extends GenericService.GenericService{
1984 varun.gupt 345
	void createPromotion(1:string name, 2:string ruleExecutionSrc, 3:i64 startOn, 4:i64 endOn) throws (1:PromotionException pex),
346
	list<Promotion> getAllPromotions() throws (1:PromotionException pex),
347
	Promotion getPromotionById(1:i64 promotionId) throws (1:PromotionException pex),
348
	void generateCouponsForPromotion(1:i64 promotionId, 2:string couponCode) throws (1:PromotionException pex),
349
	Cart applyCoupon(1:string couponCode, 2:i64 cartId) throws (1:PromotionException pex),
350
    void trackCouponUsage(1:string couponCode, 2:i64 transactionId, 3:i64 userId) throws (1:PromotionException pex),
3385 varun.gupt 351
    i64 getCouponUsageCountByUser(1:string couponCode, 2:i64 userId) throws (1:PromotionException pex),
352
 
353
    /**
354
     Returns a list of active coupons
355
     */
356
    list<Coupon> getActiveCoupons() throws (1:PromotionException pex),
357
 
358
    /**
359
     Returns the count of successful payments done using a given coupon
360
     */
361
    i64 getSuccessfulPaymentCountForCoupon(1:string couponCode) throws (1:PromotionException pex),
362
 
363
    /**
364
     Returns the doc string of the rule module
365
     */
4189 varun.gupt 366
    string getRuleDocString(1:string ruleName),
367
 
368
    list<ItemCouponDiscount> getItemDiscountMap(1:list<i64> itemIds) throws (1:PromotionException pex)
1984 varun.gupt 369
}
370
 
371
/**
48 ashish 372
service
373
*/
3374 rajveer 374
service UserContextService extends GenericService.GenericService{
763 rajveer 375
 
552 chandransh 376
	User createAnonymousUser(1:string jsessionId) throws (1:UserContextException ucex),
377
	User getUserById(1:i64 userId) throws (1:UserContextException ucex),
1491 vikas 378
	User getUserByEmail(1:string email) throws (1:UserContextException ucex),
3026 mandeep.dh 379
    User getUserByMobileNumber(1:i64 mobileNumber) 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)
3379 vikas 412
	i64 addTrackLog(1:i64 affiliateId, 2:i64 userId, 3:TrackLogType event, 4:string url, 5:string data, 6:i64 addedOn) throws (1:UserAffiliateException utx)
1995 vikas 413
	TrackLog getTrackLogById(1:i64 id) throws (1:UserAffiliateException utx)
3293 vikas 414
	list<TrackLog> getTrackLogsByAffiliate(1:i64 affiliateId, 2:i64 startDate, 3:i64 endDate) throws (1:UserAffiliateException utx)
1995 vikas 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),
3556 rajveer 425
	string addItemToCart(1:i64 cartId, 2:i64 itemId, 3:i64 quantity, 4:i64 sourceId) throws (1:ShoppingCartException scx),
552 chandransh 426
	void deleteItemFromCart(1:i64 cartId, 2:i64 itemId) throws (1:ShoppingCartException scx),
427
	void changeItemStatus(1:i64 cartId, 2:i64 itemId, 3:LineStatus status) throws (1:ShoppingCartException scx),
577 chandransh 428
	void addAddressToCart(1:i64 cartId, 2:i64 addressId) throws (1:ShoppingCartException scx),
1984 varun.gupt 429
	void applyCouponToCart(1:i64 cartId, 2:string couponCode, 3:double totalPrice, 4:double discountedPrice) throws (1:ShoppingCartException scx),
430
	void removeCoupon(1:i64 cartId) throws (1:ShoppingCartException scx),
687 chandransh 431
 
432
	/**
3554 varun.gupt 433
	Deletes all the discounts associated with the cart
434
	*/
435
	void deleteDiscountsFromCart(1:i64 cartId) throws (1:ShoppingCartException scx),
436
 
437
	/**
438
	Accepts a list of thrift objects of Discount type and saves them
439
	*/
440
	void saveDiscounts(1:list<Discount> discounts) throws (1:ShoppingCartException scx),
441
 
442
	/**
687 chandransh 443
	 Creates a transaction and multiple orders for the given cart. Returns the transaction ID created.
444
	*/
3858 vikas 445
	i64 createOrders(1:i64 cartId, 2:string sessionSource, 3:i64 sessionStartTime, 4:string firstSource, 5:i64 firstSourceTime) throws (1:ShoppingCartException scx),
687 chandransh 446
 
447
	/**
448
	 Validates that:
449
	 1. The checkout timestamp is greater than the updatedOn timestamp.
1466 ankur.sing 450
	 2. All of the lines in the cart are active items.
687 chandransh 451
	 3. The estimate for any of the lines in cart doesn't change.
1466 ankur.sing 452
	 If all three are true, returns empty string; else returns appropriate message.
687 chandransh 453
	*/
3556 rajveer 454
	string validateCart(1:i64 cartId, 2:i64 sourceId) throws (1:ShoppingCartException scex),
552 chandransh 455
 
687 chandransh 456
	/**
457
	 Merges the lines from the first cart into the second cart. Lines with duplicate items are removed.
458
	*/
459
	void mergeCart(1:i64 fromCartId, 2:i64 toCartId),
460
 
461
	/**
462
	 Sets the checkedOutOn timestamp of the cart. Raises an exception if the specified cart can't be found.
463
	*/
464
	bool checkOut(1:i64 cartId) throws (1:ShoppingCartException scex),
465
 
466
	/**
467
	 The second parameter is a map of item ids and their quantities which have been successfully processed.
468
	 This methods removes the specified quantiry of the specified item from the cart.
770 rajveer 469
	 */
470
	bool resetCart(1:i64 cartId, 2:map<i64, double> items) throws (1:ShoppingCartException scex),
471
 
687 chandransh 472
 
1599 ankur.sing 473
	/**
474
	Returns number of registered users.
475
	If userType = null, then it returns count of all users, including anonymous
476
	If userType = UserType.ANONYMOUS, then it returns count of anonymous users only
477
	If userType = UserType.USER, then it returns count of non-anonymous users only
478
	*/
1672 ankur.sing 479
	i64 getUserCount(1:UserType userType),
1599 ankur.sing 480
 
1672 ankur.sing 481
	/**
1891 ankur.sing 482
	Returns list of users of type userType who registered between startDate and endDate (both inclusive).
483
	If any of startDate or endDate is -1, then that filter is ignored. 
484
	If userType is null, then returns all the users, irrespective of anonymous flag
485
 
1672 ankur.sing 486
	*/
2642 varun.gupt 487
	list<User> getAllUsers(1:UserType userType, 2:i64 startDate, 3:i64 endDate),
2717 varun.gupt 488
 
1599 ankur.sing 489
 
2717 varun.gupt 490
	void putUserNote(1:i64 user_id, 2:i64 entity_id, 3:string slide, 4:string note),
2981 rajveer 491
	list<UserNote> getUserNotes(1:i64 user_id, 2:i64 entity_id),
492
 
493
 
494
	/**
495
	Returns list of item ids in myresearch for the user
496
	*/
497
	list<i64> getMyResearchItems(1:i64 userId) throws (1:WidgetException scx),
498
	/**
499
	add item to my research for a user
500
	*/
501
	bool updateMyResearch(1:i64 userId, 2:i64 itemId) throws (1:WidgetException scx),
502
	/**
503
	delete item from my research for a user
504
	*/
505
	void deleteItemFromMyResearch(1:i64 userId, 2:i64 itemId) throws (1:WidgetException scx),
506
	/**
507
	Returns list of item ids in browse history for the user. It will return maximum 10 items.
508
	*/
509
	list<i64> getBrowseHistoryItems(1:i64 userId) throws (1:WidgetException scx),
510
	/**
511
	add item to browse history for a user
512
	*/
3385 varun.gupt 513
	void updateBrowseHistory(1:i64 userId, 2:i64 itemId),
514
 
515
	/**
516
	Returns count of Carts with given coupon applied
517
	*/
3499 mandeep.dh 518
	i64 getCartsWithCouponCount(1:string couponCode),
519
 
520
	/**
521
	 * Updates COD trust level of a user
522
	 */
3530 mandeep.dh 523
	oneway void increaseTrustLevel(1:i64 userId, 2:double trustLevelDelta)
2642 varun.gupt 524
}