Subversion Repositories SmartDukaan

Rev

Rev 1672 | Rev 1861 | 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
 
1848 vikas 27
exception UserTrackerException{
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,
166
	14:bool isAnonymous
48 ashish 167
}
168
 
1116 varun.gupt 169
struct UserCommunication{
170
	1:i64 id,
171
	2:i64 userId,
172
	3:UserCommunicationType communicationType,
173
	4:i64 orderId,
174
	5:string airwaybillNo,
175
	6:string replyTo,
176
	7:string productName,
177
	8:string subject,
178
	9:string message,
1299 varun.gupt 179
	10:i64 communication_timestamp
1116 varun.gupt 180
}
181
 
1848 vikas 182
struct MasterAffiliate{
183
    1:i64 id,
184
    2:string name,
185
}
186
 
187
struct Affiliate{
188
    1:i64 id,
189
    2:string name,
190
    3:string url,
191
    4:i64 masterAffiliateId
192
}
193
 
194
struct Tracker{
195
    1:i64 id,
196
    2:i64 affiliateId
197
}
198
 
199
struct TrackLog{
200
    1:i64 id,
201
    2:i64 trackerId,
202
    3:i64 userId,
203
    4:string event,
204
    5:string url,
205
    6:string data
206
}
207
 
552 chandransh 208
//Various statuses for line items
209
enum LineStatus{
210
	LINE_ACTIVE,			//line is active
211
	LINE_DELETED,			//line is deleted
212
	LINE_EXPIRED,			//line is expired, on laspse of fixed amount of time
213
	LINE_COMMITED,			//line is committed, sent for processing.
214
	LINE_COMMIT_FAILED,		//line was committed, but commit failed due to some reason, possibly during cart validation.
215
	LINE_AUTO_DELETED,		//line was auto deleted internally due to some reason(item delisted, price changed etc).
216
}
217
 
218
//Various statuses for Cart
219
enum CartStatus{
220
	ACTIVE,					
221
	INACTIVE,
222
	EXPIRED,
223
	COMMITTED,
224
	COMMIT_FAILED
225
}
226
 
227
struct Line{
646 chandransh 228
	1:i64 cartId,				//identifier
552 chandransh 229
	2:i64 itemId,			//item id added
230
	3:double quantity,		//quantity added 
231
	4:i64 createdOn,		//addition timestamp
232
	5:i64 updatedOn, 		//any updation in quantity or status
233
	6:LineStatus lineStatus,	//current status
613 chandransh 234
	7:i32 estimate			//delivery estimate in hours
552 chandransh 235
}
236
 
237
struct Cart{
238
	1:i64 id,				//identifier
239
	2:list<Line> lines,		//list of lines
240
	3:CartStatus status,	//current status
241
	4:i64 createdOn,		//creation timestamp
242
	5:i64 updatedOn,		//time of last update in cart (like addition/deletion/updation of cart items )
687 chandransh 243
	6:i64 checkedOutOn,		//commited timestamp
552 chandransh 244
	7:i64 userId,			//user id to which it belongs
613 chandransh 245
	8:i64 addressId,	    //address on which this will be shipped			
552 chandransh 246
}
247
 
248
enum WidgetType{
770 rajveer 249
	MY_RESEARCH,
250
	BROWSE_HISTORY
251
}
252
 
253
/** Not used right now, will decide later
254
enum WidgetType{
255
	ACCESSORIES,
256
	RATINGS,
552 chandransh 257
	SIMILAR_ITEMS,
258
	RECOMMENDED_ITEMS,
770 rajveer 259
	DEAL_PROMOTIONS,
260
 
552 chandransh 261
	MY_RESEARCH,
770 rajveer 262
	BROWSE_HISTORY
552 chandransh 263
}
264
 
265
enum RatingType{
266
	SHOP2020,
267
	AMAZON,
268
	USER_ALL,
269
	USER_CURRENT
270
}
271
 
272
struct RatingsWidget{
273
	1:i64 catalog_item_id,
274
	2:map<RatingType,double> ratings,
275
	3:i64 user_id
276
}
770 rajveer 277
*/
552 chandransh 278
struct WidgetItem{
279
	1:i64 id,
280
	2:i64 item_id,
770 rajveer 281
	3:bool enabled,
282
	4:i64 timestamp
552 chandransh 283
}
284
 
285
struct Widget{
286
	1:i64 id,
287
	2:WidgetType type,
770 rajveer 288
	3:i64 user_id,
552 chandransh 289
	4:list<WidgetItem> items,
290
	5:bool enabled,
770 rajveer 291
	6:string name
552 chandransh 292
}
293
 
294
exception WidgetException{
295
	1:i64 id,
296
	2:string message
297
}
298
 
