69 lines
2.0 KiB
C++
69 lines
2.0 KiB
C++
#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
|