Skip to content

Commit 16e5da0

Browse files
committed
Cancel and Order works now
1 parent e885431 commit 16e5da0

10 files changed

+77
-20
lines changed

.vscode/settings.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"files.associations": {
3-
"*.tcc": "cpp"
3+
"*.tcc": "cpp",
4+
"iostream": "cpp"
45
}
56
}

db/database.db

0 Bytes
Binary file not shown.

db/initDB

0 Bytes
Binary file not shown.

db/initDB.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ int main(int argc, char* argv[])
4848
"NAME VARCHAR(50) NOT NULL,"\
4949
"PASSWORD VARCHAR(50) NOT NULL);"\
5050
"CREATE TABLE ORDERS("\
51-
"ORDERID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"\
51+
"ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"\
5252
"MOVIEID INT NOT NULL,"\
5353
"LOCATIONID INT NOT NULL,"\
5454
"CANCELED BIT DEFAULT 0 NOT NULL,"\

src/Database.cpp

+38-3
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Database::~Database()
2222

2323
int Database::countCallback(void *data, int argc, char **argv, char **movieCols)
2424
{
25+
//for (int i = 0 ; i < argc ; i++) cout << argv[i] << endl; // If you want to display output for testing purposes
2526
if (argv[0])
2627
counter++;
2728
return 0;
@@ -267,13 +268,19 @@ void Database::createOrder(string key, string movieID, string locationID){
267268
string
268269
queryCheckMovie = "SELECT ID FROM MOVIES WHERE ID = " + movieID + ";",
269270
queryCheckLocation = "SELECT ID FROM LOCATIONS WHERE ID = " + locationID + ";",
270-
query = "INSERT INTO ORDERS(MOVIEID,LOCATIONID,USERKEY)VALUES('";
271+
queryCheckUser = "SELECT * FROM USERS WHERE KEY = '" + key + "';",
272+
queryCheckOrder = "SELECT * FROM ORDERS WHERE MOVIEID = " + movieID + " AND LOCATIONID = " + locationID + " AND USERKEY = '" + key + "';",
273+
query = "INSERT INTO ORDERS(MOVIEID,LOCATIONID,USERKEY) VALUES (";
271274
query += movieID;
272275
query += ",";
273276
query += locationID;
274277
query += ",'";
275278
query += key;
276-
query += "');";
279+
query += "');";
280+
281+
rc = sqlite3_exec(dbFile, queryCheckUser.c_str(), countCallback, (void *)data, &errMsg);
282+
if (counter == 0){ cout << "{\"status\":\"failure\",\"message\":\"User does not exist!\"}"; return; }
283+
counter = 0;
277284

278285
rc = sqlite3_exec(dbFile, queryCheckMovie.c_str(), countCallback, (void *)data, &errMsg);
279286
if (counter == 0){ cout << "{\"status\":\"failure\",\"message\":\"Movie does not exist!\"}"; return; }
@@ -282,8 +289,36 @@ void Database::createOrder(string key, string movieID, string locationID){
282289
rc = sqlite3_exec(dbFile, queryCheckLocation.c_str(), countCallback, (void *)data, &errMsg);
283290
if (counter == 0){ cout << "{\"status\":\"failure\",\"message\":\"Location does not exist!\"}"; return; }
284291

292+
counter = 0;
293+
rc = sqlite3_exec(dbFile, queryCheckOrder.c_str(), countCallback, (void *)data, &errMsg);
294+
if (counter != 0){ cout << "{\"status\":\"failure\",\"message\":\"Order already exists!\"}"; return; }
295+
296+
rc = sqlite3_exec(dbFile, query.c_str(), countCallback, (void *)data, &errMsg);
297+
298+
299+
if (rc != SQLITE_OK)
300+
sqlite3_free(errMsg);
301+
else cout << "{\"status\":\"success\",\"message\":\"Ticket successfuly ordered\"}" << endl;
302+
}
303+
304+
void Database::cancelOrder(string key, string orderID){
305+
counter = 0;
306+
//Checking Movie exists:
307+
string
308+
queryCheckUser = "SELECT * FROM USERS WHERE KEY = '" + key + "';",
309+
queryCheckOrder = "SELECT * FROM ORDERS WHERE CANCELED = 0 AND USERKEY = '" + key + "' AND ID = " + orderID+";",
310+
query = "UPDATE ORDERS SET CANCELED = 1 WHERE USERKEY='" +key + "' AND ID="+ orderID + ";";
311+
312+
rc = sqlite3_exec(dbFile, queryCheckUser.c_str(), countCallback, (void *)data, &errMsg);
313+
if (counter == 0){ cout << "{\"status\":\"failure\",\"message\":\"User does not exist!\"}"; return; }
314+
counter = 0;
315+
316+
rc = sqlite3_exec(dbFile, queryCheckOrder.c_str(), countCallback, (void *)data, &errMsg);
317+
if (counter == 0){ cout << "{\"status\":\"failure\",\"message\":\"Order is already canceled or does not exist!\"}"; return; }
285318

286319
rc = sqlite3_exec(dbFile, query.c_str(), countCallback, (void *)data, &errMsg);
287320

288-
cout << "Tickets successfuly ordered"; //TEMPORARY , WILL USE ORDER INSTEAD
321+
if (rc != SQLITE_OK)
322+
sqlite3_free(errMsg);
323+
else cout << "{\"status\":\"success\",\"message\":\"Ticket successfuly canceled\"}" << endl;
289324
}

src/Database.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class Database{
5252

5353
void selectOrdersByKey(string);
5454
void createOrder(string,string,string);
55-
55+
void cancelOrder(string,string);
5656
};
5757

5858
#endif

src/RequestManager.cpp

+29-10
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,29 @@ bool RequestManager::parseTwoParam(string stringToParse, string param1, string
2525

2626
int delimIndex = stringToParse.find("&");
2727
if (delimIndex == -1) return false;
28-
28+
2929
var1 = stringToParse.substr(param1.length() + 1, delimIndex - (param1.length() +1));
3030
var2 = stringToParse.substr(delimIndex + param2.length() +2);
3131

3232
return true;
3333
};
3434

35+
bool RequestManager::parseThreeParam(string stringToParse,
36+
string param1, string param2, string param3,
37+
string &var1, string &var2, string &var3){
38+
if (stringToParse.find(param1+"=") != 0) return false;
39+
int delimIndex = stringToParse.find("&");
40+
if (delimIndex == -1) return false;
41+
var1 = stringToParse.substr(param1.length() + 1, delimIndex - (param1.length() +1));
42+
stringToParse = stringToParse.substr(param1.length() + var1.length() + 2);
43+
44+
delimIndex = stringToParse.find("&");
45+
if (delimIndex == -1) return false;
46+
var2 = stringToParse.substr(param2.length() + 1 , delimIndex - (param2.length()+1));
47+
var3 = stringToParse.substr(delimIndex + param3.length() + 2);
48+
return true;
49+
}
50+
3551

3652

3753
void RequestManager::registerAccount(string username, string password){
@@ -52,14 +68,16 @@ void RequestManager::getHistory(string key){
5268
db.selectOrdersByKey(key);
5369
};
5470

55-
void RequestManager::orderTicket(string orderID, string key){
71+
void RequestManager::orderTicket(string key,string movieID, string locationID){
5672

57-
cout << "Ticket Ordered " << orderID + ": " << key;
73+
Database db;
74+
db.createOrder(key,movieID,locationID);
5875
};
5976

60-
void RequestManager::cancelTicket(string ticketID,string key){
77+
void RequestManager::cancelTicket(string key,string orderID){
6178

62-
cout << "Ticket canceled : " << ticketID;
79+
Database db;
80+
db.cancelOrder(key,orderID);
6381
}
6482

6583
void RequestManager::getMoviesList(){
@@ -113,7 +131,6 @@ void RequestManager::parse(const char* stringToParse){
113131
pass,
114132
key,
115133
orderID,
116-
ticketID,
117134
movieID,
118135
movieName,
119136
locationID,
@@ -152,15 +169,17 @@ void RequestManager::parse(const char* stringToParse){
152169

153170
case ORDER:
154171

155-
if (parseTwoParam(parsedString, "orderID", "key",orderID,key))
156-
orderTicket(orderID,key);
172+
if (parseThreeParam(parsedString,
173+
"key","movieID","locationID",
174+
key,movieID,locationID))
175+
orderTicket(key,movieID,locationID);
157176
else cout << defaultResponse;
158177
break;
159178

160179
case CANCEL:
161180

162-
if (parseTwoParam(parsedString, "ticketID", "key", ticketID, key))
163-
cancelTicket(ticketID,key);
181+
if (parseTwoParam(parsedString, "key", "orderID", key, orderID))
182+
cancelTicket(key,orderID);
164183
else cout << defaultResponse;
165184

166185
break;

src/RequestManager.h

+4-3
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ class RequestManager
2121
static void getHistory(string );
2222

2323
////Ticket Management
24-
static void orderTicket(string orderID, string key);
25-
static void cancelTicket(string ticketID,string key);
24+
static void orderTicket(string, string ,string);
25+
static void cancelTicket(string ,string);
2626

2727
////Information
2828
static void getMoviesList();
@@ -33,9 +33,10 @@ class RequestManager
3333
//Parser
3434
static bool parseOneParam(string , string , string&);
3535
static bool parseTwoParam(string , string , string , string&, string&);
36+
static bool parseThreeParam(string , string , string ,string,string&, string&, string&);
3637

3738
public:
38-
static void parse(const char* stringToParse);
39+
static void parse(const char*);
3940
};
4041

4142
#endif

src/dbTest.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
// int main (int argc, char* argv[]){
66
// // RequestManager::parse("/Register/username=Anna&password=Dubi");
7-
// RequestManager::parse("/Movies/");
7+
// //RequestManager::parse("/Order/key=WO1V3RK3YDCBA4321&movieID=1&locationID=1");
8+
// //RequestManager::parse("/Cancel/key=WO1V3RK3YDCBA4321&orderID=2");
89
// // RequestManager::parse("/Movies/ID=2");
910
// // RequestManager::parse("/Locations/");
1011
// // RequestManager::parse("/Locations/city=Tel Aviv");

src/fcgi

4.24 KB
Binary file not shown.

0 commit comments

Comments
 (0)