00001 /* 00002 * Copyright (c) 2010 Ferruccio Vitale <unixo@devzero.it> 00003 * All rights reserved. 00004 * 00005 * $Id: User.h 75 2010-09-13 09:25:53Z unixo $ 00006 */ 00007 00008 #ifndef __USER_H__ 00009 #define __USER_H__ 00010 00011 #include "common.h" 00012 #include "ManagedObject.h" 00013 #include "Basket.h" 00014 #include "Order.h" 00015 00016 using namespace std; 00017 using namespace mysqlpp; 00018 00032 class User : public ManagedObject 00033 { 00034 public: 00035 User(); 00036 User(Row & aRow); 00037 virtual ~User(); 00038 00039 static User * factory(string aName, string aSurname, string aLogin, 00040 string aPasswd, string anAddress = "", 00041 string aCity = ""); 00042 static User * userByID(int anUid); 00043 static User * login(string username, string passwd); 00044 00045 virtual Basket * getBasket() = 0; 00046 virtual Order * placeOrder() throw (string) = 0; 00047 00048 ulonglong uniqueID(); 00049 string fullName(); 00050 string loginName(); 00051 bool isAdmin(); 00052 string primaryKey(); 00053 00054 friend ostream& operator<<(ostream &, User &); 00055 }; 00056 00057 00069 class AdminUser : public User 00070 { 00071 public: 00072 AdminUser(Row &aRow); 00073 Basket * getBasket() { return NULL; }; 00074 Order * placeOrder() throw (string) { return NULL; }; 00075 vector<User *> & userList(); 00076 bool changeUserPassword(User & anUser, string aPasswd); 00077 void showMonthlyTrend(); 00078 bool deleteProduct(int aPid); 00079 }; 00080 00093 class NormalUser : public User 00094 { 00095 private: 00096 Basket basket; 00097 00098 public: 00099 NormalUser(); 00100 NormalUser(Row &aRow); 00101 ~NormalUser(); 00102 Order * placeOrder() throw (string); 00103 Basket * getBasket() { return &basket; }; 00104 }; 00105 00106 #endif /* __USER_H__ */