#include "movies_repository.h" #include "create_movie_request.h" #include "movie_dto.h" #include "repository_result.h" #include "update_movie_request.h" #include #include 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 &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; }