# cards Веб-сервер на C++20 с использованием Boost.Beast и PostgreSQL. Отдаёт случайные записи из базы данных по REST API. ## Требования - Компилятор с поддержкой C++20 (GCC 10+, Clang 10+) - CMake >= 3.14 - PostgreSQL (runtime) + libpq + libpqxx >= 7.0 - Boost (system) - nlohmann_json 3.x Установка зависимостей (Debian/Ubuntu): ```bash sudo apt-get install libboost-all-dev libpq-dev libpqxx-dev nlohmann-json3-dev cmake build-essential ``` ## Сборка ```bash ./configure.sh ``` Или вручную: ```bash mkdir -p build && cd build cmake .. make -j"$(nproc)" cd .. ``` Бинарник: `build/bin/cards` ## Конфигурация По умолчанию читает `config.json` из рабочей директории. Можно указать путь к другому файлу: ```bash ./build/bin/cards /path/to/config.json ``` ### Поля `config.json` **server** | Поле | Тип | Значение по умолчанию | |---|---|---| | address | string | `"0.0.0.0"` | | port | int | `8080` | | threads | int | `4` | **database** | Поле | Тип | Значение по умолчанию | |---|---|---| | host | string | `"localhost"` | | port | int | `5432` | | dbname | string | `"testdb"` | | user | string | `"postgres"` | | password | string | (пусто) | ### Переменные окружения Переопределяют соответствующие поля `config.json`: - `DB_HOST` - `DB_PORT` - `DB_NAME` - `DB_USER` - `DB_PASSWORD` Пример: ```bash DB_PASSWORD=secret ./build/bin/cards ``` ## API | Метод | Путь | Описание | |---|---|---| | GET | `/` | Случайная запись из таблицы `random_data` | | GET | `/health` | Проверка состояния сервера | ### Пример ответа `GET /` ```json { "id": 3, "name": "Gamma", "value": 300, "description": "Third test record", "created_at": "2025-01-01 12:00:00", "timestamp": 1735732800000000000 } ``` ### Пример ответа `GET /health` ```json { "status": "ok", "timestamp": 1735732800000000000 } ``` ## База данных При первом запуске автоматически создаётся таблица `random_data` и заполняется десятью тестовыми записями. Схема таблицы: ```sql CREATE TABLE random_data ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, value INTEGER NOT NULL, description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` ## Сборка deb-пакета ```bash cd build cmake .. cpack ``` Результат: `cards-1.0.0-Linux.deb` ## Завершение работы Для остановки сервера отправьте сигнал `SIGINT` (Ctrl+C) или `SIGTERM`.