diff --git a/include/controller/SongController.hpp b/include/controller/SongController.hpp index 4514e2c..41f6211 100644 --- a/include/controller/SongController.hpp +++ b/include/controller/SongController.hpp @@ -117,8 +117,9 @@ public: database::SongRepository songRepo(m_bConf); model::Song songDb(id); - OATPP_ASSERT_HTTP(songRepo.doesSongExist(songDb, type::SongFilter::id) , Status::CODE_403, - "song does not exist"); + if (!songRepo.doesSongExist(songDb, type::SongFilter::id)) { + return songDoesNotExist(); + } std::cout << "song exists" << std::endl; songDb = songRepo.retrieveRecord(songDb, type::SongFilter::id); @@ -138,6 +139,10 @@ public: database::SongRepository songRepo(m_bConf); model::Song songDb(id); + if (!songRepo.doesSongExist(songDb, type::SongFilter::id)) { + return songDoesNotExist(); + } + songDb = songRepo.retrieveRecord(songDb, type::SongFilter::id); auto rawSong = oatpp::base::StrBuffer::loadFromFile(songDb.songPath.c_str()); @@ -158,9 +163,12 @@ public: manager::TokenManager tok; 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); - songMgr.updateSong(updatedSong); + auto result = songMgr.updateSong(updatedSong); + if (!result) { + return songDoesNotExist(); + } return createResponse(Status::CODE_200, "OK"); } @@ -177,7 +185,10 @@ public: model::Song song(id); manager::SongManager sngMgr(m_bConf); - sngMgr.deleteSong(song); + auto result = sngMgr.deleteSong(song); + if (!result) { + return songDoesNotExist(); + } return createResponse(Status::CODE_200, "OK"); } @@ -193,6 +204,10 @@ public: database::SongRepository songRepo(m_bConf); model::Song songDb(id); + if (!songRepo.doesSongExist(songDb, type::SongFilter::id)) { + return songDoesNotExist(); + } + songDb = songRepo.retrieveRecord(songDb, type::SongFilter::id); oatpp::data::v_io_size dSize = 1024; @@ -209,6 +224,12 @@ public: #include OATPP_CODEGEN_END(ApiController) private: + std::shared_ptr + songDoesNotExist() { + + return createResponse(Status::CODE_404, "Song not found"); + } + std::string m_exe_path; model::BinaryPath m_bConf; diff --git a/include/manager/SongManager.h b/include/manager/SongManager.h index f35103c..22fa2d6 100644 --- a/include/manager/SongManager.h +++ b/include/manager/SongManager.h @@ -21,12 +21,10 @@ namespace manager { bool didSongChange(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 deleteSong(model::Song&); - void updateSong(model::Song&); - - static model::Song songDtoConv(dto::SongDto::ObjectWrapper&); static void printSong(const model::Song&); private: diff --git a/src/manager/SongManager.cpp b/src/manager/SongManager.cpp index 36baffe..6498252 100644 --- a/src/manager/SongManager.cpp +++ b/src/manager/SongManager.cpp @@ -68,31 +68,13 @@ bool manager::SongManager::requiresFilesystemChange(const model::Song& updatedSo return false; } - -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) +bool manager::SongManager::deleteSong(model::Song& song) { database::SongRepository songRepo(m_bConf); if (!songRepo.doesSongExist(song, type::SongFilter::id)) { std::cout << "song does not exist" << std::endl; - return; + return false; } song = songRepo.retrieveRecord(song, type::SongFilter::id); @@ -103,25 +85,24 @@ void manager::SongManager::deleteSong(model::Song& song) if (!deleted) { std::cout << "song not deleted from databases" << std::endl; - return; + return deleted; } deleteMisc(song); fs::remove(song.songPath); manager::DirectoryManager::deleteDirectories(song, paths["root_music_path"].get()); + return deleted; } -void manager::SongManager::updateSong(model::Song& updatedSong) +bool manager::SongManager::updateSong(model::Song& updatedSong) { database::SongRepository songRepo(m_bConf); 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); if (!didSongChange(updatedSong, currSong)) { std::cout << "no change to the song" << std::endl; - return; + return false; } assignMiscId(updatedSong, currSong); @@ -140,22 +121,26 @@ void manager::SongManager::updateSong(model::Song& updatedSong) printSong(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); }