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