100 lines
2.8 KiB
C++
100 lines
2.8 KiB
C++
|
|
#include "genres_repository.h"
|
||
|
|
|
||
|
|
#include "create_genre_request.h"
|
||
|
|
#include "genre_dto.h"
|
||
|
|
#include "repository_result.h"
|
||
|
|
#include "update_genre_request.h"
|
||
|
|
#include <QSqlError>
|
||
|
|
#include <QSqlQuery>
|
||
|
|
|
||
|
|
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<GenreDTO> &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;
|
||
|
|
}
|