fix: handle null database descriptions

This commit is contained in:
Andrey Kutin 2026-10-25 12:54:51 +03:00
parent 02b7b41b63
commit 68c09700ff
2 changed files with 11 additions and 3 deletions

View File

@ -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`

View File

@ -3,6 +3,12 @@
#include <iostream>
#include <syncstream>
namespace {
json nullableString(const pqxx::field& field) {
return field.is_null() ? json(nullptr) : json(field.as<std::string>());
}
}
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<int>()},
{"name", row[1].as<std::string>()},
{"text", row[2].as<std::string>()},
{"description", row[3].as<std::string>()},
{"description", nullableString(row[3])},
{"created_at", row[4].as<std::string>()},
{"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<int>()},
{"name", row[1].as<std::string>()},
{"text", row[2].as<std::string>()},
{"description", row[3].as<std::string>()},
{"description", nullableString(row[3])},
{"created_at", row[4].as<std::string>()}
});
}
@ -285,7 +291,7 @@ json Database::getRandomRecordsSlow(pqxx::connection& conn, std::mt19937& rng, c
{"id", row[0].as<int>()},
{"name", row[1].as<std::string>()},
{"text", row[2].as<std::string>()},
{"description", row[3].as<std::string>()},
{"description", nullableString(row[3])},
{"created_at", row[4].as<std::string>()}
});
}