fix: handle null database descriptions
This commit is contained in:
parent
02b7b41b63
commit
68c09700ff
|
|
@ -164,6 +164,8 @@ CREATE TABLE random_data (
|
||||||
|
|
||||||
> При обновлении существующей базы данных схему нужно мигрировать отдельно: `CREATE TABLE IF NOT EXISTS` не изменяет уже созданные таблицы. Например, для предыдущей схемы с полем `value` выполните `ALTER TABLE random_data RENAME COLUMN value TO text;`.
|
> При обновлении существующей базы данных схему нужно мигрировать отдельно: `CREATE TABLE IF NOT EXISTS` не изменяет уже созданные таблицы. Например, для предыдущей схемы с полем `value` выполните `ALTER TABLE random_data RENAME COLUMN value TO text;`.
|
||||||
|
|
||||||
|
Поле `description` необязательное: если в БД оно имеет значение `NULL`, в ответе API оно будет передано как `null`.
|
||||||
|
|
||||||
## systemd
|
## systemd
|
||||||
|
|
||||||
Юнит-файл: `deploy/systemd/cards.service`
|
Юнит-файл: `deploy/systemd/cards.service`
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,12 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <syncstream>
|
#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)
|
Database::Database(const DatabaseConfig& cfg, int workers, bool debug)
|
||||||
: connStr(
|
: connStr(
|
||||||
"host=" + cfg.host +
|
"host=" + cfg.host +
|
||||||
|
|
@ -155,7 +161,7 @@ json Database::getRandomRecord(pqxx::connection& conn, std::mt19937& rng) {
|
||||||
{"id", row[0].as<int>()},
|
{"id", row[0].as<int>()},
|
||||||
{"name", row[1].as<std::string>()},
|
{"name", row[1].as<std::string>()},
|
||||||
{"text", row[2].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>()},
|
{"created_at", row[4].as<std::string>()},
|
||||||
{"timestamp", std::chrono::system_clock::now().time_since_epoch().count()}
|
{"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>()},
|
{"id", row[0].as<int>()},
|
||||||
{"name", row[1].as<std::string>()},
|
{"name", row[1].as<std::string>()},
|
||||||
{"text", row[2].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>()}
|
{"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>()},
|
{"id", row[0].as<int>()},
|
||||||
{"name", row[1].as<std::string>()},
|
{"name", row[1].as<std::string>()},
|
||||||
{"text", row[2].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>()}
|
{"created_at", row[4].as<std::string>()}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue