#include "sessions_repository.h" #include "create_session_request.h" #include "repository_result.h" #include "session_dto.h" #include "update_session_request.h" #include #include SessionsRepository::SessionsRepository(QSqlDatabase &database, QObject *parent) : BaseSqlTableRepository(database, parent) {} RepositoryResult SessionsRepository::createSession(const CreateSessionRequest &request) { QSqlQuery query = foreignKeysOnQuery(); query.prepare( "INSERT INTO sessions (movie_id, hall_id, begin_at, ticket_price) VALUES " "(:movie_id, :hall_id, :begin_at, :ticket_price)"); query.bindValue(":begin_at", request.beginAt()); query.bindValue(":hall_id", request.hallId()); query.bindValue(":movie_id", request.movieId()); query.bindValue(":ticket_price", request.ticketPrice()); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataCreated(); return RepositoryResult::successResult(); } RepositoryResult SessionsRepository::getSessionById(qint32 id, SessionDTO &session) const { QSqlQuery query = foreignKeysOnQuery(); query.prepare("SELECT session_id, movie_id, hall_id, begin_at, ticket_price " "FROM sessions WHERE session_id = :id"); query.bindValue(":id", id); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } if (!query.next()) { return RepositoryResult::failureResult("Session not found"); } session = mapQueryToDTO(query); emit dataRetrieved(); return RepositoryResult::successResult(); } RepositoryResult SessionsRepository::getAllSessions(QVector &sessions) const { QSqlQuery query = foreignKeysOnQuery(); query.prepare("SELECT session_id, movie_id, hall_id, begin_at, ticket_price " "FROM sessions"); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } while (query.next()) { sessions.append(mapQueryToDTO(query)); } emit dataRetrieved(); return RepositoryResult::successResult(); } RepositoryResult SessionsRepository::updateSession(const UpdateSessionRequest &request) { QSqlQuery query = foreignKeysOnQuery(); query.prepare("UPDATE sessions SET movie_id = :movie_id, hall_id = :hall_id, " "begin_at = :begin_at, ticket_price = :ticket_price WHERE " "session_id = :session_id"); query.bindValue(":begin_at", request.beginAt()); query.bindValue(":hall_id", request.hallId()); query.bindValue(":movie_id", request.movieId()); query.bindValue(":session_id", request.sessionId()); query.bindValue(":ticket_price", request.ticketPrice()); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataUpdated(); return RepositoryResult::successResult(); } RepositoryResult SessionsRepository::deleteSessionById(qint32 sessionId) { QSqlQuery query = foreignKeysOnQuery(); query.prepare("DELETE FROM sessions WHERE session_id = :session_id"); query.bindValue(":session_id", sessionId); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataDeleted(); return RepositoryResult::successResult(); } SessionDTO SessionsRepository::mapQueryToDTO(const QSqlQuery &query) const { SessionDTO sessionDTO; sessionDTO.setBeginAt(query.value("begin_at").toDateTime()); sessionDTO.setHallId(query.value("hall_id").toInt()); sessionDTO.setMovieId(query.value("movie_id").toInt()); sessionDTO.setSessionId(query.value("session_id").toInt()); sessionDTO.setTicketPrice(query.value("ticket_price").toDouble()); return sessionDTO; }