#include "genres_repository.h" #include "create_genre_request.h" #include "genre_dto.h" #include "repository_result.h" #include "update_genre_request.h" #include #include GenresRepository::GenresRepository(QSqlDatabase &database, QObject *parent) : BaseSqlTableRepository(database, parent) {} RepositoryResult GenresRepository::createGenre(const CreateGenreRequest &request) { QSqlQuery query = foreignKeysOnQuery(); query.prepare("INSERT INTO genres (genre_name) VALUES (:genre_name)"); query.bindValue(":genre_name", request.genreName()); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataCreated(); return RepositoryResult::successResult(); } RepositoryResult GenresRepository::getGenreById(qint32 id, GenreDTO &genre) const { QSqlQuery query = foreignKeysOnQuery(); query.prepare( "SELECT genre_id, genre_name FROM genres WHERE genre_id = :genre_id"); query.bindValue(":genre_id", id); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } if (!query.next()) { return RepositoryResult::failureResult("Genre not found"); } genre = mapQueryToDTO(query); emit dataRetrieved(); return RepositoryResult::successResult(); } RepositoryResult GenresRepository::getAllGenres(QVector &genres) const { QSqlQuery query = foreignKeysOnQuery(); query.prepare("SELECT genre_id, genre_name FROM genres"); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } while (query.next()) { genres.append(mapQueryToDTO(query)); } emit dataRetrieved(); return RepositoryResult::successResult(); } RepositoryResult GenresRepository::updateGenre(const UpdateGenreRequest &request) { QSqlQuery query = foreignKeysOnQuery(); query.prepare( "UPDATE genres SET genre_name = :genre_name WHERE genre_id = :genre_id"); query.bindValue(":genre_name", request.genreName()); query.bindValue(":genre_id", request.genreId()); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataUpdated(); return RepositoryResult::successResult(); } RepositoryResult GenresRepository::deleteGenreById(qint32 genreId) { QSqlQuery query = foreignKeysOnQuery(); query.prepare("DELETE FROM genres WHERE genre_id = :genre_id"); query.bindValue(":genre_id", genreId); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataDeleted(); return RepositoryResult::successResult(); } GenreDTO GenresRepository::mapQueryToDTO(const QSqlQuery &query) const { GenreDTO genreDTO; genreDTO.setGenreId(query.value("genre_id").toInt()); genreDTO.setGenreName(query.value("genre_name").toString()); return genreDTO; }