Initial commit
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
#include "movies_repository.h"
|
||||
|
||||
#include "create_movie_request.h"
|
||||
#include "movie_dto.h"
|
||||
#include "repository_result.h"
|
||||
#include "update_movie_request.h"
|
||||
#include <QSqlError>
|
||||
#include <QSqlQuery>
|
||||
|
||||
MoviesRepository::MoviesRepository(QSqlDatabase &database, QObject *parent)
|
||||
: BaseSqlTableRepository(database, parent) {}
|
||||
|
||||
RepositoryResult
|
||||
MoviesRepository::createMovie(const CreateMovieRequest &request) {
|
||||
QSqlQuery query = foreignKeysOnQuery();
|
||||
query.prepare("INSERT INTO movies (title, genre_id, duration) VALUES "
|
||||
"(:title, :genre_id, :duration)");
|
||||
query.bindValue(":title", request.title());
|
||||
query.bindValue(":genre_id", request.genreId());
|
||||
query.bindValue(":duration", request.duration());
|
||||
|
||||
if (!query.exec()) {
|
||||
return RepositoryResult::failureResult(query.lastError().text());
|
||||
}
|
||||
|
||||
emit dataCreated();
|
||||
return RepositoryResult::successResult();
|
||||
}
|
||||
|
||||
RepositoryResult
|
||||
MoviesRepository::getAllMovies(QVector<MovieDTO> &movies) const {
|
||||
QSqlQuery query = foreignKeysOnQuery();
|
||||
query.prepare("SELECT movie_id, title, genre_id, duration FROM movies");
|
||||
|
||||
if (!query.exec()) {
|
||||
return RepositoryResult::failureResult(query.lastError().text());
|
||||
}
|
||||
|
||||
while (query.next()) {
|
||||
movies.append(mapQueryToDTO(query));
|
||||
}
|
||||
|
||||
emit dataRetrieved();
|
||||
return RepositoryResult::successResult();
|
||||
}
|
||||
|
||||
RepositoryResult MoviesRepository::getMovieById(qint32 id,
|
||||
MovieDTO &movie) const {
|
||||
QSqlQuery query = foreignKeysOnQuery();
|
||||
query.prepare("SELECT movie_id, title, genre_id, duration FROM movies WHERE "
|
||||
"movie_id = :id");
|
||||
query.bindValue(":id", id);
|
||||
|
||||
if (!query.exec()) {
|
||||
return RepositoryResult::failureResult(query.lastError().text());
|
||||
}
|
||||
if (!query.next()) {
|
||||
return RepositoryResult::failureResult("Movie not found");
|
||||
}
|
||||
|
||||
movie = mapQueryToDTO(query);
|
||||
|
||||
emit dataRetrieved();
|
||||
return RepositoryResult::successResult();
|
||||
}
|
||||
|
||||
RepositoryResult
|
||||
MoviesRepository::updateMovie(const UpdateMovieRequest &request) {
|
||||
QSqlQuery query = foreignKeysOnQuery();
|
||||
query.prepare("UPDATE movies SET title = :title, genre_id = :genre_id, "
|
||||
"duration = :duration WHERE movie_id = :id");
|
||||
query.bindValue(":duration", request.duration());
|
||||
query.bindValue(":genre_id", request.genreId());
|
||||
query.bindValue(":id", request.movieId());
|
||||
query.bindValue(":title", request.title());
|
||||
|
||||
if (!query.exec()) {
|
||||
return RepositoryResult::failureResult(query.lastError().text());
|
||||
}
|
||||
|
||||
emit dataUpdated();
|
||||
return RepositoryResult::successResult();
|
||||
}
|
||||
|
||||
RepositoryResult MoviesRepository::deleteMovieById(qint32 movieId) {
|
||||
QSqlQuery query = foreignKeysOnQuery();
|
||||
query.prepare("DELETE FROM movies WHERE movie_id = :id");
|
||||
query.bindValue(":id", movieId);
|
||||
|
||||
if (!query.exec()) {
|
||||
return RepositoryResult::failureResult(query.lastError().text());
|
||||
}
|
||||
|
||||
emit dataDeleted();
|
||||
return RepositoryResult::successResult();
|
||||
}
|
||||
|
||||
MovieDTO MoviesRepository::mapQueryToDTO(const QSqlQuery &query) const {
|
||||
MovieDTO movieDTO;
|
||||
movieDTO.setDuration(query.value("duration").toInt());
|
||||
movieDTO.setGenreId(query.value("genre_id").toInt());
|
||||
movieDTO.setMovieId(query.value("movie_id").toInt());
|
||||
movieDTO.setTitle(query.value("title").toString());
|
||||
|
||||
return movieDTO;
|
||||
}
|
||||
Reference in New Issue
Block a user