#ifndef SESSION_INFO_REPOSITORY_H #define SESSION_INFO_REPOSITORY_H #include "base_sql_table_repository.h" #include "sessions_statistics_repository_interface.h" #include #include class SessionsStatisticsRepository : public SessionsStatisticsRepositoryInterface, public BaseSqlTableRepository { private: static constexpr const char *SELECT_QUERY = "SELECT session_id, begin_at, ticket_price, hall_id, hall_name, " "total_seats, movie_id, movie_title, duration, genre_id, genre_name, " "sold_tickets, refunded_tickets, sales_revenue, refund_expenses FROM " "sessions_statistics"; // Overrides methods from SessionsStatisticRepositoryInterface public: explicit SessionsStatisticsRepository(QSqlDatabase &database, QObject *parent); RepositoryResult getSessionById(qint32 sessionId, SessionStatisticsDTO &sessionStatistics) const override; RepositoryResult getAllSessions(QVector &sessions) const override; // New methods public: RepositoryResult getSessionsForGenre(qint32 genreName, std::optional startDate, std::optional endDate, QVector &sessions) const override; RepositoryResult getSessionsForHall(qint32 hallId, std::optional startDate, std::optional endDate, QVector &sessions) const override; RepositoryResult getSessionsForMovie(qint32 movieId, std::optional startDate, std::optional endDate, QVector &sessions) const override; private: SessionStatisticsDTO mapQueryToDTO(const QSqlQuery &query) const; void bindDateFilters(QString &queryString, const std::optional &startDate, const std::optional &endDate) const; void bindDateValues(QSqlQuery &query, const std::optional &startDate, const std::optional &endDate) const; RepositoryResult executeAndMapQuery(QSqlQuery &query, QVector &sessions) const; }; #endif // SESSION_INFO_REPOSITORY_H