mirror of
https://github.com/Ti-webdev/0-hereconnect-obsidian.git
synced 2026-07-30 20:30:47 +00:00
8.6 KiB
8.6 KiB
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;
}