Files
HereConnect-obsidian/Структура база данных.md

11 KiB

Пользователь (User)

Документ, представляющий пользователя, который создает QR-коды для своих объектов.

Этот пример документа пользователя (org.couchdb.user:%username%) относится к встроенному формату CouchDB для управления учетными записями и доступом к базе данных. CouchDB поддерживает такие документы для аутентификации и управления правами пользователей, что позволяет контролировать доступ к базе данных на уровне CouchDB.

Описание полей пользователя

Поле Описание
_id Уникальный идентификатор документа, в формате org.couchdb.user:<username> (например, 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

{
    "_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-кода:

{
  "_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:<qr_code_uri>:<session>:<message_timestamp>. Например, 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}).

Пример документа сообщения

{
  "_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
  }
}