Initial commit
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user