## Пользователь (User) Документ, представляющий пользователя, который создает QR-коды для своих объектов. Этот пример документа пользователя (org.couchdb.user:%username%) относится к встроенному формату 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 } } ```