From ed6f98eb5a7f647db3115c2bf9c67379eeafe6cf Mon Sep 17 00:00:00 2001 From: kdeng00 Date: Mon, 26 Aug 2019 23:10:24 -0400 Subject: [PATCH] Added song delete endpoint --- include/database/coverArtRepository.h | 1 + include/database/songRepository.h | 1 + include/managers/song_manager.h | 1 + src/controller/songController.hpp | 11 +++++++++++ src/database/coverArtRepository.cpp | 9 +++++++++ src/database/songRepository.cpp | 14 +++++++++++++- src/managers/song_manager.cpp | 23 +++++++++++++++++++++++ 7 files changed, 59 insertions(+), 1 deletion(-) diff --git a/include/database/coverArtRepository.h b/include/database/coverArtRepository.h index dd5ad11..adc91eb 100644 --- a/include/database/coverArtRepository.h +++ b/include/database/coverArtRepository.h @@ -14,6 +14,7 @@ public: Cover retrieveRecord(Cover&, coverFilter); + void deleteRecord(const Cover&); void saveRecord(const Cover&); private: Cover parseRecord(MYSQL_RES*); diff --git a/include/database/songRepository.h b/include/database/songRepository.h index 9ce5388..f0747cd 100644 --- a/include/database/songRepository.h +++ b/include/database/songRepository.h @@ -19,6 +19,7 @@ public: Song retrieveRecord(Song&, songFilter); + void deleteRecord(const Song&); void saveRecord(const Song&); private: std::vector parseRecords(MYSQL_RES*); diff --git a/include/managers/song_manager.h b/include/managers/song_manager.h index ed3daca..7e7a76e 100644 --- a/include/managers/song_manager.h +++ b/include/managers/song_manager.h @@ -14,6 +14,7 @@ public: song_manager(std::string&); void saveSong(Song&); + void deleteSong(Song&); static void printSong(const Song&); private: diff --git a/src/controller/songController.hpp b/src/controller/songController.hpp index ae02bc7..18e4efa 100644 --- a/src/controller/songController.hpp +++ b/src/controller/songController.hpp @@ -194,6 +194,17 @@ public: return response; } + ENDPOINT("DELETE", "api/v1/song/data/{id}", songDelete, PATH(Int32, id)) { + + Song song; + song.id = id; + + song_manager sngMgr(exe_path); + sngMgr.deleteSong(song); + + return createResponse(Status::CODE_200, "OK"); + } + #include OATPP_CODEGEN_END(ApiController) private: std::string exe_path; diff --git a/src/database/coverArtRepository.cpp b/src/database/coverArtRepository.cpp index 660e0c5..d2d8455 100644 --- a/src/database/coverArtRepository.cpp +++ b/src/database/coverArtRepository.cpp @@ -45,6 +45,15 @@ Cover coverArtRepository::retrieveRecord(Cover& cov, coverFilter filter = coverF return covDb; } +void coverArtRepository::deleteRecord(const Cover& cov) +{ + auto conn = setup_mysql_connection(); + const std::string query("DELETE FROM CoverArt WHERE CoverArtId = " + std::to_string(cov.id)); + + auto result = perform_mysql_query(conn, query); + + mysql_close(conn); +} void coverArtRepository::saveRecord(const Cover& cov) { diff --git a/src/database/songRepository.cpp b/src/database/songRepository.cpp index 0c09e01..3b569cf 100644 --- a/src/database/songRepository.cpp +++ b/src/database/songRepository.cpp @@ -57,6 +57,18 @@ Song songRepository::retrieveRecord(Song& song, songFilter filter) return song; } +void songRepository::deleteRecord(const Song& song) +{ + auto conn = setup_mysql_connection(); + auto status = 0; + + const std::string query("DELETE FROM Song WHERE SongId = " + std::to_string(song.id)); + + auto result = perform_mysql_query(conn, query); + + mysql_close(conn); +} + void songRepository::saveRecord(const Song& song) { auto conn = setup_mysql_connection(); @@ -64,7 +76,7 @@ void songRepository::saveRecord(const Song& song) MYSQL_STMT *stmt = mysql_stmt_init(conn); - std::string query = "INSERT INTO Song(Title, Artist, Album, Genre, "; + std::string query = "INSERT INTO Song(Title, Artist, Album, Genre, "; query.append("Year, Duration, SongPath, CoverArtId) VALUES(?, ?, ?, ?, ?, ?, ?, ?)"); status = mysql_stmt_prepare(stmt, query.c_str(), query.size()); diff --git a/src/managers/song_manager.cpp b/src/managers/song_manager.cpp index 04f08b9..5ef9391 100644 --- a/src/managers/song_manager.cpp +++ b/src/managers/song_manager.cpp @@ -6,6 +6,7 @@ #include +#include "database/coverArtRepository.h" #include "database/songRepository.h" #include "managers/coverArtManager.h" #include "managers/directory_manager.h" @@ -53,6 +54,28 @@ void song_manager::saveSong(Song& song) songRepo.saveRecord(song); } +void song_manager::deleteSong(Song& song) +{ + coverArtRepository covRepo(exe_path); + songRepository songRepo(exe_path); + + song = songRepo.retrieveRecord(song, songFilter::id); + songRepo.deleteRecord(song); + + Cover cov; + cov.id = song.coverArtId; + cov = covRepo.retrieveRecord(cov, coverFilter::id); + covRepo.deleteRecord(cov); + + + // TODO: only delete coverArt that is not the stock cover + // path + fs::remove(cov.imagePath); + fs::remove(song.songPath); + + // TODO: delete empty directories +} + void song_manager::printSong(const Song& song) { std::cout << std::endl << "song" << std::endl;