136 lines
2.9 KiB
Markdown
136 lines
2.9 KiB
Markdown
# 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`.
|