113 lines
3.7 KiB
C++
113 lines
3.7 KiB
C++
|
|
#include "sessions_repository.h"
|
||
|
|
|
||
|
|
#include "create_session_request.h"
|
||
|
|
#include "repository_result.h"
|
||
|
|
#include "session_dto.h"
|
||
|
|
#include "update_session_request.h"
|
||
|
|
#include <QSqlError>
|
||
|
|
#include <QSqlQuery>
|
||
|
|
|
||
|
|
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<SessionDTO> &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;
|
||
|
|
}
|