From 5b603fea314dc2ac4bb158d3a746a228a9af5bee Mon Sep 17 00:00:00 2001 From: Vasilii Mikhailovskii Date: Wed, 14 May 2025 15:03:57 +0200 Subject: [PATCH] vault backup: 2025-05-14 15:03:57 --- Структура база данных.md | 115 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 Структура база данных.md diff --git a/Структура база данных.md b/Структура база данных.md new file mode 100644 index 0000000..2521e79 --- /dev/null +++ b/Структура база данных.md @@ -0,0 +1,115 @@ + +## Пользователь (User) +Документ, представляющий пользователя, который создает QR-коды для своих объектов. + +Этот пример документа пользователя (org.couchdb.user:) относится к встроенному формату CouchDB для управления учетными записями и доступом к базе данных. CouchDB поддерживает такие документы для аутентификации и управления правами пользователей, что позволяет контролировать доступ к базе данных на уровне CouchDB. + +### Описание полей пользователя + +| Поле | Описание | +|----------------|----------------------------------------------------------------------------------------------------------| +| `_id` | Уникальный идентификатор документа, в формате `org.couchdb.user:` (например, `org.couchdb.user:ivan.ivanov`). | +| `name` | Имя пользователя, соответствует username (например, `ivan.ivanov`). | +| `type` | Тип документа, всегда равен `"user"`. | +| `user_uuid` | Уникальный идентификатор пользователя, не ссылается на `_id` (например, `01931a8b-220c-76df-943c-ea23313c7c65`). | +| `email` | Email пользователя для связи (например, `ivan@example.com`). | +| `created_at` | Дата и время создания учетной записи пользователя в формате ISO 8601 (например, `"2024-11-10T10:00:00Z"`). | +| `roles` | Массив ролей, по умолчанию пуст. | +| `password` | Пароль пользователя в текстовом виде. **(Примечание: использовать безопасное хранение паролей рекомендуется)**. | + + +Добавление документа типа org.couchdb.user позволяет CouchDB управлять доступом к базе данных. Этот документ создается, когда необходимо, чтобы пользователь имел доступ к базе данных через CouchDB. +CouchDB будет использовать такие документы для аутентификации пользователей, когда они подключаются к базе данных, запрашивая имя пользователя и пароль. + +### Пример документа пользователя в CouchDB +```json +{ + "_id": "org.couchdb.user:ivan.ivanov", + "name": "ivan.ivanov", + "type": "user", + "email": "ivan@example.com", + "user_uuid": "01931a8b-220c-76df-943c-ea23313c7c65", + "created_at": "2024-11-10T10:00:00Z", + "roles": [], + "password": "plaintext_password" +} +``` +Примечание: CouchDB преобразует password в защищенный хэш при сохранении, поэтому в итоговом документе хранится зашифрованный пароль, а не открытый текст. + + +## QR-код (QR-Code) +Документ, представляющий QR-код, созданный пользователем для связи через конкретный объект (например, автомобиль или квартиру). Этот документ содержит информацию об объекте, для которого создан QR-код, а также доступные действия для взаимодействия гостей, сканирующих QR-код. + +Этот документ служит для хранения данных о каждом уникальном QR-коде, созданном пользователем. Он обеспечивает: + +1. Идентификацию и короткий URL для доступа к QR-коду через URI. +2. Информацию об объекте и разрешенных действиях. +3. Возможность фильтрации активных и неактивных QR-кодов. + +### Описание полей QR-кода + +| Поле | Описание | +|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `_id` | Уникальный идентификатор документа, составленный из типа (`qr_code`) и значения `qr_code` (например, `qr_code:4n8x9z7q`). | +| `type` | Тип документа, всегда равен `"qr_code"`. | +| `uri` | Уникальный идентификатор QR-кода длиной 8 символов, используется для создания короткого URL (например, `4n8x9z7q`). | +| `url` | Уникальная ссылка для QR-кода, ведущая к целевой странице взаимодействия (например, "https://hereconnect.condev.ru/4n8x9z7q").| +| `user_uuid` | Уникальный идентификатор пользователя, создавшего QR-код (например, `01931a8b-220c-76df-943c-ea23313c7c65`). | +| `browser_uuid` | Идентификатор браузера, через который был создан QR-код (например, `c06782be-c092-4831-b0e6-375078362a42`). | +| `name` | Название объекта, для которого создан QR-код (например, "Мой автомобиль"). Отображается гостю на целевой странице. | +| `placement` | Тип объекта, для которого создан QR‑код, например "car" | +| `actions` | Список действий, доступных для гостей, сканирующих QR-код. Возможные значения: `"send_message"` (отправить сообщение), `"share_location"` (поделиться геопозицией). | +| `created_at` | Дата и время создания QR-кода в формате ISO 8601 (например, `"2024-11-10T10:05:00Z"`). | + +Пример документа QR-кода: +```json +{ + "_id": "qr_code:4n8x9z7q", + "type": "qr_code", + "uri": "4n8x9z7q", + "url": "https://hereconnect.condev.ru/4n8x9z7q", + "user_uuid": "01931a8b-220c-76df-943c-ea23313c7c65", + "browser_uuid": "c06782be-c092-4831-b0e6-375078362a42", + "name": "Мой автомобиль", + "placement": "car", + "actions": ["send_message", "share_location"], + "created_at": "2024-11-10T10:05:00Z" +} +``` + +uri — короткий, уникальный идентификатор для QR-кода, используемый для создания URL. +url — полноценная ссылка, ведущая к целевой странице взаимодействия, которую может сканировать гость для начала общения. + +## Сообщение (Message) +Документ, представляющий сообщения от гостя и ответы владельца, отправленные в рамках конкретного взаимодействия с QR-кодом. Все сообщения, связанные с одним QR-кодом, сгруппированы по `session` для отслеживания всех взаимодействий в рамках одной сессии, что создает упрощенную структуру для общения. + +### Описание полей сообщения + +| Поле | Описание | +|---------------|-------------------------------------------------------------------------------------------------------------------------------------| +| `_id` | Уникальный идентификатор сообщения, составленный из `message:::`. Например, `message:4n8x9z7q:1731317710358:1731317710358`. | +| `type` | Тип документа, всегда равен `"message"`. | +| `qr_code_uri` | Уникальный идентификатор QR-кода, с которым связано сообщение (например, `"4n8x9z7q"`). | +| `chat` | Идентификатор сессии, представляющий начало взаимодействия, используемый для группировки сообщений (например, `"1731317710358"`). | +| `created_at` | Метка времени создания сообщения в формате `timestamp` (например, `"1731317710358"`). | +| `from` | Источник сообщения: `"guest"` для гостя или `"owner"` для владельца. | +| `content` | Текст сообщения (например, `"Ваша машина мешает проезду"`). | +| `location` | (Опционально) Геолокация гостя в формате координат (например, `{"lat": 55.7558, "lng": 37.6176}`). | + +### Пример документа сообщения + +```json +{ + "_id": "message:4n8x9z7q:1731317710358:1731317710358", + "type": "message", + "qr_code_uri": "4n8x9z7q", + "chat": "1731317710358", + "created_at": "1731317710358", + "from": "guest", + "content": "Ваша машина мешает проезду", + "location": { + "lat": 55.7558, + "lng": 37.6176 + } +} +```