Implemented Deletion functionality #7

This commit is contained in:
amazing-username
2019-06-07 22:41:31 -04:00
parent 7a6916c3ff
commit 723206019e
10 changed files with 162 additions and 8 deletions
+2
View File
@@ -48,6 +48,7 @@ set(SOURCES
src/Managers/TokenManager.cpp
src/Managers/UserManager.cpp
src/Parsers/APIParser.cpp
src/Syncers/Delete.cpp
src/Syncers/Download.cpp
src/Syncers/Upload.cpp
src/Utilities/Conversions.cpp
@@ -66,6 +67,7 @@ set(HEADERS
src/Models/UploadForm.h
src/Models/User.h
src/Parsers/APIParser.h
src/Syncers/Delete.h
src/Syncers/Download.h
src/Syncers/SyncerBase.h
src/Syncers/Upload.h
+16 -5
View File
@@ -47,6 +47,15 @@ namespace Managers
return action;
}
bool ActionManager::isNumber(string val)
{
return !val.empty() && std::find_if(val.begin(),
val.end(), [](char c)
{
return !std::isdigit(c);
}) == val.end();
}
void ActionManager::initialize()
{
initializeSupportedActions();
@@ -64,7 +73,7 @@ namespace Managers
{
supportedFlags = vector<string>{
"-u", "-p", "-t", "-h", "-s",
"-d"
"-d", "-D"
};
}
void ActionManager::validateAction()
@@ -96,22 +105,23 @@ namespace Managers
for (auto flag : flagVals)
{
if (flag.size() > 3)
//if (flag.size() > 3 || flg.flag.compare("-D"))
if (flag.size() > 3 || isNumber(flag))
{
flg.value = flag;
cout<<"flag value "<<flg.value<<endl;
flags.push_back(flg);
flg = Flags{};
continue;
}
if (std::any_of(supportedFlags.begin(), supportedFlags.end(),
[&](string val)
{
if (val.size() < 3)
{
}
return !val.compare(flag);
}))
{
cout<<"flag "<<flag<<endl;
flg.flag = flag;
}
else
@@ -130,6 +140,7 @@ namespace Managers
for (auto i = 2; true; ++i)
{
string val{*(params + i)};
cout<<"Parsed flag "<<val<<endl;
parsed.push_back(val);
}
}
+2
View File
@@ -18,6 +18,8 @@ namespace Managers
std::vector<Models::Flags> retrieveFlags() const;
std::string retrieveAction() const;
private:
bool isNumber(std::string);
void initialize();
void initializeSupportedActions();
void initializeSupportedFlags();
+32
View File
@@ -5,6 +5,7 @@
#include"Models/API.h"
#include"Models/Song.h"
#include"Parsers/APIParser.h"
#include"Syncers/Delete.h"
#include"Syncers/Upload.h"
#include"TokenManager.h"
@@ -21,6 +22,7 @@ using Models::API;
using Models::Song;
using Parsers::APIParser;
using Models::IcarusAction;
using Syncers::Delete;
using Syncers::Upload;
namespace Managers
@@ -42,6 +44,7 @@ namespace Managers
switch (mapActions[action])
{
case deleteAct:
deleteSong();
break;
case downloadAct:
downloadSong();
@@ -62,6 +65,35 @@ namespace Managers
{"upload", uploadAct}
};
}
void CommitManager::deleteSong()
{
cout<<"Deleting song..."<<endl;
UserManager usrMgr{icaAction};
auto user = usrMgr.retrieveUser();
APIParser apiPrs{icaAction};
auto api = apiPrs.retrieveAPI();
TokenManager tk{user, api};
auto token = tk.requestToken();
Song song{};
for (auto arg : icaAction.flags)
{
auto flag = arg.flag;
auto value = arg.value;
if (flag.compare("-D") == 0)
{
song.id = atoi(value.c_str());
}
}
Delete del{api};
del.deleteSong(token, song);
}
void CommitManager::downloadSong()
{
// TODO: Implement this functionality
+1
View File
@@ -16,6 +16,7 @@ namespace Managers
void commitAction();
private:
void initializeMapActions();
void deleteSong();
void downloadSong();
void uploadSong();
+5
View File
@@ -40,17 +40,22 @@ namespace Managers
usrObj["username"] = user.username;
usrObj["password"] = user.password;
cout<<user.username<<" "<<user.password<<endl;
cout<<"Sending request for token"<<endl;
auto url = api.url + api.endpoint;
cout<<url<<endl;
auto r = cpr::Post(cpr::Url{url},
cpr::Body{usrObj.dump()},
cpr::Header{{"Content-Type", "application/json"}});
cout<<r.text<<endl;
json res = json::parse(r.text);
token.accessToken = res["token"];
token.tokenType = res["token_type"];
//cout<<"status code "<<r.status_code<<endl;
return token;
}
#pragma Functions
+17 -3
View File
@@ -1,5 +1,10 @@
#include"APIParser.h"
#include<iostream>
using std::cout;
using std::endl;
using Models::API;
using Models::IcarusAction;
@@ -24,16 +29,25 @@ namespace Parsers
void APIParser::parseAPI()
{
auto flags = icaAct.flags;
cout<<"Parsing api"<<endl;
for (auto flag : flags)
//for (auto flag : flags)
for (auto i =0; i < flags.size(); ++i)
{
auto arg = flag.flag;
auto value = flag.value;
auto arg = flags[i].flag;
auto value = flags[i].value;
if (arg.compare("-h") == 0)
{
api.url = value;
}
if (value.compare("-h") == 0)
{
api.url = flags[i + 1].value;
}
cout<<"url is "<<api.url<<endl;
}
// TODO: For now I will hard code
+62
View File
@@ -0,0 +1,62 @@
#include"Delete.h"
#include<exception>
#include<iostream>
#include<cpr/cpr.h>
using std::cout;
using std::endl;
using std::exception;
using std::string;
using Models::API;
using Models::Song;
using Models::Token;
namespace Syncers
{
#pragma
Delete::Delete(API api)
{
this->api = api;
this->api.endpoint = "song/data";
}
#pragma Constructors
#pragma
void Delete::deleteSong(const Token token, Song song)
{
try
{
auto url = retrieveUrl(song);
string auth{token.tokenType};
auth.append(" " + token.accessToken);
auto r = cpr::Delete(cpr::Url(url),
cpr::Header{{"authorization", auth}});
auto statusCode = r.status_code;
cout<<"Status code "<<statusCode<<endl;
}
catch (exception e)
{
auto msg = e.what();
cout<<msg<<endl;
}
cout<<"Finished"<<endl;
}
string Delete::retrieveUrl(Song song)
{
string url{api.url + "api/" + api.version + "/" +
api.endpoint + "/"};
url.append(std::to_string(song.id));
cout<<"url "<<url<<endl;
return url;
}
#pragma Functions
}
+23
View File
@@ -0,0 +1,23 @@
#ifndef DELETE_H_
#define DELETE_H_
#include"Models/API.h"
#include"Models/Song.h"
#include"Models/Token.h"
#include"SyncerBase.h"
namespace Syncers
{
class Delete : SyncerBase
{
public:
Delete(Models::API);
void deleteSong(const Models::Token, Models::Song);
private:
std::string retrieveUrl(Models::Song);
};
}
#endif
+2
View File
@@ -1,6 +1,8 @@
#ifndef SYNCERBASE_H_
#define SYNCERBASE_H_
#include<string>
#include"Models/API.h"
namespace Syncers