Changes to response returns when song does not exist. The cause of a segmentation fault
This commit is contained in:
@@ -117,8 +117,9 @@ public:
|
|||||||
database::SongRepository songRepo(m_bConf);
|
database::SongRepository songRepo(m_bConf);
|
||||||
model::Song songDb(id);
|
model::Song songDb(id);
|
||||||
|
|
||||||
OATPP_ASSERT_HTTP(songRepo.doesSongExist(songDb, type::SongFilter::id) , Status::CODE_403,
|
if (!songRepo.doesSongExist(songDb, type::SongFilter::id)) {
|
||||||
"song does not exist");
|
return songDoesNotExist();
|
||||||
|
}
|
||||||
|
|
||||||
std::cout << "song exists" << std::endl;
|
std::cout << "song exists" << std::endl;
|
||||||
songDb = songRepo.retrieveRecord(songDb, type::SongFilter::id);
|
songDb = songRepo.retrieveRecord(songDb, type::SongFilter::id);
|
||||||
@@ -138,6 +139,10 @@ public:
|
|||||||
|
|
||||||
database::SongRepository songRepo(m_bConf);
|
database::SongRepository songRepo(m_bConf);
|
||||||
model::Song songDb(id);
|
model::Song songDb(id);
|
||||||
|
if (!songRepo.doesSongExist(songDb, type::SongFilter::id)) {
|
||||||
|
return songDoesNotExist();
|
||||||
|
}
|
||||||
|
|
||||||
songDb = songRepo.retrieveRecord(songDb, type::SongFilter::id);
|
songDb = songRepo.retrieveRecord(songDb, type::SongFilter::id);
|
||||||
|
|
||||||
auto rawSong = oatpp::base::StrBuffer::loadFromFile(songDb.songPath.c_str());
|
auto rawSong = oatpp::base::StrBuffer::loadFromFile(songDb.songPath.c_str());
|
||||||
@@ -158,9 +163,12 @@ public:
|
|||||||
manager::TokenManager tok;
|
manager::TokenManager tok;
|
||||||
OATPP_ASSERT_HTTP(tok.isTokenValid(auth, type::Scope::updateSong), Status::CODE_403, "Not allowed");
|
OATPP_ASSERT_HTTP(tok.isTokenValid(auth, type::Scope::updateSong), Status::CODE_403, "Not allowed");
|
||||||
|
|
||||||
auto updatedSong = manager::SongManager::songDtoConv(songDto);
|
auto updatedSong = dto::conversion::DtoConversions::toSong(songDto);
|
||||||
manager::SongManager songMgr(m_bConf);
|
manager::SongManager songMgr(m_bConf);
|
||||||
songMgr.updateSong(updatedSong);
|
auto result = songMgr.updateSong(updatedSong);
|
||||||
|
if (!result) {
|
||||||
|
return songDoesNotExist();
|
||||||
|
}
|
||||||
|
|
||||||
return createResponse(Status::CODE_200, "OK");
|
return createResponse(Status::CODE_200, "OK");
|
||||||
}
|
}
|
||||||
@@ -177,7 +185,10 @@ public:
|
|||||||
model::Song song(id);
|
model::Song song(id);
|
||||||
|
|
||||||
manager::SongManager sngMgr(m_bConf);
|
manager::SongManager sngMgr(m_bConf);
|
||||||
sngMgr.deleteSong(song);
|
auto result = sngMgr.deleteSong(song);
|
||||||
|
if (!result) {
|
||||||
|
return songDoesNotExist();
|
||||||
|
}
|
||||||
|
|
||||||
return createResponse(Status::CODE_200, "OK");
|
return createResponse(Status::CODE_200, "OK");
|
||||||
}
|
}
|
||||||
@@ -193,6 +204,10 @@ public:
|
|||||||
|
|
||||||
database::SongRepository songRepo(m_bConf);
|
database::SongRepository songRepo(m_bConf);
|
||||||
model::Song songDb(id);
|
model::Song songDb(id);
|
||||||
|
if (!songRepo.doesSongExist(songDb, type::SongFilter::id)) {
|
||||||
|
return songDoesNotExist();
|
||||||
|
}
|
||||||
|
|
||||||
songDb = songRepo.retrieveRecord(songDb, type::SongFilter::id);
|
songDb = songRepo.retrieveRecord(songDb, type::SongFilter::id);
|
||||||
|
|
||||||
oatpp::data::v_io_size dSize = 1024;
|
oatpp::data::v_io_size dSize = 1024;
|
||||||
@@ -209,6 +224,12 @@ public:
|
|||||||
|
|
||||||
#include OATPP_CODEGEN_END(ApiController)
|
#include OATPP_CODEGEN_END(ApiController)
|
||||||
private:
|
private:
|
||||||
|
std::shared_ptr<oatpp::web::protocol::http::outgoing::Response>
|
||||||
|
songDoesNotExist() {
|
||||||
|
|
||||||
|
return createResponse(Status::CODE_404, "Song not found");
|
||||||
|
}
|
||||||
|
|
||||||
std::string m_exe_path;
|
std::string m_exe_path;
|
||||||
|
|
||||||
model::BinaryPath m_bConf;
|
model::BinaryPath m_bConf;
|
||||||
|
|||||||
@@ -21,12 +21,10 @@ namespace manager {
|
|||||||
|
|
||||||
bool didSongChange(const model::Song&, const model::Song&);
|
bool didSongChange(const model::Song&, const model::Song&);
|
||||||
bool requiresFilesystemChange(const model::Song&, const model::Song&);
|
bool requiresFilesystemChange(const model::Song&, const model::Song&);
|
||||||
|
bool deleteSong(model::Song&);
|
||||||
|
bool updateSong(model::Song&);
|
||||||
|
|
||||||
void saveSong(model::Song&);
|
void saveSong(model::Song&);
|
||||||
void deleteSong(model::Song&);
|
|
||||||
void updateSong(model::Song&);
|
|
||||||
|
|
||||||
static model::Song songDtoConv(dto::SongDto::ObjectWrapper&);
|
|
||||||
|
|
||||||
static void printSong(const model::Song&);
|
static void printSong(const model::Song&);
|
||||||
private:
|
private:
|
||||||
|
|||||||
+23
-38
@@ -68,31 +68,13 @@ bool manager::SongManager::requiresFilesystemChange(const model::Song& updatedSo
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool manager::SongManager::deleteSong(model::Song& song)
|
||||||
void manager::SongManager::saveSong(model::Song& song)
|
|
||||||
{
|
|
||||||
saveSongTemp(song);
|
|
||||||
utility::MetadataRetriever meta;
|
|
||||||
auto data = std::move(song.data);
|
|
||||||
song = meta.retrieveMetadata(song.songPath);
|
|
||||||
song.data = std::move(data);
|
|
||||||
|
|
||||||
saveMisc(song);
|
|
||||||
|
|
||||||
printSong(song);
|
|
||||||
|
|
||||||
database::SongRepository songRepo(m_bConf);
|
|
||||||
songRepo.saveRecord(song);
|
|
||||||
song = songRepo.retrieveRecord(song, type::SongFilter::title);
|
|
||||||
}
|
|
||||||
|
|
||||||
void manager::SongManager::deleteSong(model::Song& song)
|
|
||||||
{
|
{
|
||||||
database::SongRepository songRepo(m_bConf);
|
database::SongRepository songRepo(m_bConf);
|
||||||
|
|
||||||
if (!songRepo.doesSongExist(song, type::SongFilter::id)) {
|
if (!songRepo.doesSongExist(song, type::SongFilter::id)) {
|
||||||
std::cout << "song does not exist" << std::endl;
|
std::cout << "song does not exist" << std::endl;
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
song = songRepo.retrieveRecord(song, type::SongFilter::id);
|
song = songRepo.retrieveRecord(song, type::SongFilter::id);
|
||||||
@@ -103,25 +85,24 @@ void manager::SongManager::deleteSong(model::Song& song)
|
|||||||
|
|
||||||
if (!deleted) {
|
if (!deleted) {
|
||||||
std::cout << "song not deleted from databases" << std::endl;
|
std::cout << "song not deleted from databases" << std::endl;
|
||||||
return;
|
return deleted;
|
||||||
}
|
}
|
||||||
deleteMisc(song);
|
deleteMisc(song);
|
||||||
|
|
||||||
fs::remove(song.songPath);
|
fs::remove(song.songPath);
|
||||||
manager::DirectoryManager::deleteDirectories(song, paths["root_music_path"].get<std::string>());
|
manager::DirectoryManager::deleteDirectories(song, paths["root_music_path"].get<std::string>());
|
||||||
|
return deleted;
|
||||||
}
|
}
|
||||||
|
|
||||||
void manager::SongManager::updateSong(model::Song& updatedSong)
|
bool manager::SongManager::updateSong(model::Song& updatedSong)
|
||||||
{
|
{
|
||||||
database::SongRepository songRepo(m_bConf);
|
database::SongRepository songRepo(m_bConf);
|
||||||
model::Song currSong(updatedSong.id);
|
model::Song currSong(updatedSong.id);
|
||||||
|
|
||||||
OATPP_ASSERT_HTTP(songRepo.doesSongExist(currSong, type::SongFilter::id) , oatpp::web::protocol::http::Status::CODE_404, "song does not exist");
|
|
||||||
|
|
||||||
currSong = songRepo.retrieveRecord(currSong, type::SongFilter::id);
|
currSong = songRepo.retrieveRecord(currSong, type::SongFilter::id);
|
||||||
if (!didSongChange(updatedSong, currSong)) {
|
if (!didSongChange(updatedSong, currSong)) {
|
||||||
std::cout << "no change to the song" << std::endl;
|
std::cout << "no change to the song" << std::endl;
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
assignMiscId(updatedSong, currSong);
|
assignMiscId(updatedSong, currSong);
|
||||||
@@ -140,22 +121,26 @@ void manager::SongManager::updateSong(model::Song& updatedSong)
|
|||||||
printSong(currSong);
|
printSong(currSong);
|
||||||
|
|
||||||
updateMisc(changes, updatedSong, currSong);
|
updateMisc(changes, updatedSong, currSong);
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
model::Song manager::SongManager::songDtoConv(dto::SongDto::ObjectWrapper& songDto)
|
|
||||||
{
|
|
||||||
std::cout << "coverting dto::SongDto to model::Song" << std::endl;
|
|
||||||
model::Song song;
|
|
||||||
song.id = songDto->id;
|
|
||||||
song.title = (songDto->title == nullptr) ? "" : songDto->title->c_str();
|
|
||||||
song.album = (songDto->album == nullptr) ? "" : songDto->album->c_str();
|
|
||||||
song.artist = (songDto->artist == nullptr) ? "" : songDto->artist->c_str();
|
|
||||||
song.genre = (songDto->genre == nullptr) ? "" : songDto->genre->c_str();
|
|
||||||
song.year = (songDto->year.getPtr() == nullptr) ? 0 : songDto->year->getValue();
|
|
||||||
song.track = (songDto->track.getPtr() == nullptr) ? 0 : songDto->track->getValue();
|
|
||||||
song.disc = (songDto->disc.getPtr() == nullptr) ? 0 : songDto->disc->getValue();
|
|
||||||
|
|
||||||
return song;
|
void manager::SongManager::saveSong(model::Song& song)
|
||||||
|
{
|
||||||
|
saveSongTemp(song);
|
||||||
|
utility::MetadataRetriever meta;
|
||||||
|
auto data = std::move(song.data);
|
||||||
|
song = meta.retrieveMetadata(song.songPath);
|
||||||
|
song.data = std::move(data);
|
||||||
|
|
||||||
|
saveMisc(song);
|
||||||
|
|
||||||
|
printSong(song);
|
||||||
|
|
||||||
|
database::SongRepository songRepo(m_bConf);
|
||||||
|
songRepo.saveRecord(song);
|
||||||
|
song = songRepo.retrieveRecord(song, type::SongFilter::title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user