Initial commit

This commit is contained in:
user
2026-07-12 14:34:52 +04:00
commit 3abf6bd9c2
557 changed files with 68706 additions and 0 deletions
+72
View File
@@ -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