build service
Deploy frontend / frontend (push) Failing after 46s

This commit is contained in:
2024-12-03 11:11:44 +02:00
parent 94bd0a6a62
commit c8b164e7d7
20 changed files with 147 additions and 46 deletions
@@ -0,0 +1,16 @@
/**
* Базовый интерфейс для всех документов в базе данных.
* Содержит общие поля, такие как идентификатор, тип и дату создания.
*/
export interface BaseDocument {
/** Уникальный идентификатор документа */
_id: string
_rev?: string
/** Тип документа */
type: string
/** Дата создания документа в формате ISO */
created_at: string
}
@@ -0,0 +1,37 @@
import { type BaseDocument } from "./BaseDocument";
import type { Role } from "./Role";
/**
* Интерфейс для документа сообщения.
* Используется для хранения сообщений, отправленных через QR‑код, с поддержкой вложений.
*/
export interface MessageDocument extends BaseDocument {
/** Тип документа, всегда 'message' */
type: "message";
/** Идентификатор QR‑кода, к которому относится сообщение */
qr_code_uri: string;
/** Идентификатор чата для связывания сообщений */
chat: string;
/** Отправитель сообщения ('guest' или 'owner') */
from: Role;
/** Содержимое сообщения */
body: string;
/** Опциональная геопозиция (широта и долгота) */
location?: { lat: number; lng: number };
/** Идентификатор пользователя, отправившего сообщение */
user_uuid: string;
/** Идентификатор браузера, отправившего сообщение */
browser_uuid: string;
/** Вложения, такие как фото */
// _attachments?: {
// [key: string]: Attachment
// }
}
@@ -0,0 +1,16 @@
import type { BaseDocument } from "./BaseDocument";
export interface PublicSettingsDocument extends BaseDocument {
_id: string; // Формат: "public_settings:<name>"
type: "public_settings";
/**
* Название настройки
*/
name: string;
/**
* Значение настройки
*/
value: string;
}
@@ -0,0 +1,47 @@
import type { BaseDocument } from "./BaseDocument";
export type ContactInfo = {
name?: string;
phone?: string;
email?: string;
};
/**
* Интерфейс для документа QR‑кода.
* Представляет QR‑код, созданный пользователем, и информацию о привязанном объекте.
*/
export interface QRCodeDocument extends BaseDocument {
/** Идентификатор документа, в формате "qr_code:<uuid>" */
_id: string;
/** Тип документа, всегда 'qr_code' */
type: "qr_code";
/** Уникальный URL для настройки и взаимодействия */
uri: string;
/** Ссылка на QR‑код */
url: string;
/** Идентификатор пользователя, который создал QR‑код */
user_uuid: string;
/** Идентификатор браузера, через который был создан QR-код */
browser_uuid: string;
/** Название объекта, для которого создан QR‑код, например "Мой автомобиль" */
name: string;
messageDeliveryMethod: "telegram" | "webPush";
/** Тип объекта, для которого создан QR‑код, например "car" */
placement: "car" | "pet" | "door" | "store" | "restaurant_table" | "other";
/** Доступные действия для гостей (например, ["send_message"]) */
actions: string[];
/** Предустановленное сообщение для гостей */
predefinedMessages?: string[];
contactInfo?: ContactInfo;
}
+1
View File
@@ -0,0 +1 @@
export type Role = "guest" | "owner";
@@ -0,0 +1,24 @@
import type { BaseDocument } from "./BaseDocument";
type MessageDeliveryMethodWebPushVapid = {
name: "message_delivery_method_web_push_vapid";
value: {
subject: string;
keys: {
publicKey: string;
privateKey: string;
};
};
};
type MessageDeliveryMethodWebPushGcmApiKey = {
name: "message_delivery_method_web_push_gcm_api_key";
value: string;
};
export type ServerSettingsDocument = (
| MessageDeliveryMethodWebPushVapid
| MessageDeliveryMethodWebPushGcmApiKey
) & {
_id: string; // Формат: "server_settings:<name>"
type: "server_settings";
} & BaseDocument;
@@ -0,0 +1,31 @@
import { type BaseDocument } from "./BaseDocument";
import type { Role } from "./Role";
/**
* Интерфейс для документа настройки чата.
* Используется для хранения настроек чата пользователя.
*/
export interface UserChatSettingsDocument extends BaseDocument {
/** Тип документа, всегда 'message' */
type: "user_chat_settings";
/** Идентификатор QR‑кода, к которому относится сообщение */
qr_code_uri: string;
/** Идентификатор чата для связывания сообщений */
chat: string;
user_chat_role: Role;
/** Идентификатор пользователя, отправившего сообщение */
user_uuid: string;
/** Идентификатор браузера, отправившего сообщение */
browser_uuid: string;
/** Включены ли push-уведомления */
is_push_notification_enabled: boolean;
/** Дата последнего обновления */
updated_at?: string;
}
@@ -0,0 +1,25 @@
import type { BaseDocument } from './BaseDocument'
/**
* Интерфейс для документа пользователя.
* Содержит данные, такие как имя пользователя, уникальный 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
}
@@ -0,0 +1,14 @@
import type { BaseDocument } from "./BaseDocument";
import type { PushSubscription } from "web-push";
export interface WebPushSubscriptionDocument<
Subscription extends PushSubscription | PushSubscriptionJSON,
> extends BaseDocument {
_id: string; // Формат: "web_push_subscription:<user_uuid>:<browser_uuid>"
type: "web_push_subscription";
user_uuid: string; // UUID пользователя, связанного с подпиской
browser_uuid: string; // UUID браузера, связанного с подпиской
subscription: Subscription;
created_at: string; // Дата создания подписки в ISO формате
updated_at?: string; // Дата последнего обновления подписки
}
+9
View File
@@ -0,0 +1,9 @@
export * from "./Role";
export * from "./BaseDocument";
export * from "./MessageDocument";
export * from "./PublicSettingsDocument";
export * from "./QRCodeDocument";
export * from "./ServerSettingsDocument";
export * from "./UserDocument";
export * from "./UserChatSettingsDocument";
export * from "./WebPushSubscriptionDocument";
+1
View File
@@ -0,0 +1 @@
export * from "./DBDocuments";