Added Controller namespace
This commit is contained in:
@@ -14,7 +14,7 @@ namespace Database
|
|||||||
public:
|
public:
|
||||||
base_repository();
|
base_repository();
|
||||||
base_repository(const std::string&);
|
base_repository(const std::string&);
|
||||||
base_repository(const BinaryPath&);
|
base_repository(const Model::BinaryPath&);
|
||||||
protected:
|
protected:
|
||||||
MYSQL* setup_mysql_connection();
|
MYSQL* setup_mysql_connection();
|
||||||
MYSQL* setup_mysql_connection(Model::database_connection);
|
MYSQL* setup_mysql_connection(Model::database_connection);
|
||||||
@@ -24,6 +24,7 @@ namespace Database
|
|||||||
Model::database_connection details;
|
Model::database_connection details;
|
||||||
private:
|
private:
|
||||||
void intitalizeDetails();
|
void intitalizeDetails();
|
||||||
|
void initializeDetails(const Model::BinaryPath&);
|
||||||
|
|
||||||
std::string path;
|
std::string path;
|
||||||
Model::BinaryPath m_binConf;
|
Model::BinaryPath m_binConf;
|
||||||
|
|||||||
@@ -7,10 +7,13 @@
|
|||||||
#include "models/models.h"
|
#include "models/models.h"
|
||||||
#include "types/coverFilter.h"
|
#include "types/coverFilter.h"
|
||||||
|
|
||||||
|
namespace Database
|
||||||
|
{
|
||||||
class coverArtRepository : public base_repository
|
class coverArtRepository : public base_repository
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
coverArtRepository(const std::string&);
|
coverArtRepository(const std::string&);
|
||||||
|
coverArtRepository(const Model::BinaryPath&);
|
||||||
|
|
||||||
Model::Cover retrieveRecord(Model::Cover&, coverFilter);
|
Model::Cover retrieveRecord(Model::Cover&, coverFilter);
|
||||||
|
|
||||||
@@ -19,5 +22,6 @@ public:
|
|||||||
private:
|
private:
|
||||||
Model::Cover parseRecord(MYSQL_RES*);
|
Model::Cover parseRecord(MYSQL_RES*);
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -10,10 +10,13 @@
|
|||||||
#include "models/models.h"
|
#include "models/models.h"
|
||||||
#include "types/songFilter.h"
|
#include "types/songFilter.h"
|
||||||
|
|
||||||
|
namespace Database
|
||||||
|
{
|
||||||
class songRepository : public base_repository
|
class songRepository : public base_repository
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
songRepository(const std::string&);
|
songRepository(const std::string&);
|
||||||
|
songRepository(const Model::BinaryPath&);
|
||||||
|
|
||||||
std::vector<Model::Song> retrieveRecords();
|
std::vector<Model::Song> retrieveRecords();
|
||||||
|
|
||||||
@@ -26,5 +29,6 @@ private:
|
|||||||
|
|
||||||
Model::Song parseRecord(MYSQL_RES*);
|
Model::Song parseRecord(MYSQL_RES*);
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -11,9 +11,11 @@ namespace Manager
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
coverArtManager(const std::string&);
|
coverArtManager(const std::string&);
|
||||||
|
coverArtManager(const Model::BinaryPath& bConf);
|
||||||
|
|
||||||
Model::Cover saveCover(const Model::Song&, std::string&, const std::string&);
|
Model::Cover saveCover(const Model::Song&, std::string&, const std::string&);
|
||||||
private:
|
private:
|
||||||
|
Model::BinaryPath m_bConf;
|
||||||
std::string path;
|
std::string path;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,11 +15,15 @@ namespace Manager
|
|||||||
public:
|
public:
|
||||||
static std::string create_directory_process(Model::Song, const std::string&);
|
static std::string create_directory_process(Model::Song, const std::string&);
|
||||||
static std::string configPath(std::string_view);
|
static std::string configPath(std::string_view);
|
||||||
static std::string contentOfPath(std::string_view);
|
static std::string configPath(const Model::BinaryPath&);
|
||||||
|
static std::string contentOfPath(const std::string&);
|
||||||
|
|
||||||
static nlohmann::json credentialConfigContent(const std::string&);
|
static nlohmann::json credentialConfigContent(const std::string&);
|
||||||
|
static nlohmann::json credentialConfigContent(const Model::BinaryPath&);
|
||||||
static nlohmann::json databaseConfigContent(const std::string&);
|
static nlohmann::json databaseConfigContent(const std::string&);
|
||||||
|
static nlohmann::json databaseConfigContent(const Model::BinaryPath&);
|
||||||
static nlohmann::json pathConfigContent(const std::string&);
|
static nlohmann::json pathConfigContent(const std::string&);
|
||||||
|
static nlohmann::json pathConfigContent(const Model::BinaryPath&);
|
||||||
|
|
||||||
void delete_cover_art_file(const std::string&, const std::string&);
|
void delete_cover_art_file(const std::string&, const std::string&);
|
||||||
static void delete_directories(Model::Song, const std::string&);
|
static void delete_directories(Model::Song, const std::string&);
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ namespace Manager
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
song_manager(std::string&);
|
song_manager(std::string&);
|
||||||
|
song_manager(const Model::BinaryPath&);
|
||||||
|
|
||||||
void saveSong(Model::Song&);
|
void saveSong(Model::Song&);
|
||||||
void deleteSong(Model::Song&);
|
void deleteSong(Model::Song&);
|
||||||
@@ -22,6 +23,7 @@ namespace Manager
|
|||||||
private:
|
private:
|
||||||
void saveSongTemp(Model::Song&);
|
void saveSongTemp(Model::Song&);
|
||||||
|
|
||||||
|
Model::BinaryPath m_bConf;
|
||||||
std::string exe_path;
|
std::string exe_path;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,12 +20,12 @@ namespace Manager
|
|||||||
|
|
||||||
Model::loginResult retrieve_token();
|
Model::loginResult retrieve_token();
|
||||||
Model::loginResult retrieve_token(std::string_view);
|
Model::loginResult retrieve_token(std::string_view);
|
||||||
Model::loginResult retrieve_token(const BinaryPath&);
|
Model::loginResult retrieve_token(const Model::BinaryPath&);
|
||||||
|
|
||||||
bool is_token_valid(std::string&, Scope);
|
bool is_token_valid(std::string&, Scope);
|
||||||
private:
|
private:
|
||||||
Model::auth_credentials parse_auth_credentials(std::string_view);
|
Model::auth_credentials parse_auth_credentials(std::string_view);
|
||||||
Model::auth_credentials parse_auth_credentials(const BinaryPath&);
|
Model::auth_credentials parse_auth_credentials(const Model::BinaryPath&);
|
||||||
|
|
||||||
std::vector<std::string> extract_scopes(const jwt::decoded_jwt&&);
|
std::vector<std::string> extract_scopes(const jwt::decoded_jwt&&);
|
||||||
std::pair<bool, std::vector<std::string>> fetch_auth_header(const std::string&);
|
std::pair<bool, std::vector<std::string>> fetch_auth_header(const std::string&);
|
||||||
|
|||||||
@@ -12,6 +12,8 @@
|
|||||||
#include "../dto/loginResultDto.hpp"
|
#include "../dto/loginResultDto.hpp"
|
||||||
#include "managers/token_manager.h"
|
#include "managers/token_manager.h"
|
||||||
|
|
||||||
|
namespace Controller
|
||||||
|
{
|
||||||
class loginController : public oatpp::web::server::api::ApiController
|
class loginController : public oatpp::web::server::api::ApiController
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -25,13 +27,12 @@ public:
|
|||||||
|
|
||||||
#include OATPP_CODEGEN_BEGIN(ApiController)
|
#include OATPP_CODEGEN_BEGIN(ApiController)
|
||||||
|
|
||||||
ENDPOINT("POST", "/api/v1/login", data, BODY_DTO(userDto::ObjectWrapper, usr))
|
ENDPOINT("POST", "/api/v1/login", data, BODY_DTO(userDto::ObjectWrapper, usr)) {
|
||||||
{
|
|
||||||
OATPP_LOGI("icarus", "logging in");
|
OATPP_LOGI("icarus", "logging in");
|
||||||
|
|
||||||
Manager::token_manager tok;
|
Manager::token_manager tok;
|
||||||
//auto token = tok.retrieve_token(exe_path);
|
//auto token = tok.retrieve_token(exe_path);
|
||||||
auto token = tok.retrieve_token(bconf);
|
auto token = tok.retrieve_token(m_bConf);
|
||||||
|
|
||||||
auto logRes = loginResultDto::createShared();
|
auto logRes = loginResultDto::createShared();
|
||||||
logRes->id = 0; // TODO: change this later on to something meaningful
|
logRes->id = 0; // TODO: change this later on to something meaningful
|
||||||
@@ -49,5 +50,5 @@ private:
|
|||||||
std::string exe_path;
|
std::string exe_path;
|
||||||
Model::BinaryPath m_bConf;
|
Model::BinaryPath m_bConf;
|
||||||
};
|
};
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -27,6 +27,8 @@
|
|||||||
|
|
||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
|
|
||||||
|
namespace Controller
|
||||||
|
{
|
||||||
class songController : public oatpp::web::server::api::ApiController
|
class songController : public oatpp::web::server::api::ApiController
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -34,6 +36,10 @@ public:
|
|||||||
: oatpp::web::server::api::ApiController(objectMapper), m_exe_path(p)
|
: oatpp::web::server::api::ApiController(objectMapper), m_exe_path(p)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
songController(const Model::BinaryPath& bConf, OATPP_COMPONENT(std::shared_ptr<ObjectMapper>, objectMapper))
|
||||||
|
: oatpp::web::server::api::ApiController(objectMapper), m_bConf(bConf)
|
||||||
|
{ }
|
||||||
|
|
||||||
#include OATPP_CODEGEN_BEGIN(ApiController)
|
#include OATPP_CODEGEN_BEGIN(ApiController)
|
||||||
|
|
||||||
// endpoint for uploading a song
|
// endpoint for uploading a song
|
||||||
@@ -69,7 +75,7 @@ public:
|
|||||||
Model::Song sng;
|
Model::Song sng;
|
||||||
sng.data = std::move(data);
|
sng.data = std::move(data);
|
||||||
|
|
||||||
Manager::song_manager s_mgr(m_exe_path);
|
Manager::song_manager s_mgr(m_bConf);
|
||||||
s_mgr.saveSong(sng);
|
s_mgr.saveSong(sng);
|
||||||
|
|
||||||
return createResponse(Status::CODE_200, "OK");
|
return createResponse(Status::CODE_200, "OK");
|
||||||
@@ -80,7 +86,7 @@ public:
|
|||||||
REQUEST(std::shared_ptr<IncomingRequest>, request))
|
REQUEST(std::shared_ptr<IncomingRequest>, request))
|
||||||
{
|
{
|
||||||
std::cout << "starting process of retrieving songs" << std::endl;
|
std::cout << "starting process of retrieving songs" << std::endl;
|
||||||
Database::songRepository songRepo(m_exe_path);
|
Database::songRepository songRepo(m_bConf);
|
||||||
auto songsDb = songRepo.retrieveRecords();
|
auto songsDb = songRepo.retrieveRecords();
|
||||||
auto songs = oatpp::data::mapping::type::List<songDto::ObjectWrapper>::createShared();
|
auto songs = oatpp::data::mapping::type::List<songDto::ObjectWrapper>::createShared();
|
||||||
|
|
||||||
@@ -107,7 +113,7 @@ public:
|
|||||||
ENDPOINT("GET", "/api/v1/song/{id}", songRecord,
|
ENDPOINT("GET", "/api/v1/song/{id}", songRecord,
|
||||||
PATH(Int32, id)) {
|
PATH(Int32, id)) {
|
||||||
|
|
||||||
Database::songRepository songRepo(m_exe_path);
|
Database::songRepository songRepo(m_bConf);
|
||||||
Model::Song songDb;
|
Model::Song songDb;
|
||||||
songDb.id = id;
|
songDb.id = id;
|
||||||
|
|
||||||
@@ -130,7 +136,7 @@ public:
|
|||||||
ENDPOINT("GET", "/api/v1/song/data/{id}", downloadSong,
|
ENDPOINT("GET", "/api/v1/song/data/{id}", downloadSong,
|
||||||
PATH(Int32, id)) {
|
PATH(Int32, id)) {
|
||||||
|
|
||||||
Database::songRepository songRepo(m_exe_path);
|
Database::songRepository songRepo(m_bConf);
|
||||||
Model::Song songDb;
|
Model::Song songDb;
|
||||||
songDb.id = id;
|
songDb.id = id;
|
||||||
songDb = songRepo.retrieveRecord(songDb, songFilter::id);
|
songDb = songRepo.retrieveRecord(songDb, songFilter::id);
|
||||||
@@ -159,7 +165,7 @@ public:
|
|||||||
Model::Song song;
|
Model::Song song;
|
||||||
song.id = id;
|
song.id = id;
|
||||||
|
|
||||||
Manager::song_manager sngMgr(m_exe_path);
|
Manager::song_manager sngMgr(m_bConf);
|
||||||
sngMgr.deleteSong(song);
|
sngMgr.deleteSong(song);
|
||||||
|
|
||||||
return createResponse(Status::CODE_200, "OK");
|
return createResponse(Status::CODE_200, "OK");
|
||||||
@@ -170,7 +176,8 @@ public:
|
|||||||
#include OATPP_CODEGEN_END(ApiController)
|
#include OATPP_CODEGEN_END(ApiController)
|
||||||
private:
|
private:
|
||||||
std::string m_exe_path;
|
std::string m_exe_path;
|
||||||
|
Model::BinaryPath m_bConf;
|
||||||
const long m_dataSize = std::numeric_limits<long long int>::max();
|
const long m_dataSize = std::numeric_limits<long long int>::max();
|
||||||
};
|
};
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -6,15 +6,19 @@
|
|||||||
|
|
||||||
#include "managers/directory_manager.h"
|
#include "managers/directory_manager.h"
|
||||||
|
|
||||||
base_repository::base_repository()
|
Database::base_repository::base_repository()
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
base_repository::base_repository(const std::string& path) : path(path)
|
Database::base_repository::base_repository(const std::string& path) : path(path)
|
||||||
{
|
{
|
||||||
intitalizeDetails();
|
intitalizeDetails();
|
||||||
}
|
}
|
||||||
|
Database::base_repository::base_repository(const Model::BinaryPath& bConf)
|
||||||
|
{
|
||||||
|
initializeDetails(bConf);
|
||||||
|
}
|
||||||
|
|
||||||
MYSQL* base_repository::setup_mysql_connection()
|
MYSQL* Database::base_repository::setup_mysql_connection()
|
||||||
{
|
{
|
||||||
MYSQL *conn = mysql_init(nullptr);
|
MYSQL *conn = mysql_init(nullptr);
|
||||||
|
|
||||||
@@ -25,7 +29,7 @@ MYSQL* base_repository::setup_mysql_connection()
|
|||||||
|
|
||||||
return conn;
|
return conn;
|
||||||
}
|
}
|
||||||
MYSQL* base_repository::setup_mysql_connection(Model::database_connection details)
|
MYSQL* Database::base_repository::setup_mysql_connection(Model::database_connection details)
|
||||||
{
|
{
|
||||||
MYSQL *connection = mysql_init(NULL);
|
MYSQL *connection = mysql_init(NULL);
|
||||||
|
|
||||||
@@ -37,7 +41,7 @@ MYSQL* base_repository::setup_mysql_connection(Model::database_connection detail
|
|||||||
return connection;
|
return connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
MYSQL_RES* base_repository::perform_mysql_query(MYSQL *conn, const std::string& query)
|
MYSQL_RES* Database::base_repository::perform_mysql_query(MYSQL *conn, const std::string& query)
|
||||||
{
|
{
|
||||||
// send the query to the database
|
// send the query to the database
|
||||||
if (mysql_query(conn, query.c_str()))
|
if (mysql_query(conn, query.c_str()))
|
||||||
@@ -49,7 +53,7 @@ MYSQL_RES* base_repository::perform_mysql_query(MYSQL *conn, const std::string&
|
|||||||
return mysql_use_result(conn);
|
return mysql_use_result(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void base_repository::intitalizeDetails()
|
void Database::base_repository::intitalizeDetails()
|
||||||
{
|
{
|
||||||
auto databaseConfig = Manager::directory_manager::databaseConfigContent(path);
|
auto databaseConfig = Manager::directory_manager::databaseConfigContent(path);
|
||||||
|
|
||||||
@@ -58,3 +62,12 @@ void base_repository::intitalizeDetails()
|
|||||||
details.server = databaseConfig["server"].get<std::string>();
|
details.server = databaseConfig["server"].get<std::string>();
|
||||||
details.username = databaseConfig["username"].get<std::string>();
|
details.username = databaseConfig["username"].get<std::string>();
|
||||||
}
|
}
|
||||||
|
void Database::base_repository::initializeDetails(const Model::BinaryPath& bConf)
|
||||||
|
{
|
||||||
|
auto databaseConfig = Manager::directory_manager::databaseConfigContent(bConf);
|
||||||
|
|
||||||
|
details.database = databaseConfig["database"].get<std::string>();
|
||||||
|
details.server = databaseConfig["server"].get<std::string>();
|
||||||
|
details.username = databaseConfig["username"].get<std::string>();
|
||||||
|
details.password = databaseConfig["password"].get<std::string>();
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,10 +5,13 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
coverArtRepository::coverArtRepository(const std::string& path) : base_repository(path)
|
Database::coverArtRepository::coverArtRepository(const std::string& path) : base_repository(path)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
Model::Cover coverArtRepository::retrieveRecord(Model::Cover& cov, coverFilter filter = coverFilter::id)
|
Database::coverArtRepository::coverArtRepository(const Model::BinaryPath& bConf) : base_repository(bConf)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
Model::Cover Database::coverArtRepository::retrieveRecord(Model::Cover& cov, coverFilter filter = coverFilter::id)
|
||||||
{
|
{
|
||||||
std::stringstream qry;
|
std::stringstream qry;
|
||||||
auto conn = setup_mysql_connection();
|
auto conn = setup_mysql_connection();
|
||||||
@@ -45,7 +48,7 @@ Model::Cover coverArtRepository::retrieveRecord(Model::Cover& cov, coverFilter f
|
|||||||
return covDb;
|
return covDb;
|
||||||
}
|
}
|
||||||
|
|
||||||
void coverArtRepository::deleteRecord(const Model::Cover& cov)
|
void Database::coverArtRepository::deleteRecord(const Model::Cover& cov)
|
||||||
{
|
{
|
||||||
auto conn = setup_mysql_connection();
|
auto conn = setup_mysql_connection();
|
||||||
const std::string query("DELETE FROM CoverArt WHERE CoverArtId = " + std::to_string(cov.id));
|
const std::string query("DELETE FROM CoverArt WHERE CoverArtId = " + std::to_string(cov.id));
|
||||||
@@ -55,7 +58,7 @@ void coverArtRepository::deleteRecord(const Model::Cover& cov)
|
|||||||
mysql_close(conn);
|
mysql_close(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void coverArtRepository::saveRecord(const Model::Cover& cov)
|
void Database::coverArtRepository::saveRecord(const Model::Cover& cov)
|
||||||
{
|
{
|
||||||
auto conn = setup_mysql_connection();
|
auto conn = setup_mysql_connection();
|
||||||
|
|
||||||
@@ -93,7 +96,7 @@ void coverArtRepository::saveRecord(const Model::Cover& cov)
|
|||||||
std::cout << "done" << std::endl;
|
std::cout << "done" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
Model::Cover coverArtRepository::parseRecord(MYSQL_RES *results)
|
Model::Cover Database::coverArtRepository::parseRecord(MYSQL_RES *results)
|
||||||
{
|
{
|
||||||
std::cout << "parsing record" << std::endl;
|
std::cout << "parsing record" << std::endl;
|
||||||
Model::Cover cov;
|
Model::Cover cov;
|
||||||
|
|||||||
@@ -7,10 +7,13 @@
|
|||||||
|
|
||||||
#include "types/songFilter.h"
|
#include "types/songFilter.h"
|
||||||
|
|
||||||
songRepository::songRepository(const std::string& path) : base_repository(path)
|
Database::songRepository::songRepository(const std::string& path) : base_repository(path)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
std::vector<Model::Song> songRepository::retrieveRecords()
|
Database::songRepository::songRepository(const Model::BinaryPath& bConf) : base_repository(bConf)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
std::vector<Model::Song> Database::songRepository::retrieveRecords()
|
||||||
{
|
{
|
||||||
auto conn = setup_mysql_connection();
|
auto conn = setup_mysql_connection();
|
||||||
const std::string query = "SELECT * FROM Song";
|
const std::string query = "SELECT * FROM Song";
|
||||||
@@ -24,7 +27,7 @@ std::vector<Model::Song> songRepository::retrieveRecords()
|
|||||||
return songs;
|
return songs;
|
||||||
}
|
}
|
||||||
|
|
||||||
Model::Song songRepository::retrieveRecord(Model::Song& song, songFilter filter)
|
Model::Song Database::songRepository::retrieveRecord(Model::Song& song, songFilter filter)
|
||||||
{
|
{
|
||||||
std::stringstream qry;
|
std::stringstream qry;
|
||||||
auto conn = setup_mysql_connection();
|
auto conn = setup_mysql_connection();
|
||||||
@@ -57,7 +60,7 @@ Model::Song songRepository::retrieveRecord(Model::Song& song, songFilter filter)
|
|||||||
return song;
|
return song;
|
||||||
}
|
}
|
||||||
|
|
||||||
void songRepository::deleteRecord(const Model::Song& song)
|
void Database::songRepository::deleteRecord(const Model::Song& song)
|
||||||
{
|
{
|
||||||
auto conn = setup_mysql_connection();
|
auto conn = setup_mysql_connection();
|
||||||
auto status = 0;
|
auto status = 0;
|
||||||
@@ -69,7 +72,7 @@ void songRepository::deleteRecord(const Model::Song& song)
|
|||||||
mysql_close(conn);
|
mysql_close(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void songRepository::saveRecord(const Model::Song& song)
|
void Database::songRepository::saveRecord(const Model::Song& song)
|
||||||
{
|
{
|
||||||
auto conn = setup_mysql_connection();
|
auto conn = setup_mysql_connection();
|
||||||
auto status = 0;
|
auto status = 0;
|
||||||
@@ -148,7 +151,7 @@ void songRepository::saveRecord(const Model::Song& song)
|
|||||||
std::cout << "done inserting song record" << std::endl;
|
std::cout << "done inserting song record" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Model::Song> songRepository::parseRecords(MYSQL_RES* results)
|
std::vector<Model::Song> Database::songRepository::parseRecords(MYSQL_RES* results)
|
||||||
{
|
{
|
||||||
auto fieldNum = mysql_num_fields(results);
|
auto fieldNum = mysql_num_fields(results);
|
||||||
auto numRows = mysql_num_rows(results);
|
auto numRows = mysql_num_rows(results);
|
||||||
@@ -203,7 +206,7 @@ std::vector<Model::Song> songRepository::parseRecords(MYSQL_RES* results)
|
|||||||
return songs;
|
return songs;
|
||||||
}
|
}
|
||||||
|
|
||||||
Model::Song songRepository::parseRecord(MYSQL_RES* results)
|
Model::Song Database::songRepository::parseRecord(MYSQL_RES* results)
|
||||||
{
|
{
|
||||||
Model::Song song;
|
Model::Song song;
|
||||||
auto fieldNum = mysql_num_fields(results);
|
auto fieldNum = mysql_num_fields(results);
|
||||||
|
|||||||
+3
-3
@@ -24,8 +24,8 @@ void run(const Model::BinaryPath& bConf)
|
|||||||
|
|
||||||
OATPP_COMPONENT(std::shared_ptr<oatpp::web::server::HttpRouter>, router);
|
OATPP_COMPONENT(std::shared_ptr<oatpp::web::server::HttpRouter>, router);
|
||||||
|
|
||||||
auto logController = std::make_shared<loginController>(bConf);
|
auto logController = std::make_shared<Controller::loginController>(bConf);
|
||||||
auto sngController = std::make_shared<songController>(bConf);
|
auto sngController = std::make_shared<Controller::songController>(bConf);
|
||||||
logController->addEndpointsToRouter(router);
|
logController->addEndpointsToRouter(router);
|
||||||
sngController->addEndpointsToRouter(router);
|
sngController->addEndpointsToRouter(router);
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ int main(int argc, char **argv)
|
|||||||
oatpp::base::Environment::init();
|
oatpp::base::Environment::init();
|
||||||
//const std::string working_path = argv[0];
|
//const std::string working_path = argv[0];
|
||||||
Model::BinaryPath bConf;
|
Model::BinaryPath bConf;
|
||||||
bConf.path = argv[0]
|
bConf.path = argv[0];
|
||||||
|
|
||||||
//run(working_path);
|
//run(working_path);
|
||||||
run(bConf);
|
run(bConf);
|
||||||
|
|||||||
@@ -7,6 +7,9 @@
|
|||||||
Manager::coverArtManager::coverArtManager(const std::string& configPath) : path(configPath)
|
Manager::coverArtManager::coverArtManager(const std::string& configPath) : path(configPath)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
Manager::coverArtManager::coverArtManager(const Model::BinaryPath& bConf) : m_bConf(bConf)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
Model::Cover Manager::coverArtManager::saveCover(const Model::Song& song, std::string& rootPath, const std::string& stockCoverPath)
|
Model::Cover Manager::coverArtManager::saveCover(const Model::Song& song, std::string& rootPath, const std::string& stockCoverPath)
|
||||||
{
|
{
|
||||||
@@ -16,7 +19,7 @@ Model::Cover Manager::coverArtManager::saveCover(const Model::Song& song, std::s
|
|||||||
cov = meta.update_cover_art(song, cov, stockCoverPath);
|
cov = meta.update_cover_art(song, cov, stockCoverPath);
|
||||||
cov.songTitle = song.title;
|
cov.songTitle = song.title;
|
||||||
|
|
||||||
Database::coverArtRepository covRepo(path);
|
Database::coverArtRepository covRepo(m_bConf);
|
||||||
std::cout << "saving record to the database" << std::endl;
|
std::cout << "saving record to the database" << std::endl;
|
||||||
covRepo.saveRecord(cov);
|
covRepo.saveRecord(cov);
|
||||||
std::cout << "retrieving record from database" << std::endl;
|
std::cout << "retrieving record from database" << std::endl;
|
||||||
|
|||||||
@@ -41,10 +41,13 @@ std::string Manager::directory_manager::configPath(std::string_view path)
|
|||||||
{
|
{
|
||||||
return fs::canonical(path).parent_path().string();
|
return fs::canonical(path).parent_path().string();
|
||||||
}
|
}
|
||||||
std::string Manager::directory_manager::contentOfPath(std::string_view path)
|
std::string Manager::directory_manager::configPath(const Model::BinaryPath& bConf)
|
||||||
{
|
{
|
||||||
std::string configPath(path);
|
return fs::canonical(bConf.path).parent_path().string();
|
||||||
std::fstream a(configPath, std::ios::in);
|
}
|
||||||
|
std::string Manager::directory_manager::contentOfPath(const std::string& path)
|
||||||
|
{
|
||||||
|
std::fstream a(path, std::ios::in);
|
||||||
std::stringstream s;
|
std::stringstream s;
|
||||||
s << a.rdbuf();
|
s << a.rdbuf();
|
||||||
a.close();
|
a.close();
|
||||||
@@ -59,6 +62,13 @@ nlohmann::json Manager::directory_manager::credentialConfigContent(const std::st
|
|||||||
|
|
||||||
return nlohmann::json::parse(contentOfPath(path));
|
return nlohmann::json::parse(contentOfPath(path));
|
||||||
}
|
}
|
||||||
|
nlohmann::json Manager::directory_manager::credentialConfigContent(const Model::BinaryPath& bConf)
|
||||||
|
{
|
||||||
|
auto path = configPath(bConf);
|
||||||
|
path.append("/authcredentials.json");
|
||||||
|
|
||||||
|
return nlohmann::json::parse(contentOfPath(path));
|
||||||
|
}
|
||||||
nlohmann::json Manager::directory_manager::databaseConfigContent(const std::string& exe_path)
|
nlohmann::json Manager::directory_manager::databaseConfigContent(const std::string& exe_path)
|
||||||
{
|
{
|
||||||
auto path = configPath(exe_path);
|
auto path = configPath(exe_path);
|
||||||
@@ -66,6 +76,13 @@ nlohmann::json Manager::directory_manager::databaseConfigContent(const std::stri
|
|||||||
|
|
||||||
return nlohmann::json::parse(contentOfPath(path));
|
return nlohmann::json::parse(contentOfPath(path));
|
||||||
}
|
}
|
||||||
|
nlohmann::json Manager::directory_manager::databaseConfigContent(const Model::BinaryPath& bConf)
|
||||||
|
{
|
||||||
|
auto path = configPath(bConf);
|
||||||
|
path.append("/database.json");
|
||||||
|
|
||||||
|
return nlohmann::json::parse(contentOfPath(path));
|
||||||
|
}
|
||||||
nlohmann::json Manager::directory_manager::pathConfigContent(const std::string& exe_path)
|
nlohmann::json Manager::directory_manager::pathConfigContent(const std::string& exe_path)
|
||||||
{
|
{
|
||||||
auto path = configPath(exe_path);
|
auto path = configPath(exe_path);
|
||||||
@@ -73,6 +90,13 @@ nlohmann::json Manager::directory_manager::pathConfigContent(const std::string&
|
|||||||
|
|
||||||
return nlohmann::json::parse(contentOfPath(path));
|
return nlohmann::json::parse(contentOfPath(path));
|
||||||
}
|
}
|
||||||
|
nlohmann::json Manager::directory_manager::pathConfigContent(const Model::BinaryPath& bConf)
|
||||||
|
{
|
||||||
|
auto path = configPath(bConf);
|
||||||
|
path.append("/paths.json");
|
||||||
|
|
||||||
|
return nlohmann::json::parse(contentOfPath(path));
|
||||||
|
}
|
||||||
|
|
||||||
void Manager::directory_manager::delete_cover_art_file(const std::string& cov_path, const std::string& stock_cover_path)
|
void Manager::directory_manager::delete_cover_art_file(const std::string& cov_path, const std::string& stock_cover_path)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,6 +18,10 @@ Manager::song_manager::song_manager(std::string& x_path)
|
|||||||
: exe_path(x_path)
|
: exe_path(x_path)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
Manager::song_manager::song_manager(const Model::BinaryPath& bConf)
|
||||||
|
: m_bConf(bConf)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
void Manager::song_manager::saveSong(Model::Song& song)
|
void Manager::song_manager::saveSong(Model::Song& song)
|
||||||
{
|
{
|
||||||
@@ -27,12 +31,12 @@ void Manager::song_manager::saveSong(Model::Song& song)
|
|||||||
song = meta.retrieve_metadata(song.songPath);
|
song = meta.retrieve_metadata(song.songPath);
|
||||||
song.data = std::move(data);
|
song.data = std::move(data);
|
||||||
|
|
||||||
coverArtManager covMgr(exe_path);
|
coverArtManager covMgr(m_bConf);
|
||||||
auto pathConfigContent = Manager::directory_manager::pathConfigContent(exe_path);
|
auto pathConfigContent = Manager::directory_manager::pathConfigContent(m_bConf);
|
||||||
auto coverRootPath = pathConfigContent["cover_root_path"].get<std::string>();
|
auto coverRootPath = pathConfigContent["cover_root_path"].get<std::string>();
|
||||||
auto musicRootPath = pathConfigContent["root_music_path"].get<std::string>();
|
auto musicRootPath = pathConfigContent["root_music_path"].get<std::string>();
|
||||||
|
|
||||||
auto stockCoverPath = Manager::directory_manager::configPath(exe_path);
|
auto stockCoverPath = Manager::directory_manager::configPath(m_bConf);
|
||||||
stockCoverPath.append("/CoverArt.png");
|
stockCoverPath.append("/CoverArt.png");
|
||||||
|
|
||||||
auto cov = covMgr.saveCover(song, coverRootPath, stockCoverPath);
|
auto cov = covMgr.saveCover(song, coverRootPath, stockCoverPath);
|
||||||
@@ -49,14 +53,14 @@ void Manager::song_manager::saveSong(Model::Song& song)
|
|||||||
|
|
||||||
printSong(song);
|
printSong(song);
|
||||||
|
|
||||||
Database::songRepository songRepo(exe_path);
|
Database::songRepository songRepo(m_bConf);
|
||||||
songRepo.saveRecord(song);
|
songRepo.saveRecord(song);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Manager::song_manager::deleteSong(Model::Song& song)
|
void Manager::song_manager::deleteSong(Model::Song& song)
|
||||||
{
|
{
|
||||||
Database::coverArtRepository covRepo(exe_path);
|
Database::coverArtRepository covRepo(m_bConf);
|
||||||
Database::songRepository songRepo(exe_path);
|
Database::songRepository songRepo(m_bConf);
|
||||||
|
|
||||||
song = songRepo.retrieveRecord(song, songFilter::id);
|
song = songRepo.retrieveRecord(song, songFilter::id);
|
||||||
songRepo.deleteRecord(song);
|
songRepo.deleteRecord(song);
|
||||||
@@ -66,7 +70,7 @@ void Manager::song_manager::deleteSong(Model::Song& song)
|
|||||||
cov = covRepo.retrieveRecord(cov, coverFilter::id);
|
cov = covRepo.retrieveRecord(cov, coverFilter::id);
|
||||||
covRepo.deleteRecord(cov);
|
covRepo.deleteRecord(cov);
|
||||||
|
|
||||||
auto paths = Manager::directory_manager::pathConfigContent(exe_path);
|
auto paths = Manager::directory_manager::pathConfigContent(m_bConf);
|
||||||
const auto coverArtPath = paths["cover_root_path"].get<std::string>();
|
const auto coverArtPath = paths["cover_root_path"].get<std::string>();
|
||||||
std::string stockCoverArtPath = coverArtPath;
|
std::string stockCoverArtPath = coverArtPath;
|
||||||
stockCoverArtPath.append("CoverArt.png");
|
stockCoverArtPath.append("CoverArt.png");
|
||||||
@@ -100,7 +104,7 @@ void Manager::song_manager::printSong(const Model::Song& song)
|
|||||||
|
|
||||||
void Manager::song_manager::saveSongTemp(Model::Song& song)
|
void Manager::song_manager::saveSongTemp(Model::Song& song)
|
||||||
{
|
{
|
||||||
auto config = Manager::directory_manager::pathConfigContent(exe_path);
|
auto config = Manager::directory_manager::pathConfigContent(m_bConf);
|
||||||
|
|
||||||
auto tmp_song = config["temp_root_path"].get<std::string>();
|
auto tmp_song = config["temp_root_path"].get<std::string>();
|
||||||
std::random_device dev;
|
std::random_device dev;
|
||||||
|
|||||||
@@ -57,6 +57,34 @@ Model::loginResult Manager::token_manager::retrieve_token(std::string_view path)
|
|||||||
|
|
||||||
return lr;
|
return lr;
|
||||||
}
|
}
|
||||||
|
Model::loginResult Manager::token_manager::retrieve_token(const Model::BinaryPath& bConf)
|
||||||
|
{
|
||||||
|
auto cred = parse_auth_credentials(bConf);
|
||||||
|
|
||||||
|
nlohmann::json reqObj;
|
||||||
|
reqObj["client_id"] = cred.client_id;
|
||||||
|
reqObj["client_secret"] = cred.client_secret;
|
||||||
|
reqObj["audience"] = cred.api_identifier;
|
||||||
|
reqObj["grant_type"] = "client_credentials";
|
||||||
|
|
||||||
|
std::string uri{cred.uri};
|
||||||
|
uri.append("/");
|
||||||
|
uri.append(cred.endpoint);
|
||||||
|
|
||||||
|
auto r = cpr::Post(cpr::Url{uri},
|
||||||
|
cpr::Body{reqObj.dump()},
|
||||||
|
cpr::Header{{"Content-Type", "application/json"},
|
||||||
|
{"Connection", "keep-alive"}});
|
||||||
|
|
||||||
|
auto post_res = nlohmann::json::parse(r.text);
|
||||||
|
|
||||||
|
Model::loginResult lr;
|
||||||
|
lr.access_token = post_res["access_token"].get<std::string>();
|
||||||
|
lr.token_type = post_res["token_type"].get<std::string>();
|
||||||
|
lr.expiration = post_res["expires_in"].get<int>();
|
||||||
|
|
||||||
|
return lr;
|
||||||
|
}
|
||||||
|
|
||||||
bool Manager::token_manager::is_token_valid(std::string& auth, Scope scope)
|
bool Manager::token_manager::is_token_valid(std::string& auth, Scope scope)
|
||||||
{
|
{
|
||||||
@@ -104,10 +132,10 @@ Model::auth_credentials Manager::token_manager::parse_auth_credentials(std::stri
|
|||||||
|
|
||||||
return auth;
|
return auth;
|
||||||
}
|
}
|
||||||
Model::auth_credentials Manager::token_manager::parse_auth_credentials(const BinaryPath& bConf)
|
Model::auth_credentials Manager::token_manager::parse_auth_credentials(const Model::BinaryPath& bConf)
|
||||||
{
|
{
|
||||||
auto exePath = Manager::directory_manager::configPath(bConf);
|
auto exePath = Manager::directory_manager::configPath(bConf);
|
||||||
exe_path.append("/auth_credentials.json");
|
exePath.append("/auth_credentials.json");
|
||||||
|
|
||||||
auto con = Manager::directory_manager::credentialConfigContent(exePath);
|
auto con = Manager::directory_manager::credentialConfigContent(exePath);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user