From 15a6a6e93f98fb87b4c64a71ae903085f32ab322 Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 3 Aug 2025 15:54:52 +0500 Subject: [PATCH] --wip-- [skip ci] --- src/model/author.h | 56 ------------------ src/model/book.h | 65 --------------------- src/model/model.qbs | 15 ----- src/repositories/author_repository.cpp | 78 -------------------------- src/repositories/author_repository.h | 29 ---------- src/repositories/book_repository.cpp | 59 ------------------- src/repositories/book_repository.h | 22 -------- src/repositories/repositories.qbs | 21 ------- src/services/author_service.cpp | 12 ---- src/services/author_service.h | 20 ------- src/services/book_service.cpp | 28 --------- src/services/book_service.h | 20 ------- src/services/services.qbs | 22 -------- src/sql_builder/create_table.cpp | 45 --------------- src/sql_builder/create_table.h | 50 ----------------- src/sql_builder/insert.cpp | 39 ------------- src/sql_builder/insert.h | 22 -------- src/sql_builder/select.cpp | 32 ----------- src/sql_builder/select.h | 21 ------- src/sql_builder/sql_builder.qbs | 14 ----- 20 files changed, 670 deletions(-) delete mode 100644 src/model/author.h delete mode 100644 src/model/book.h delete mode 100644 src/model/model.qbs delete mode 100644 src/repositories/author_repository.cpp delete mode 100644 src/repositories/author_repository.h delete mode 100644 src/repositories/book_repository.cpp delete mode 100644 src/repositories/book_repository.h delete mode 100644 src/repositories/repositories.qbs delete mode 100644 src/services/author_service.cpp delete mode 100644 src/services/author_service.h delete mode 100644 src/services/book_service.cpp delete mode 100644 src/services/book_service.h delete mode 100644 src/services/services.qbs delete mode 100644 src/sql_builder/create_table.cpp delete mode 100644 src/sql_builder/create_table.h delete mode 100644 src/sql_builder/insert.cpp delete mode 100644 src/sql_builder/insert.h delete mode 100644 src/sql_builder/select.cpp delete mode 100644 src/sql_builder/select.h delete mode 100644 src/sql_builder/sql_builder.qbs diff --git a/src/model/author.h b/src/model/author.h deleted file mode 100644 index dd5713f..0000000 --- a/src/model/author.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef AUTHOR_H -#define AUTHOR_H - -#include - -#include - -namespace model -{ - -namespace authorconst -{ - -const QString TABLE = "authors"; - -const QString ID = "id"; -const QString NAME = "name"; - -// const QString M_AUTHOR_ID = "id"; -// const QString M_AUTHOR_FIRST_NAME = "first_name"; -// const QString M_AUTHOR_LAST_NAME = "last_name"; -// const QString M_AUTHOR_YEAR = "year"; - -} - -struct Author -{ - int id = 0; - QString name; - // QString firstName; - // QString lastName; - // QString birthdayYear; -}; - -static inline QString createTableAuthor() -{ - // query.exec("CREATE TABLE IF NOT EXISTS authors (" - // "id INTEGER PRIMARY KEY AUTOINCREMENT," - // "name TEXT UNIQUE NOT NULL" - // ")"); - - Builder::TableSchema tBuilder(model::authorconst::TABLE); - tBuilder.addColumn({ .name = model::authorconst::ID, - .type = "INTEGER", - .primaryKey = true }); - - tBuilder.addColumn({ .name = model::authorconst::NAME, - .type = "TEXT", - .notNull = true, - .unique = true }); - return tBuilder.get(); -} - -} // namespace model - -#endif // AUTHOR_H diff --git a/src/model/book.h b/src/model/book.h deleted file mode 100644 index 49a7435..0000000 --- a/src/model/book.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef BOOK_H -#define BOOK_H - -#include - -#include - -#include - -namespace model -{ - -namespace bookconst -{ - -const QString TABLE = "books"; - -const QString ID = "id"; -const QString TITLE = "title"; -const QString AUTHOR_ID = "author_id"; -const QString FILEPATH = "file_path"; - -} - -struct Book -{ - int id = 0; - QString title; - Author author; - QString filePath; -}; - -static inline QString createTableBook() -{ - // query.exec("CREATE TABLE IF NOT EXISTS books (" - // "id INTEGER PRIMARY KEY AUTOINCREMENT," - // "title TEXT NOT NULL," - // "file_path TEXT NOT NULL," - // "author_id INTEGER NOT NULL," - // "FOREIGN KEY (author_id) REFERENCES authors(id) ON DELETE CASCADE" - // ");"); - - Builder::TableSchema tBuilder(model::bookconst::TABLE); - tBuilder.addColumn({ .name = model::bookconst::ID, - .type = "INTEGER", - .primaryKey = true }); - - tBuilder.addColumn({ .name = model::bookconst::TITLE, - .type = "TEXT", - .notNull = true }); - - tBuilder.addColumn({ .name = model::bookconst::FILEPATH, - .type = "TEXT", - .notNull = true }); - - tBuilder.addColumn({ .name = model::bookconst::AUTHOR_ID, - .type = "INTEGER", - .notNull = true, - .foreignKeyTable = model::authorconst::TABLE, - .foreignKeyColumn = model::authorconst::ID }); - return tBuilder.get(); -} - -} // namespace model -#endif // BOOK_H diff --git a/src/model/model.qbs b/src/model/model.qbs deleted file mode 100644 index 37ec88a..0000000 --- a/src/model/model.qbs +++ /dev/null @@ -1,15 +0,0 @@ -import qbs - -PSLibrary { - Depends { name: "Qt"; submodules: "core", "sql"} - - Depends { name: "sql_builder" } - - Group { - name: "cpp" - files: [ - "*.h", - "*.cpp" - ] - } -} diff --git a/src/repositories/author_repository.cpp b/src/repositories/author_repository.cpp deleted file mode 100644 index 6c54d7c..0000000 --- a/src/repositories/author_repository.cpp +++ /dev/null @@ -1,78 +0,0 @@ -// #define BUILD_REPOSITORIES -#include "author_repository.h" - -#include -#include - -#include - -QVector AuthorRepository::getAll() -{ - QVector authors; - - Builder::Select sBuilder({ .tableName = model::authorconst::TABLE, .rows = { model::authorconst::ID, model::authorconst::NAME } }); - QSqlQuery query(sBuilder.get()); - - qDebug() << query.lastError().text(); - - while (query.next()) - { - authors.append({ query.value(0).toInt(), - query.value(1).toString() }); - } - - return authors; -} - -std::optional AuthorRepository::getByName(const QString& name) -{ - Q_UNUSED(name); - Builder::Select sBuilder({ .tableName = model::authorconst::TABLE, .rows = { model::authorconst::ID, model::authorconst::NAME } }); - QString qResult = sBuilder.get() + QString(" WHERE %1 = \"%2\"").arg(model::authorconst::NAME).arg(name); - - QSqlQuery query(qResult); - - if (query.next()) - { - model::Author author({ .id = query.value(0).toInt(), - .name = query.value(1).toString() }); - return { author }; - } - - return std::nullopt; -} - -bool AuthorRepository::insert(const model::Author& author) -{ - QSqlQuery query(DatabaseManager::instance().database()); - Builder::Insert iBuild({ model::authorconst::TABLE, - { model::authorconst::NAME }, - true }); - - query.prepare(iBuild.get()); - query.bindValue(":name", author.name); - int authorId = 0; - Q_UNUSED(authorId); - - if (!query.exec()) - { - qDebug() << query.lastError().text(); - if (query.lastError().nativeErrorCode() == 19) - { - // Автор уже есть, ищем его ID - QSqlQuery findQuery(DatabaseManager::instance().database()); - findQuery.prepare("SELECT id FROM authors WHERE name = :name"); - findQuery.bindValue(":name", author.name); - if (findQuery.exec() && findQuery.next()) - { - authorId = findQuery.value(0).toInt(); - return true; - } - } - qCritical() << "Ошибка добавления автора:" << query.lastError().text(); - return false; - } - - authorId = query.lastInsertId().toInt(); - return true; -} diff --git a/src/repositories/author_repository.h b/src/repositories/author_repository.h deleted file mode 100644 index 4cfaa75..0000000 --- a/src/repositories/author_repository.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -#ifdef BUILD_REPOSITORIES -#define REPOSITORIES_EXPORT Q_DECL_EXPORT -#else -#define REPOSITORIES_EXPORT Q_DECL_IMPORT -#endif - -class REPOSITORIES_EXPORT AuthorRepository -{ -public: - static QVector getAll(); - static std::optional getByName(const QString& name); - static bool insert(const model::Author& author); - - // TODO Возвращать не bool - а номер id записи -}; diff --git a/src/repositories/book_repository.cpp b/src/repositories/book_repository.cpp deleted file mode 100644 index 9c621dd..0000000 --- a/src/repositories/book_repository.cpp +++ /dev/null @@ -1,59 +0,0 @@ -// #define BUILD_REPOSITORIES -#include "book_repository.h" - -#include -#include - -#include -#include - -QVector BookRepository::getAll() -{ - QVector books; - Builder::Select qBuilder { - model::bookconst::TABLE, - { model::bookconst::ID, - model::bookconst::TITLE, - model::bookconst::AUTHOR_ID, - model::bookconst::FILEPATH } - }; - - QSqlQuery query(qBuilder.get()); - - qDebug() << query.lastError().text(); - - while (query.next()) - { - books.append({ query.value(0).toInt(), - query.value(1).toString(), - { query.value(2).toInt() }, - query.value(3).toString() }); - } - - // TODO получить так же авторов как строку - - return books; -} - -bool BookRepository::insert(const model::Book& book) -{ - QSqlQuery query(DatabaseManager::instance().database()); - - Builder::Insert iBuilder { - model::bookconst::TABLE, - { model::bookconst::TITLE, - model::bookconst::FILEPATH, - model::bookconst::AUTHOR_ID } - }; - - query.prepare(iBuilder.get()); - query.bindValue(":" + model::bookconst::TITLE, book.title); - query.bindValue(":" + model::bookconst::FILEPATH, book.filePath); - query.bindValue(":" + model::bookconst::AUTHOR_ID, book.author.id); - - bool res = query.exec(); - if (!res) - qDebug() << query.lastError().text(); - - return res; -} diff --git a/src/repositories/book_repository.h b/src/repositories/book_repository.h deleted file mode 100644 index 2454a5f..0000000 --- a/src/repositories/book_repository.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include - -#include - -#include -#include -#include - -#ifdef BUILD_REPOSITORIES -#define REPOSITORIES_EXPORT Q_DECL_EXPORT -#else -#define REPOSITORIES_EXPORT Q_DECL_IMPORT -#endif - -class REPOSITORIES_EXPORT BookRepository -{ -public: - static QVector getAll(); - static bool insert(const model::Book& book); -}; diff --git a/src/repositories/repositories.qbs b/src/repositories/repositories.qbs deleted file mode 100644 index 877e100..0000000 --- a/src/repositories/repositories.qbs +++ /dev/null @@ -1,21 +0,0 @@ -import qbs - -PSLibrary { - Depends { name: "Qt"; submodules: "core", "sql"} - - Depends { name: "database" } - Depends { name: "sql_builder" } - - Group { - name: "cpp" - files: [ - "*.h", - "*.cpp" - ] - } - - Properties { - condition: qbs.buildVariant === "debug" - cpp.defines: ["BUILD_REPOSITORIES"] - } -} diff --git a/src/services/author_service.cpp b/src/services/author_service.cpp deleted file mode 100644 index 39a2c01..0000000 --- a/src/services/author_service.cpp +++ /dev/null @@ -1,12 +0,0 @@ -// #define BUILD_SERVICES -#include "author_service.h" - -QVector AuthorService::fetchAll() -{ - return AuthorRepository::getAll(); -} - -bool AuthorService::add(const model::Author& author) -{ - return AuthorRepository::insert(author); -} diff --git a/src/services/author_service.h b/src/services/author_service.h deleted file mode 100644 index 97288ed..0000000 --- a/src/services/author_service.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include - -#include - -#include - -#ifdef BUILD_SERVICES -#define SERVICES_EXPORT Q_DECL_EXPORT -#else -#define SERVICES_EXPORT Q_DECL_IMPORT -#endif - -class SERVICES_EXPORT AuthorService -{ -public: - static QVector fetchAll(); - static bool add(const model::Author& name); -}; diff --git a/src/services/book_service.cpp b/src/services/book_service.cpp deleted file mode 100644 index ca32b3b..0000000 --- a/src/services/book_service.cpp +++ /dev/null @@ -1,28 +0,0 @@ -// #define BUILD_SERVICES -#include "book_service.h" -#include "author_service.h" - -QVector BookService::fetchAll() -{ - return BookRepository::getAll(); -} - -bool BookService::add(const model::Book& book) -{ - auto res = AuthorRepository::getByName(book.author.name); - - if (!res.has_value()) - { - if (!AuthorService::add(book.author)) - { - qCritical() << "Ошибка добавления автора!"; - return false; - } - - res = AuthorRepository::getByName(book.author.name); - } - - model::Book BookAuthor = book; - BookAuthor.author = res.value(); - return BookRepository::insert(BookAuthor); -} diff --git a/src/services/book_service.h b/src/services/book_service.h deleted file mode 100644 index cddc97b..0000000 --- a/src/services/book_service.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include - -#include - -#include - -#ifdef BUILD_SERVICES -#define SERVICES_EXPORT Q_DECL_EXPORT -#else -#define SERVICES_EXPORT Q_DECL_IMPORT -#endif - -class SERVICES_EXPORT BookService -{ -public: - static QVector fetchAll(); - static bool add(const model::Book& book); -}; diff --git a/src/services/services.qbs b/src/services/services.qbs deleted file mode 100644 index 60fecf4..0000000 --- a/src/services/services.qbs +++ /dev/null @@ -1,22 +0,0 @@ -import qbs - -PSLibrary { - Depends { name: "Qt"; submodules: "core", "sql"} - - Depends { name: "repositories" } - - Group { - name: "cpp" - files: [ - "*.h", - "*.cpp" - ] - } - - - - Properties { - condition: qbs.buildVariant === "debug" - cpp.defines: ["BUILD_SERVICES"] - } -} diff --git a/src/sql_builder/create_table.cpp b/src/sql_builder/create_table.cpp deleted file mode 100644 index 82c5884..0000000 --- a/src/sql_builder/create_table.cpp +++ /dev/null @@ -1,45 +0,0 @@ -#include "create_table.h" - -#include - -namespace Builder -{ - -QString Column::toSQL() const -{ - QString columnDef = name + " " + type; - if (primaryKey) - columnDef += " PRIMARY KEY"; - if (notNull) - columnDef += " NOT NULL"; - if (unique) - columnDef += " UNIQUE"; - if (defaultValue) - columnDef += " DEFAULT " + *defaultValue; - if (foreignKeyTable && foreignKeyColumn) - { - columnDef += " REFERENCES " + *foreignKeyTable + "(" + *foreignKeyColumn + ")"; - } - return columnDef; -} - -TableSchema& TableSchema::addColumn(const Column& column) -{ - columns.push_back(column); - return *this; -} - -QString TableSchema::get() const -{ - QStringList columnDefs; - for (const auto& col : columns) - { - columnDefs.append(col.toSQL()); - } - - QString result = "CREATE TABLE IF NOT EXISTS " + name + " ( " + columnDefs.join(", ") + " );"; - // qDebug() << result; - return result; -} - -} // namespace Builder diff --git a/src/sql_builder/create_table.h b/src/sql_builder/create_table.h deleted file mode 100644 index 239c40c..0000000 --- a/src/sql_builder/create_table.h +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once - -#include -#include -#include - -#include - -namespace Builder -{ - -struct Column -{ - QString name; // Имя колонки - QString type; // Тип колонки - bool primaryKey = false; // Является ли колонка первичным ключом? - bool notNull = false; // Колонка не должна быть пуста - bool unique = false; // Значение в колонке должны быть уникальны - std::optional defaultValue; - std::optional foreignKeyTable; - std::optional foreignKeyColumn; - - /*! - * \brief Сформировать SQL код для колонки - */ - QString toSQL() const; -}; - -class Q_DECL_EXPORT TableSchema -{ -public: - TableSchema(QString tableName) : - name(std::move(tableName)) {} - - /*! - * \brief Добавить колонку - */ - TableSchema& addColumn(const Column& column); - - /*! - * \brief Сформировать SQL код для создания таблицы - */ - QString get() const; - -private: - QString name; // Имя таблицы - QVector columns; // Список колонок таблицы -}; - -} // namespace Builder diff --git a/src/sql_builder/insert.cpp b/src/sql_builder/insert.cpp deleted file mode 100644 index 80384b3..0000000 --- a/src/sql_builder/insert.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "insert.h" - -#include - -namespace Builder -{ - -namespace -{ - -const QString INSERT = QStringLiteral("INSERT"); -const QString INTO = QStringLiteral("INTO"); -const QString VALUES = QStringLiteral("VALUES"); -const QString IGNORE = QStringLiteral("IGNORE"); - -} - -QString Insert::get() const -{ - QString resultString = QString("%1 ").arg(INSERT); - if (orIgnore) - resultString += QString("OR %1 ").arg(IGNORE); - resultString += QString("%1 %2 ").arg(INTO).arg(tableName); - - resultString += QString("( %1 ) ").arg(rows.join(", ")); - - // TODO как будто бы проще сразу это заполнить значениями - QStringList allValue; - for (const auto& row : rows) - allValue.push_back(QString(":%1").arg(row)); - - resultString += QString("%1 ( %2 )").arg(VALUES).arg(allValue.join(", ")); - - resultString += ';'; - // qDebug() << resultString; - return resultString; -} - -} // namespace Builder diff --git a/src/sql_builder/insert.h b/src/sql_builder/insert.h deleted file mode 100644 index b53cec1..0000000 --- a/src/sql_builder/insert.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include -#include - -namespace Builder -{ - -struct Q_DECL_EXPORT Insert -{ - QString tableName; // Имя таблицы - QStringList rows; // Именования колонок - // QStringList params; - bool orIgnore = false; - - /*! - * \brief Сформировать SQL код для выполнения - */ - QString get() const; -}; - -} // namespace Builder diff --git a/src/sql_builder/select.cpp b/src/sql_builder/select.cpp deleted file mode 100644 index 880609e..0000000 --- a/src/sql_builder/select.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "select.h" - -#include - -namespace Builder -{ - -namespace -{ - -const QString SELECT = QStringLiteral("SELECT"); -const QString FROM = QStringLiteral("FROM"); -const QString WHERE = QStringLiteral("WHERE"); - -} - -QString Select::get() const -{ - QString allRows = rows.join(", "); - - QString resultString = QString("%1 %2").arg(SELECT).arg(allRows); - - resultString += QString(" %1 %2").arg(FROM).arg(tableName); - - if (!where.isEmpty()) - resultString += QString(" %1 %2").arg(WHERE).arg(where); - - // resultString += ';'; - return resultString; -} - -} // namespace Builder diff --git a/src/sql_builder/select.h b/src/sql_builder/select.h deleted file mode 100644 index a3fe574..0000000 --- a/src/sql_builder/select.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include -#include - -namespace Builder -{ - -struct Q_DECL_EXPORT Select -{ - QString tableName; // Имя таблицы - QStringList rows = { "*" }; // Колонки - QString where = {}; // Условие поиска - - /*! - * \brief Сформировать SQL код для выполнения - */ - QString get() const; -}; - -} // namespace Builder diff --git a/src/sql_builder/sql_builder.qbs b/src/sql_builder/sql_builder.qbs deleted file mode 100644 index d03417d..0000000 --- a/src/sql_builder/sql_builder.qbs +++ /dev/null @@ -1,14 +0,0 @@ -import qbs - -PSLibrary { - Depends { name: "Qt"; submodules: "sql"} - - - Group { - name: "cpp" - files: [ - "**/*.h", - "**/*.cpp" - ] - } -}