#include "refunds_repository.h" #include "create_refund_request.h" #include "refund_dto.h" #include "repository_result.h" #include "update_refund_request.h" #include #include RefundsRepository::RefundsRepository(QSqlDatabase &database, QObject *parent) : BaseSqlTableRepository(database, parent) {} RepositoryResult RefundsRepository::createRefund(const CreateRefundRequest &request) { QSqlQuery query = foreignKeysOnQuery(); query.prepare("INSERT INTO refunds (ticket_id, refund_at, refund_amount) " "VALUES (:ticket_id, :refund_at, :refund_amount)"); query.bindValue(":ticket_id", request.ticketId()); query.bindValue(":refund_at", request.refundAt()); query.bindValue(":refund_amount", request.refundAmount()); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataCreated(); return RepositoryResult::successResult(); } RepositoryResult RefundsRepository::getRefundById(qint32 id, RefundDTO &refund) const { QSqlQuery query = foreignKeysOnQuery(); query.prepare("SELECT refund_id, ticket_id, refund_at, refund_amount FROM " "refunds WHERE refund_id = :id"); query.bindValue(":id", id); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } if (!query.next()) { return RepositoryResult::failureResult("Refund not found"); } RefundDTO refundDTO; refundDTO.setRefundAmount(query.value("refund_amount").toDouble()); refundDTO.setRefundAt(query.value("refund_at").toDateTime()); refundDTO.setRefundId(query.value("refund_id").toInt()); refundDTO.setTicketId(query.value("ticket_id").toInt()); refund = mapQueryToDTO(query); emit dataRetrieved(); return RepositoryResult::successResult(); } RepositoryResult RefundsRepository::getAllRefunds(QVector &refunds) const { QSqlQuery query = foreignKeysOnQuery(); query.prepare( "SELECT refund_id, ticket_id, refund_at, refund_amount FROM refunds"); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } while (query.next()) { refunds.append(mapQueryToDTO(query)); } emit dataRetrieved(); return RepositoryResult::successResult(); } RepositoryResult RefundsRepository::updateRefund(const UpdateRefundRequest &request) { QSqlQuery query = foreignKeysOnQuery(); query.prepare( "UPDATE refunds SET ticket_id = :ticket_id, refund_at = :refund_at, " "refund_amount = :refund_amount WHERE refund_id = :refund_id"); query.bindValue(":refund_amount", request.refundAmount()); query.bindValue(":refund_at", request.refundAt()); query.bindValue(":refund_id", request.refundId()); query.bindValue(":ticket_id", request.ticketId()); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataUpdated(); return RepositoryResult::successResult(); } RepositoryResult RefundsRepository::deleteRefundById(qint32 refundId) { QSqlQuery query = foreignKeysOnQuery(); query.prepare("DELETE FROM refunds WHERE refund_id = :refund_id"); query.bindValue(":refund_id", refundId); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataDeleted(); return RepositoryResult::successResult(); } RefundDTO RefundsRepository::mapQueryToDTO(const QSqlQuery &query) const { RefundDTO refundDTO; refundDTO.setRefundAmount(query.value("refund_amount").toDouble()); refundDTO.setRefundAt(query.value("refund_at").toDateTime()); refundDTO.setRefundId(query.value("refund_id").toInt()); refundDTO.setTicketId(query.value("ticket_id").toInt()); return refundDTO; }