mirror of
https://github.com/Ti-webdev/0-hereconnect-obsidian.git
synced 2026-07-30 20:30:47 +00:00
vault backup: 2025-05-14 11:23:52
This commit is contained in:
+234
@@ -0,0 +1,234 @@
|
||||
```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;
|
||||
}
|
||||
|
||||
```
|
||||
Reference in New Issue
Block a user