cards/README.md

136 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`.