#include "tickets_repository.h" #include "create_ticket_request.h" #include "repository_result.h" #include "ticket_dto.h" #include "update_ticket_request.h" #include #include TicketsRepository::TicketsRepository(QSqlDatabase &database, QObject *parent) : BaseSqlTableRepository(database, parent) {} RepositoryResult TicketsRepository::createTicket(const CreateTicketRequest &request) { QSqlQuery query = foreignKeysOnQuery(); query.prepare("INSERT INTO tickets (session_id, seat_number, sold_at) VALUES " "(:session_id, :seat_number, :sold_at)"); query.bindValue(":seat_number", request.seatNumber()); query.bindValue(":session_id", request.sessionId()); query.bindValue(":sold_at", request.soldAt()); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataCreated(); return RepositoryResult::successResult(); } RepositoryResult TicketsRepository::getTicketById(qint32 id, TicketDTO &ticket) const { QSqlQuery query = foreignKeysOnQuery(); query.prepare("SELECT ticket_id, session_id, seat_number, sold_at FROM " "tickets WHERE ticket_id = :id"); query.bindValue(":id", id); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } if (!query.next()) { return RepositoryResult::failureResult("Ticket not found"); } ticket = mapQueryToDTO(query); emit dataRetrieved(); return RepositoryResult::successResult(); } RepositoryResult TicketsRepository::getAllTickets(QVector &tickets) const { QSqlQuery query = foreignKeysOnQuery(); query.prepare( "SELECT ticket_id, session_id, seat_number, sold_at FROM tickets"); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } while (query.next()) { tickets.append(mapQueryToDTO(query)); } emit dataRetrieved(); return RepositoryResult::successResult(); } RepositoryResult TicketsRepository::updateTicket(const UpdateTicketRequest &request) { QSqlQuery query = foreignKeysOnQuery(); query.prepare( "UPDATE tickets SET session_id = :session_id, seat_number = " ":seat_number, sold_at = :sold_at WHERE ticket_id = :ticket_id"); query.bindValue(":seat_number", request.seatNumber()); query.bindValue(":session_id", request.sessionId()); query.bindValue(":sold_at", request.soldAt()); query.bindValue(":ticket_id", request.ticketId()); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataUpdated(); return RepositoryResult::successResult(); } RepositoryResult TicketsRepository::deleteTicketById(qint32 ticketId) { QSqlQuery query = foreignKeysOnQuery(); query.prepare("DELETE FROM tickets WHERE ticket_id = :ticket_id"); query.bindValue(":ticket_id", ticketId); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataDeleted(); return RepositoryResult::successResult(); } TicketDTO TicketsRepository::mapQueryToDTO(const QSqlQuery &query) const { TicketDTO ticketDTO; ticketDTO.setSeatNumber(query.value("seat_number").toInt()); ticketDTO.setSessionId(query.value("session_id").toInt()); ticketDTO.setSoldAt(query.value("sold_at").toDateTime()); ticketDTO.setTicketId(query.value("ticket_id").toInt()); return ticketDTO; }