Spec marked
Handler for the creation of a new request
This commit is contained in:
88
src/main.cpp
88
src/main.cpp
@ -9,6 +9,9 @@
|
||||
using namespace std;
|
||||
|
||||
int main() {
|
||||
Utilities::config configuration;
|
||||
configuration.readConfigFile();
|
||||
|
||||
crow::SimpleApp app;
|
||||
|
||||
// CROW_ROUTE(app, "/test.json")
|
||||
@ -145,21 +148,24 @@ int main() {
|
||||
return page.render(ctx);
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* executes the creation of a new request.
|
||||
*/
|
||||
CROW_ROUTE(app, "/customer/<string>/template/<string>/request/fulfilment").methods("POST"_method)
|
||||
([databaseURI, configuration](const crow::request& postRequest, string freelancerName, string templateName ) {
|
||||
pqxx::connection databaseConnection(databaseURI);
|
||||
string templateHTML = "customer_Freelancer_Template_Request_Fulfilment_ERROR.html";
|
||||
|
||||
Database::requestsItem newRequest;
|
||||
crow::mustache::context ctx;
|
||||
|
||||
|
||||
|
||||
ctx["freelancername"] = freelancerName;
|
||||
ctx["templatename"] = templateName;
|
||||
|
||||
string postRequestBody = postRequest.body.c_str();
|
||||
Utilities::decodeString(postRequestBody);
|
||||
vector<string> splitPostRequestBody = Utilities::splitStringIntoVector(postRequestBody, '&');
|
||||
bool requestFillCompletion = false;
|
||||
for (string item : splitPostRequestBody) {
|
||||
vector<string> splitItem = Utilities::splitStringIntoVector(item, '=');
|
||||
if (splitItem.at(0) == "customername")
|
||||
@ -173,33 +179,55 @@ int main() {
|
||||
if (splitItem.at(0) == "templateID")
|
||||
newRequest.templateID = stoi(splitItem.at(1));
|
||||
}
|
||||
if (newRequest.customerName != "" && (newRequest.customerEmailAddress != "" || newRequest.customerContactDetails != "") && newRequest.requestDescription != "" )
|
||||
requestFillCompletion = true;
|
||||
|
||||
|
||||
|
||||
ctx["templateid"] = newRequest.templateID;
|
||||
|
||||
pqxx::connection databaseConnection(databaseURI);
|
||||
pqxx::result resultTemplate = Database::executePreparedStatement_SELECT_TEMPLATE_FLAT(databaseConnection, newRequest.templateID);
|
||||
if (resultTemplate.size() > 0 && requestFillCompletion) {
|
||||
for (int i = 0; i < resultTemplate.columns(); ++i) {
|
||||
//freelancerid
|
||||
newRequest.freelancerID = stoi(resultTemplate.at(0).at(0).c_str());
|
||||
//currencypreference
|
||||
newRequest.currencyPreference = resultTemplate.at(0).at(1).c_str();
|
||||
//priceupfront
|
||||
newRequest.priceUpFront = resultTemplate.at(0).at(2).c_str();
|
||||
//priceondeliver
|
||||
newRequest.priceOnDeliver = resultTemplate.at(0).at(3).c_str();
|
||||
}
|
||||
|
||||
for (int i = 0; i < resultTemplate.columns(); ++i) {
|
||||
//freelancerid
|
||||
newRequest.freelancerID = stoi(resultTemplate.at(0).at(0).c_str());
|
||||
//currencypreference
|
||||
newRequest.currencyPreference = resultTemplate.at(0).at(1).c_str();
|
||||
//priceupfront
|
||||
newRequest.priceUpFront = resultTemplate.at(0).at(2).c_str();
|
||||
//priceondeliver
|
||||
newRequest.priceOnDeliver = resultTemplate.at(0).at(3).c_str();
|
||||
pqxx::result resultCommissionState = Database::executePreparedStatement_SELECT_FREELANCER_COMMISSION_STATE(databaseConnection, newRequest.freelancerID);
|
||||
|
||||
//the commissionstate
|
||||
if (resultCommissionState.size() == 0 || stoi(resultTemplate.at(0).at(0).c_str()) == 1) {
|
||||
ctx["ERROR_COMMISSIONS_CLOSED"] = true;
|
||||
}
|
||||
else {
|
||||
int resultInsertOperation = Database::executePreparedStatement_INSERT_ITEM_IN_REQUESTS(databaseConnection, newRequest);
|
||||
if (resultInsertOperation == 0) {
|
||||
templateHTML = "customer_Freelancer_Template_Request_Fulfilment.html";
|
||||
pqxx::result resultEmailAddress = Database::executePreparedStatement_SELECT_FREELANCER_EMAIL(databaseConnection, newRequest.freelancerID);
|
||||
if (resultEmailAddress.size() > 0)
|
||||
Utilities::sendEmail(configuration, resultEmailAddress.at(0).at(0).c_str(), "NEW REQUEST", newRequest.toJSONString());
|
||||
}
|
||||
else {
|
||||
ctx["ERROR_UNABLE_TO_CREATE_REQUEST"] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
newRequest.outputItem();
|
||||
else {
|
||||
if (requestFillCompletion)
|
||||
ctx["ERROR_TEMPLATE_NOT_FOUND"] = true;
|
||||
else
|
||||
ctx["REQUEST_NOT_FILLED"] = true;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Utilities::sendEmail(configuration, "testfaewfaw@tempr.email", "NEW REQUEST", "NEW REQUEST");
|
||||
|
||||
string templateHTML = "customer_Freelancer_Template_Request_Fulfilment.html";
|
||||
}
|
||||
auto page = crow::mustache::load(templateHTML);
|
||||
|
||||
return page.render();
|
||||
return page.render(ctx);
|
||||
});
|
||||
|
||||
|
||||
@ -221,7 +249,7 @@ int main() {
|
||||
|
||||
|
||||
|
||||
CROW_ROUTE(app, "/getEntry/<int>")
|
||||
/*CROW_ROUTE(app, "/getEntry/<int>")
|
||||
([databaseURI](int entry) {
|
||||
pqxx::connection databaseConnection(databaseURI);
|
||||
pqxx::result result = Database::executePreparedStatement_SELECT_ITEM_BY_ID(databaseConnection, entry);
|
||||
@ -269,11 +297,11 @@ int main() {
|
||||
if (!jsonBody)
|
||||
return crow::response(crow::status::BAD_REQUEST);
|
||||
|
||||
/*
|
||||
|
||||
* Example CURL to insert into DB:
|
||||
* Price must be delivered as a string to avoid unnecessary conversion to double which would lead to the addition to a database of the value 0.359999999999999999999999999 instead of 0.36.
|
||||
* curl -H "Content-Type: application/json" -H "Accept: application/json" -d '{"customerEmailAddress":"2@testmail.com","freelancer":"nick","templateName":"coding","currencyPreference":"XMR","priceUpFront":"0.36","priceOnDeliver":"0.36","requestDescription":"This is a test","accepted":false,"upFrontInvoiceID":"12424242424","onDeliverInvoiceID":"329532532532","upFrontPaid":false,"onDeliverPaid":false}' http://0.0.0.0:18080/newRequest
|
||||
*/
|
||||
|
||||
Database::requestsItem item;
|
||||
item.insertJsonIntoItem(jsonBody);
|
||||
|
||||
@ -282,7 +310,7 @@ int main() {
|
||||
|
||||
return crow::response(200);
|
||||
});
|
||||
|
||||
*/
|
||||
|
||||
//set the port, set the app to run on multiple threads, and run the app
|
||||
app.port(18080).multithreaded().run();
|
||||
|
Reference in New Issue
Block a user