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
+77
View File
@@ -0,0 +1,77 @@
#include "movies_model.h"
#include <QSqlError>
#include <QSqlQuery>
MoviesModel::MoviesModel(QObject *parent, const QSqlDatabase &database)
: BaseSqlTableModel(parent, database) {}
void MoviesModel::initialize() {
setTable("movies");
// Set up the relationship with the genres table
setRelation(fieldIndex("genre_id"),
QSqlRelation("genres", "genre_id", "genre_name"));
setEditStrategy(QSqlTableModel::OnFieldChange);
bool success = select();
if (!success) {
qWarning() << "Error:" << lastError().text();
}
}
QVariant MoviesModel::headerData(int section, Qt::Orientation orientation,
int role) const {
if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
switch (section) {
case MoviesColumns::Id:
return tr("ID");
case MoviesColumns::Title:
return tr("Title");
case MoviesColumns::GenreId:
return tr("Genre");
case MoviesColumns::Duration:
return tr("Duration");
default:
return QVariant();
}
}
return QSqlRelationalTableModel::headerData(section, orientation, role);
}
bool MoviesModel::buildGenreIdFilterCondition(const QString &inFilter,
QString &outFilter) const {
QSqlQuery query;
query.prepare("SELECT genre_id FROM genres WHERE genre_name LIKE ?");
query.addBindValue("%" + inFilter + "%");
query.exec();
QStringList genreIds;
while (query.next()) {
genreIds << query.value(0).toString();
}
outFilter = QString("movies.genre_id IN (%1)").arg(genreIds.join(", "));
return true;
}
QString MoviesModel::createMultiColumnFilter(const QString &filter) const {
QStringList conditions;
QString buffer; // MoviesColumns::GenreId
if (buildGenreIdFilterCondition(filter, buffer)) {
conditions.append(buffer);
}
using Columns = MoviesColumns;
QStringList columns = {columnName(Columns::Id), columnName(Columns::Title),
columnName(Columns::Duration)};
for (const QString &column : columns) {
conditions.append(QString("%1 LIKE '%%2%'").arg(column).arg(filter));
}
return conditions.join(" OR ");
}