Files
cinema-ticket-management-sy…/core/services/ticket_generator.h
T

69 lines
2.0 KiB
C++
Raw Normal View History

2026-07-12 14:34:52 +04:00
#ifndef TICKET_GENERATOR_H
#define TICKET_GENERATOR_H
#include "base_generator.h"
#include "date_time_generator.h"
#include "tickets_repository_interface.h"
#include <QDateTime>
#include <QRandomGenerator>
#include <QString>
#include <QVector>
// Forward declaration
class HallsRepositoryInterface;
class SessionsRepositoryInterface;
class TicketsRepositoryInterface;
class TicketGenerator : public BaseGenerator, public DateTimeGenerator {
private:
struct ReservationContext {
QDateTime beginAt;
QDateTime soldAt;
qint32 seatNumber;
qint32 sessionId;
};
private:
static std::random_device rd_;
static std::mt19937 generator_;
private:
QMap<qint32 /* sessionId */, QDateTime> sessionIdToBeginAt_;
QMap<qint32 /* sessionId */, QSet<qint32> /* availableSeatNumbers */>
sessionIdToAvailableSeatNumbers_;
QPair<double, double> fillRatioPerSessionRange_;
ReservationContext reservationContext_;
qsizetype remainingCapacity_;
HallsRepositoryInterface *hallsRepository_;
SessionsRepositoryInterface *sessionsRepository_;
TicketsRepositoryInterface *ticketsRepository_;
public:
TicketGenerator(const QPair<qint32, qint32> &dayRange,
const QPair<QTime, QTime> &timeRange,
const QPair<double, double> &fillRatioPerSessionRange);
private:
void initializeRemainingCapacity();
void initializeRepositories();
void initializeSessionIdToAvailableSeatMap();
void initializeSessionIdToBeginAtMap();
bool setFillRatioPerSessionRange(const QPair<double, double> &range);
double generateFillRatioPerSession() const;
// Vitual methods
private: // Const methods
QString createFailureMessage(const QString &errorMessage) const override;
QString createSuccessMessage() const override;
qsizetype calculateRemainingCapacity() const override;
private: // Non-const methods
RepositoryResult createRecord() override;
bool prepareData() override;
void clearStaleData() override;
};
#endif // TICKET_GENERATOR_H