mirror of
https://github.com/Ti-webdev/0-hereconnect-obsidian.git
synced 2026-07-31 23:26:42 +00:00
234 lines
8.6 KiB
Markdown
234 lines
8.6 KiB
Markdown
```ts
|
|
import { Attachment } from 'pouchdb-core';
|
|
|
|
/**
|
|
* Базовый интерфейс для всех документов в базе данных.
|
|
* Содержит общие поля, такие как идентификатор, тип и дату создания.
|
|
*/
|
|
interface BaseDocument {
|
|
/** Уникальный идентификатор документа */
|
|
_id: string;
|
|
|
|
/** Тип документа */
|
|
type: string;
|
|
|
|
/** Дата создания документа в формате ISO */
|
|
created_at: string;
|
|
}
|
|
|
|
/**
|
|
* Интерфейс для документа пользователя.
|
|
* Содержит данные, такие как имя пользователя, уникальный UUID, email и роли.
|
|
*/
|
|
export interface UserDocument extends BaseDocument {
|
|
/** Тип документа, всегда 'user' */
|
|
type: 'user';
|
|
|
|
/** Имя пользователя */
|
|
name: string;
|
|
|
|
/** Уникальный UUID пользователя, не связанный с _id */
|
|
user_uuid: string;
|
|
|
|
/** Email пользователя */
|
|
email: string;
|
|
|
|
/** Роли пользователя (например, ['admin', 'user']) */
|
|
roles: string[];
|
|
|
|
/** Пароль пользователя (должен храниться в зашифрованном виде) */
|
|
password: string;
|
|
}
|
|
|
|
/**
|
|
* Интерфейс для документа QR-кода.
|
|
* Представляет QR-код, созданный пользователем, и информацию о привязанном объекте.
|
|
*/
|
|
export interface QRCodeDocument extends BaseDocument {
|
|
/** Тип документа, всегда 'qr_code' */
|
|
type: 'qr_code';
|
|
|
|
/** Уникальный URL для настройки и взаимодействия */
|
|
uri: string;
|
|
|
|
/** Идентификатор пользователя, который создал QR-код */
|
|
user_uuid: string;
|
|
|
|
/** Название объекта, для которого создан QR-код, например "Мой автомобиль" */
|
|
name: string;
|
|
|
|
/** Доступные действия для гостей (например, ["send_message"]) */
|
|
actions: string[];
|
|
}
|
|
|
|
/**
|
|
* Интерфейс для документа сообщения.
|
|
* Используется для хранения сообщений, отправленных через QR-код, с поддержкой вложений.
|
|
*/
|
|
export interface MessageDocument extends BaseDocument {
|
|
/** Тип документа, всегда 'message' */
|
|
type: 'message';
|
|
|
|
/** Идентификатор QR-кода, к которому относится сообщение */
|
|
qr_code: string;
|
|
|
|
/** Идентификатор чата для связывания сообщений */
|
|
chat: string;
|
|
|
|
/** Отправитель сообщения ('guest' или 'owner') */
|
|
from: 'guest' | 'owner';
|
|
|
|
/** Содержимое сообщения */
|
|
body: string;
|
|
|
|
/** Опциональная геопозиция (широта и долгота) */
|
|
location?: { lat: number; lng: number };
|
|
|
|
/** Вложения, такие как фото */
|
|
_attachments?: {
|
|
[key: string]: Attachment;
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Интерфейс для документа уведомления.
|
|
* Используется для хранения данных о push-уведомлениях и их статусе.
|
|
*/
|
|
export interface NotificationDocument extends BaseDocument {
|
|
/** Тип документа, всегда 'notification' */
|
|
type: 'notification';
|
|
|
|
/** Идентификатор пользователя, которому отправлено уведомление */
|
|
user_uuid: string;
|
|
|
|
/** Идентификатор QR-кода, связанного с уведомлением */
|
|
qr_code: string;
|
|
|
|
/** Идентификатор сообщения, к которому привязано уведомление */
|
|
message_id: string;
|
|
|
|
/** Статус уведомления ('sent', 'delivered', или 'read') */
|
|
status: 'sent' | 'delivered' | 'read';
|
|
|
|
/** Заголовок уведомления */
|
|
title: string;
|
|
|
|
/** Содержание уведомления */
|
|
body: string;
|
|
}
|
|
|
|
/**
|
|
* Интерфейс для документа чата.
|
|
* Хранит информацию о чате и участниках для организации истории взаимодействий.
|
|
*/
|
|
export interface ChatDocument extends BaseDocument {
|
|
/** Тип документа, всегда 'chat' */
|
|
type: 'chat';
|
|
|
|
/** Идентификатор QR-кода, к которому относится чат */
|
|
qr_code: string;
|
|
|
|
/** Время последнего сообщения в чате */
|
|
last_message_at: string;
|
|
|
|
/** Участники чата */
|
|
participants: { user_uuid: string, role: 'guest' | 'owner' }[];
|
|
}
|
|
|
|
/**
|
|
* Интерфейс для документа настроек.
|
|
* Используется для хранения пользовательских настроек, таких как уведомления и конфиденциальность.
|
|
*/
|
|
export interface SettingsDocument extends BaseDocument {
|
|
/** Тип документа, всегда 'settings' */
|
|
type: 'settings';
|
|
|
|
/** Идентификатор пользователя, которому принадлежат настройки */
|
|
user_uuid: string;
|
|
|
|
/** Опциональный идентификатор QR-кода, если настройки специфичны для него */
|
|
qr_code?: string;
|
|
|
|
/** Включены ли push-уведомления */
|
|
push_notifications: boolean;
|
|
|
|
/** Разрешено ли прикрепление геопозиции к сообщениям */
|
|
allow_geolocation: boolean;
|
|
|
|
/** Разрешены ли прикрепления фотографий */
|
|
allow_photo_attachments: boolean;
|
|
}
|
|
|
|
/**
|
|
* Интерфейс для документа аналитики.
|
|
* Используется для сбора данных о взаимодействиях с QR-кодом для анализа активности.
|
|
*/
|
|
export interface AnalyticsDocument extends BaseDocument {
|
|
/** Тип документа, всегда 'analytics' */
|
|
type: 'analytics';
|
|
|
|
/** Идентификатор QR-кода, который был отсканирован */
|
|
qr_code: string;
|
|
|
|
/** Действие пользователя ('scan', 'message_sent', 'photo_attached') */
|
|
action: 'scan' | 'message_sent' | 'photo_attached';
|
|
|
|
/** Идентификатор пользователя, если он авторизован (опционально) */
|
|
user_uuid?: string;
|
|
|
|
/** Время действия */
|
|
timestamp: string;
|
|
|
|
/** Опциональная геопозиция при сканировании */
|
|
location?: { lat: number; lng: number };
|
|
}
|
|
|
|
/**
|
|
* Интерфейс для документа подписки.
|
|
* Используется для хранения подписок на push-уведомления.
|
|
*/
|
|
export interface SubscriptionDocument extends BaseDocument {
|
|
/** Тип документа, всегда 'subscription' */
|
|
type: 'subscription';
|
|
|
|
/** Идентификатор пользователя, подписанного на уведомления */
|
|
user_uuid: string;
|
|
|
|
/** URL конечной точки для отправки уведомлений */
|
|
endpoint: string;
|
|
|
|
/** Ключи для шифрования и авторизации уведомлений */
|
|
keys: {
|
|
p256dh: string;
|
|
auth: string;
|
|
};
|
|
|
|
/** Время истечения подписки, если доступно */
|
|
expirationTime?: number;
|
|
}
|
|
|
|
/**
|
|
* Интерфейс для документа аудита.
|
|
* Хранит записи действий пользователей для обеспечения безопасности и аудита.
|
|
*/
|
|
export interface AuditLogDocument extends BaseDocument {
|
|
/** Тип документа, всегда 'audit_log' */
|
|
type: 'audit_log';
|
|
|
|
/** Идентификатор пользователя, совершившего действие (если авторизован) */
|
|
user_uuid?: string;
|
|
|
|
/** Действие ('create_qr', 'send_message', 'read_message', 'delete_message') */
|
|
action: 'create_qr' | 'send_message' | 'read_message' | 'delete_message';
|
|
|
|
/** Опциональный идентификатор QR-кода, если действие связано с ним */
|
|
qr_code?: string;
|
|
|
|
/** Дополнительная информация о действии */
|
|
details?: string;
|
|
|
|
/** Время действия */
|
|
timestamp: string;
|
|
}
|
|
|
|
``` |