48 ashish 299
/**
300
service
301
*/
302
service UserContextService{
763 rajveer 303
	/**
304
	* For closing the open session in sqlalchemy
305
	*/
306
	void closeSession(),
307
 
552 chandransh 308
	User createAnonymousUser(1:string jsessionId) throws (1:UserContextException ucex),
309
	User getUserById(1:i64 userId) throws (1:UserContextException ucex),
1491 vikas 310
	User getUserByEmail(1:string email) throws (1:UserContextException ucex),
552 chandransh 311
	User createUser(1:User user) throws (1:UserContextException ucex),
312
	User updateUser(1:User user) throws (1:UserContextException ucex),
313
	bool deleteUser(1:i64 userId) throws (1:UserContextException ucex),
314
	UserState getUserState(1:i64 userId) throws (1:UserContextException ucex),
315
	User authenticateUser(1:string email, 2:string password) throws (1:AuthenticationException auex),
316
	bool userExists(1:string email) throws (1:UserContextException ucx),
566 rajveer 317
	i64 addAddressForUser(1:i64 userId, 2:Address address, 3:bool setDefault)throws (1:UserContextException ucx),
48 ashish 318
	bool removeAddressForUser(1:i64 userid, 2:i64 addressId)throws (1:UserContextException ucx),
319
	bool setUserAsLoggedIn(1:i64 userId, 2:i64 timestamp)throws (1:UserContextException ucx),
320
	bool setUserAsLoggedOut(1:i64 userid, 2:i64 timestamp)throws (1:UserContextException ucx),
506 rajveer 321
	bool setDefaultAddress(1:i64 userid, 2:i64 addressId)throws (1:UserContextException ucx),
592 rajveer 322
	bool updatePassword(1:i64 userid, 2:string oldPassword, 3:string newPassword)throws (1:UserContextException ucx),
895 rajveer 323
	bool forgotPassword(1:string email, 2:string newPassword)throws (1:UserContextException ucx),
592 rajveer 324
	list<Address> getAllAddressesForUser(1:i64 userId)throws (1:UserContextException ucx),
325
	i64 getDefaultAddressId(1:i64 userId)throws (1:UserContextException ucx),
783 rajveer 326
	string getDefaultPincode(1:i64 userId)throws (1:UserContextException ucx),
552 chandransh 327
 
1167 varun.gupt 328
	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 329
	UserCommunication getUserCommunicationById(1:i64 id) throws (1:UserCommunicationException ucx)
330
	list<UserCommunication> getUserCommunicationByUser(1:i64 userId) throws (1:UserCommunicationException ucx)
331
	list<UserCommunication> getAllUserCommunications() throws (1:UserCommunicationException ucx)
1116 varun.gupt 332
 
1848 vikas 333
	MasterAffiliate createMasterAffiliate(1:string name) throws (1:UserTrackerException utx)
334
	MasterAffiliate getMasterAffiliateById(1:i64 id) throws (1:UserTrackerException utx)
335
    MasterAffiliate getMasterAffiliateByName(1:string name) throws (1:UserTrackerException utx)
336
	Affiliate createAffiliate(1:string name, 2:string url, 3:i64 masterAffiliateId) throws (1:UserTrackerException utx)
337
	Affiliate getAffiliateById(1:i64 id) throws (1:UserTrackerException utx)
338
	Affiliate getAffiliateByName(1:string name) throws (1:UserTrackerException utx)
339
	list<Affiliate> getAffiliatesByMasterAffiliate(1:i64 id) throws (1:UserTrackerException utx)
340
	Tracker createTracker(1:i64 affiliateId) throws (1:UserTrackerException utx)
341
	Tracker getTrackerById(1:i64 trackerId) throws (1:UserTrackerException utx)
342
	list<Tracker> getTrackersByAffiliate(1:i64 affiliateId) throws (1:UserTrackerException utx)
343
	i64 addTrackLog(1:i64 trackerId, 2:i64 userId, 3:string event, 4:string url, 5:string data) throws (1:UserTrackerException utx)
344
	TrackLog getTrackLogById(1:i64 id) throws (1:UserTrackerException utx)
345
	list<TrackLog> getTrackLogsByTracker(1:i64 trackerId) throws (1:UserTrackerException utx)
346
	list<TrackLog> getTrackLogsByUser(1:i64 userId) throws (1:UserTrackerException utx)
347
	list<TrackLog> getTrackLogs(1:i64 trackerId, 2:i64 userId, 3:string event, 4:string url) throws (1:UserTrackerException utx)
348
 
552 chandransh 349
	i64 createCart(1:i64 userId) throws (1:ShoppingCartException scx),
350
	Cart getCurrentCart(1:i64 userId) throws (1:ShoppingCartException scx),	
351
	Cart getCart(1:i64 cartId) throws (1:ShoppingCartException scx),
352
	list<Cart> getCartsForUser(1:i64 userId, 2:CartStatus status) throws (1:ShoppingCartException scx),
353
	list<Cart> getCartsByStatus(1:CartStatus status) throws (1:ShoppingCartException scx),
354
	list<Cart> getCartsByTime(1:i64 from_time, 2:i64 to_time, 3:CartStatus status) throws (1:ShoppingCartException scx),
355
	void changeCartStatus(1:i64 cartId, 2:CartStatus status) throws (1:ShoppingCartException scx),
356
	void addItemToCart(1:i64 cartId, 2:i64 itemId, 3:i64 quantity) throws (1:ShoppingCartException scx),
357
	void deleteItemFromCart(1:i64 cartId, 2:i64 itemId) throws (1:ShoppingCartException scx),
358
	void changeQuantity(1:i64 cartId, 2:i64 itemId, 3:i64 quantity) throws (1:ShoppingCartException scx),
359
	void changeItemStatus(1:i64 cartId, 2:i64 itemId, 3:LineStatus status) throws (1:ShoppingCartException scx),
577 chandransh 360
	void addAddressToCart(1:i64 cartId, 2:i64 addressId) throws (1:ShoppingCartException scx),
687 chandransh 361
 
362
	/**
363
	 Creates a transaction and multiple orders for the given cart. Returns the transaction ID created.
364
	*/
365
	i64 createOrders(1:i64 cartId) throws (1:ShoppingCartException scx),
366
 
367
	/**
368
	 Validates that:
369
	 1. The checkout timestamp is greater than the updatedOn timestamp.
1466 ankur.sing 370
	 2. All of the lines in the cart are active items.
687 chandransh 371
	 3. The estimate for any of the lines in cart doesn't change.
1466 ankur.sing 372
	 If all three are true, returns empty string; else returns appropriate message.
687 chandransh 373
	*/
1466 ankur.sing 374
	string validateCart(1:i64 cartId) throws (1:ShoppingCartException scex),
552 chandransh 375
 
687 chandransh 376
	/**
377
	 Merges the lines from the first cart into the second cart. Lines with duplicate items are removed.
378
	*/
379
	void mergeCart(1:i64 fromCartId, 2:i64 toCartId),
380
 
381
	/**
382
	 Sets the checkedOutOn timestamp of the cart. Raises an exception if the specified cart can't be found.
383
	*/
384
	bool checkOut(1:i64 cartId) throws (1:ShoppingCartException scex),
385
 
386
	/**
387
	 The second parameter is a map of item ids and their quantities which have been successfully processed.
388
	 This methods removes the specified quantiry of the specified item from the cart.
770 rajveer 389
	 */
390
	bool resetCart(1:i64 cartId, 2:map<i64, double> items) throws (1:ShoppingCartException scex),
391
 
392
	/**
393
	* Widgets 
687 chandransh 394
	*/
770 rajveer 395
	Widget getMyResearch(1:i64 userId) throws (1:WidgetException scx),
396
	bool updateMyResearch(1:i64 userId, 2:i64 itemId) throws (1:WidgetException scx),
397
	void deleteItemFromMyResearch(1:i64 userId, 2:i64 itemId) throws (1:WidgetException scx),
398
 
399
	void updateBrowseHistory(1:i64 userId, 2:i64 itemId),
400
	Widget getBrowseHistory(1:i64 userId) throws (1:WidgetException scx),
1599 ankur.sing 401
	void mergeBrowseHistory(1:i64 fromUserId, 2:i64 toUserId),
687 chandransh 402
 
1599 ankur.sing 403
	/**
404
	Returns number of registered users.
405
	If userType = null, then it returns count of all users, including anonymous
406
	If userType = UserType.ANONYMOUS, then it returns count of anonymous users only
407
	If userType = UserType.USER, then it returns count of non-anonymous users only
408
	*/
1672 ankur.sing 409
	i64 getUserCount(1:UserType userType),
1599 ankur.sing 410
 
1672 ankur.sing 411
	/**
412
	Returns list of users of type userType. If userType is null, then returns all the users.
413
	*/
414
	list<User> getAllUsers(1: UserType userType)
1599 ankur.sing 415
 
1672 ankur.sing 416
 
770 rajveer 417
	/** Masking right now. May be used later.	
552 chandransh 418
	void addWidget(1:Widget widget) throws (1:WidgetException scx),
419
	void addItemToWidget(1:i64 widget_id, 2:list<i64> items) throws (1:WidgetException scx),
420
	void deleteItemFromWidget(1:i64 widget_id, 2:i64 item_id) throws (1:WidgetException scx),
421
	void updateWidget(1:i64 widgetId, 2:bool enable) throws (1:WidgetException scx),
422
	void updateWidgetItem(1:i64 widgetId, 2:bool enable) throws (1:WidgetException scx),
423
	Widget getWidget(1:WidgetType type, 2:i64 userId, 3:bool onlyEnabled) throws (1:WidgetException scx),
770 rajveer 424
	*/
1599 ankur.sing 425
 
426
 
48 ashish 427
}
428
 
1672 ankur.sing 429