From 0a97f695e373ae0c6a156e0ba1387a2e3ddc5be3 Mon Sep 17 00:00:00 2001 From: kdeng00 Date: Wed, 11 Sep 2019 22:12:41 -0400 Subject: [PATCH] Working on updating a song's metadata --- include/controller/SongController.hpp | 15 +++++++++-- include/manager/SongManager.h | 4 +++ src/manager/SongManager.cpp | 37 ++++++++++++++++++++++++--- 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/include/controller/SongController.hpp b/include/controller/SongController.hpp index b46cdfd..cd481ce 100644 --- a/include/controller/SongController.hpp +++ b/include/controller/SongController.hpp @@ -153,8 +153,19 @@ namespace controller } // TODO: create endpoint for updating songs + ENDPOINT("UPDATE", "/api/v1/song/{id}", songUpdate, + BODY_DTO(dto::SongDto::ObjectWrapper, songDto), PATH(Int32, id)) { + model::Song song(id); + songDto->id = id; + + auto updatedSong = manager::SongManager::songDtoConv(songDto); + std::cout << "printing updated song" << std::endl; + manager::SongManager::printSong(updatedSong); - // TODO: work on this to handle the database records + return createResponse(Status::CODE_200, "OK"); + } + + // endpoint to delete a song ENDPOINT("DELETE", "api/v1/song/data/{id}", songDelete, PATH(Int32, id)) { model::Song song(id); @@ -164,7 +175,7 @@ namespace controller return createResponse(Status::CODE_200, "OK"); } - // TODO: create endpoint for streaming songs + // endpoint for streaming a song ENDPOINT("GET", "/api/v1/song/stream/{id}", streamSong, PATH(Int32, id)) { database::SongRepository songRepo(m_bConf); diff --git a/include/manager/SongManager.h b/include/manager/SongManager.h index d4d0e0c..cf81fa8 100644 --- a/include/manager/SongManager.h +++ b/include/manager/SongManager.h @@ -6,6 +6,7 @@ #include +#include "dto/SongDto.hpp" #include "model/Models.h" namespace manager @@ -18,6 +19,9 @@ namespace manager 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 952afa3..b0b590d 100644 --- a/src/manager/SongManager.cpp +++ b/src/manager/SongManager.cpp @@ -45,9 +45,6 @@ void manager::SongManager::saveSong(model::Song& song) void manager::SongManager::deleteSong(model::Song& song) { - // TODO: handle what happens to miscellanes records - // like Album, Artist, Genre, etc. when a song - // is deleted database::SongRepository songRepo(m_bConf); if (!songRepo.doesSongExist(song, type::SongFilter::id)) { @@ -71,6 +68,40 @@ void manager::SongManager::deleteSong(model::Song& song) manager::DirectoryManager::deleteDirectories(song, paths["root_music_path"].get()); } +void manager::SongManager::updateSong(model::Song& song) +{ + // TODO: update song metadata +} + +model::Song manager::SongManager::songDtoConv(dto::SongDto::ObjectWrapper& songDto) +{ + // TODO: figure out how to determine if a non-character sequence + // field is empty. Will be necessary for updating the + // song based on what the HTTP request body is + std::cout << "coverting dto::SongDto to model::Song" << std::endl; + model::Song song; + song.id = songDto->id; + 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(); + auto s = songDto->year.empty(); + std::cout << s << std::endl; + auto sy = &songDto->year; + if (sy->empty()) { + //} + //if (true) { + std::cout << "year is null" << std::endl; + } else { + std::cout << "year is not null" << std::endl; + } + song.title = (songDto->title == nullptr) ? "" : songDto->title->c_str(); + //song.track = songDto->track; + //song.duration = songDto->duration; + //song.disc = songDto->disc; + + return song; +} + void manager::SongManager::printSong(const model::Song& song) { std::cout << "\nsong" << std::endl;