From 68c09700ffcca8193edc9c740718e3c41adc3ad0 Mon Sep 17 00:00:00 2001 From: Andrey Kutin Date: Sun, 25 Oct 2026 12:54:51 +0300 Subject: [PATCH] fix: handle null database descriptions --- README.md | 2 ++ src/database.cpp | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3507b3c..d9a28e4 100644 --- a/README.md +++ b/README.md @@ -164,6 +164,8 @@ CREATE TABLE random_data ( > При обновлении существующей базы данных схему нужно мигрировать отдельно: `CREATE TABLE IF NOT EXISTS` не изменяет уже созданные таблицы. Например, для предыдущей схемы с полем `value` выполните `ALTER TABLE random_data RENAME COLUMN value TO text;`. +Поле `description` необязательное: если в БД оно имеет значение `NULL`, в ответе API оно будет передано как `null`. + ## systemd Юнит-файл: `deploy/systemd/cards.service` diff --git a/src/database.cpp b/src/database.cpp index d38486a..48e35f0 100644 --- a/src/database.cpp +++ b/src/database.cpp @@ -3,6 +3,12 @@ #include #include +namespace { +json nullableString(const pqxx::field& field) { + return field.is_null() ? json(nullptr) : json(field.as()); +} +} + Database::Database(const DatabaseConfig& cfg, int workers, bool debug) : connStr( "host=" + cfg.host + @@ -155,7 +161,7 @@ json Database::getRandomRecord(pqxx::connection& conn, std::mt19937& rng) { {"id", row[0].as()}, {"name", row[1].as()}, {"text", row[2].as()}, - {"description", row[3].as()}, + {"description", nullableString(row[3])}, {"created_at", row[4].as()}, {"timestamp", std::chrono::system_clock::now().time_since_epoch().count()} }; @@ -233,7 +239,7 @@ json Database::getRandomRecordsFast(pqxx::connection& conn, const int count) { {"id", row[0].as()}, {"name", row[1].as()}, {"text", row[2].as()}, - {"description", row[3].as()}, + {"description", nullableString(row[3])}, {"created_at", row[4].as()} }); } @@ -285,7 +291,7 @@ json Database::getRandomRecordsSlow(pqxx::connection& conn, std::mt19937& rng, c {"id", row[0].as()}, {"name", row[1].as()}, {"text", row[2].as()}, - {"description", row[3].as()}, + {"description", nullableString(row[3])}, {"created_at", row[4].as()} }); }