73 lines
2.0 KiB
C++
73 lines
2.0 KiB
C++
#ifndef SESSION_GENERATOR_H
|
|
#define SESSION_GENERATOR_H
|
|
|
|
#include "base_generator.h"
|
|
#include "reservation_manager.h"
|
|
#include <QDateTime>
|
|
#include <QMetaType>
|
|
#include <QRandomGenerator>
|
|
#include <QString>
|
|
#include <QVector>
|
|
|
|
// Forward declaration
|
|
class SessionsRepositoryInterface;
|
|
class HallsRepositoryInterface;
|
|
class MoviesRepositoryInterface;
|
|
|
|
class SessionGenerator : public BaseGenerator {
|
|
private:
|
|
struct ReservationContext {
|
|
QDateTime beginAt;
|
|
QTime endTime;
|
|
double ticketPrice;
|
|
qint32 hallId;
|
|
qint32 movieId;
|
|
};
|
|
|
|
private:
|
|
QMap<qint32 /* movieId */, qint32 /* minutes */> movieIdToDurationMinutes_;
|
|
QMap<qint32 /* hallId */, ReservationManager> hallIdToReservationManager_;
|
|
ReservationContext reservationContext_;
|
|
ReservationManager reservationReference_;
|
|
qint64 lowerBoundReservationMs_;
|
|
qint64 upperBoundReservationMs_;
|
|
|
|
// Repositories
|
|
HallsRepositoryInterface *hallsRepository_;
|
|
MoviesRepositoryInterface *moviesRepository_;
|
|
SessionsRepositoryInterface *sessionsRepository_;
|
|
|
|
public:
|
|
SessionGenerator(const ReservationManager &reservationReference = {});
|
|
|
|
// Non-virtual methods
|
|
private:
|
|
QTime calculateDuration(ReservationContext context) const;
|
|
QTime duration(qint32 movieId) const;
|
|
bool prepareData(qint32 hallId, const QList<qint32> &movieIds);
|
|
qsizetype calculateAvailableDaysCount() const;
|
|
qsizetype calculateAvailableSlotsCount() const;
|
|
|
|
void initializeBounds();
|
|
void initializeDayManager();
|
|
void initializeHallIdToReservationManagerMap();
|
|
void initializeMovieIdToDurationMap(qint32 additionalMinutes);
|
|
void initializeRepositories();
|
|
|
|
// 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;
|
|
|
|
private:
|
|
friend class SessionGeneratorTest;
|
|
};
|
|
|
|
#endif // SESSION_GENERATOR_H
|