From ca1fcb801dde099711c9a62a5f30b2c896b81579 Mon Sep 17 00:00:00 2001 From: kdeng00 Date: Wed, 13 Nov 2019 20:22:29 -0500 Subject: [PATCH] Added functionality to check if the song already exists when uploading --- CMakeLists.txt | 5 +-- include/controller/SongController.hpp | 12 ++++++- include/manager/SongManager.h | 5 +-- include/type/SongUpload.h | 14 ++++++++ src/manager/SongManager.cpp | 47 +++++++++++++++------------ 5 files changed, 56 insertions(+), 27 deletions(-) create mode 100644 include/type/SongUpload.h diff --git a/CMakeLists.txt b/CMakeLists.txt index f2e2609..30fbe47 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,6 +80,7 @@ set(HEADERS include/type/Scopes.h include/type/SongChanged.h include/type/SongFilter.h + include/type/SongUpload.h include/type/UserFilter.h include/type/YearFilter.h include/verify/Initialization.h @@ -122,9 +123,6 @@ set(JWT_CPP_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/jwt-cpp/include ) -set (ORM_DIR - ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/ormpp -) include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup() @@ -136,7 +134,6 @@ include_directories(include ${CPR_INCLUDE_DIRS} ${TAGLIB} ${TAGLIB_HEADERS} ${BC add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/cpr) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/taglib) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/oatpp) -#add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/libbcrypt) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/appsettings.json ${CMAKE_BINARY_DIR}/bin/appsettings.json COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/authcredentials.json ${CMAKE_BINARY_DIR}/bin/authcredentials.json COPYONLY) diff --git a/include/controller/SongController.hpp b/include/controller/SongController.hpp index 41f6211..7c1b08b 100644 --- a/include/controller/SongController.hpp +++ b/include/controller/SongController.hpp @@ -27,6 +27,7 @@ #include "model/Models.h" #include "type/Scopes.h" #include "type/SongFilter.h" +#include "type/SongUpload.h" namespace fs = std::filesystem; @@ -74,7 +75,16 @@ public: sng.data = std::move(data); manager::SongManager songMgr(m_bConf); - songMgr.saveSong(sng); + const auto result = songMgr.saveSong(sng); + if (!result.first) { + switch (result.second) { + case type::SongUpload::AlreadyExist: + return createResponse(Status::CODE_400, "Song already exists"); + default: + break; + } + } + auto songDto = dto::conversion::DtoConversions::toSongDto(sng); return createDtoResponse(Status::CODE_200, songDto); diff --git a/include/manager/SongManager.h b/include/manager/SongManager.h index b50dc64..74d7b21 100644 --- a/include/manager/SongManager.h +++ b/include/manager/SongManager.h @@ -4,12 +4,14 @@ #include #include #include +#include #include #include "dto/SongDto.hpp" #include "model/Models.h" #include "type/SongChanged.h" +#include "type/SongUpload.h" namespace manager { class SongManager @@ -17,14 +19,13 @@ namespace manager { public: SongManager(const model::BinaryPath&); + std::pair saveSong(model::Song&); 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&); - static void printSong(const model::Song&); private: std::map changesInSong(const model::Song&, const model::Song&); diff --git a/include/type/SongUpload.h b/include/type/SongUpload.h new file mode 100644 index 0000000..9307a0a --- /dev/null +++ b/include/type/SongUpload.h @@ -0,0 +1,14 @@ +#ifndef SONGUPLOAD_H_ +#define SONGUPLOAD_H_ + +namespace type +{ + enum class SongUpload + { + Successful = 0, + AlreadyExist = 1, + Failed = 2 + }; +} + +#endif diff --git a/src/manager/SongManager.cpp b/src/manager/SongManager.cpp index a904ad9..27182c0 100644 --- a/src/manager/SongManager.cpp +++ b/src/manager/SongManager.cpp @@ -23,8 +23,33 @@ namespace fs = std::filesystem; namespace manager { SongManager::SongManager(const model::BinaryPath& bConf) - : m_bConf(bConf) -{ } + : m_bConf(bConf) { } + + +std::pair SongManager::saveSong(model::Song& song) +{ + saveSongTemp(song); + utility::MetadataRetriever meta; + auto data = std::move(song.data); + song = meta.retrieveMetadata(song); + song.data = std::move(data); + + database::SongRepository songRepo(m_bConf); + if (songRepo.doesSongExist(song, type::SongFilter::titleAndArtist)) { + std::cout << "\ntitle: " << song.title << "\nartist: " << song.artist << "\n"; + std::cout << "does not exist\n"; + return std::make_pair(false, type::SongUpload::AlreadyExist); + } + + saveMisc(song); + + printSong(song); + + songRepo.saveRecord(song); + song = songRepo.retrieveRecord(song, type::SongFilter::titleAndArtist); + + return std::make_pair(true, type::SongUpload::Successful); +} bool SongManager::didSongChange(const model::Song& updatedSong, @@ -123,24 +148,6 @@ bool SongManager::updateSong(model::Song& updatedSong) } -void SongManager::saveSong(model::Song& song) -{ - saveSongTemp(song); - utility::MetadataRetriever meta; - auto data = std::move(song.data); - song = meta.retrieveMetadata(song); - song.data = std::move(data); - - saveMisc(song); - - printSong(song); - - database::SongRepository songRepo(m_bConf); - songRepo.saveRecord(song); - song = songRepo.retrieveRecord(song, type::SongFilter::titleAndArtist); -} - - void SongManager::printSong(const model::Song& song) { std::cout << "\nsong" << std::endl;