00001 /* 00002 * Copyright (c) 2010 Ferruccio Vitale <unixo@devzero.it> 00003 * All rights reserved. 00004 * 00005 * $Id: User.h 72 2010-08-03 16:43:52Z 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 00029 class User : public ManagedObject 00030 { 00031 public: 00032 User(); 00033 User(Row & aRow); 00034 virtual ~User(); 00035 00036 static User * factory(string aName, string aSurname, string aLogin, 00037 string aPasswd, string anAddress = "", 00038 string aCity = ""); 00039 static User * userByID(int anUid); 00040 static User * login(string username, string passwd); 00041 00042 virtual Basket * getBasket() = 0; 00043 virtual Order * placeOrder() throw (string) = 0; 00044 00045 ulonglong uniqueID(); 00046 string fullName(); 00047 bool isAdmin(); 00048 string primaryKey(); 00049 00050 friend ostream& operator<<(ostream &, User &); 00051 }; 00052 00053 00055 00056 00057 class AdminUser : public User 00058 { 00059 public: 00060 AdminUser(Row &aRow); 00061 Basket * getBasket() { return NULL; }; 00062 Order * placeOrder() throw (string) { return NULL; }; 00063 vector<User *> & userList(); 00064 bool changeUserPassword(User & anUser, string aPasswd); 00065 void showMonthlyTrend(); 00066 }; 00067 00069 00070 class NormalUser : public User 00071 { 00072 private: 00073 Basket basket; 00074 00075 public: 00076 NormalUser(); 00077 NormalUser(Row &aRow); 00078 ~NormalUser(); 00079 Order * placeOrder() throw (string); 00080 Basket * getBasket() { return &basket; }; 00081 }; 00082 00083 00084 #endif /* __USER_H__ */