|
|
@@ -1,7 +1,22 @@
|
|
|
+/** Роль пользователя в системе: суперадмин, модератор, арендодатель, исполнитель или заказчик */
|
|
|
export type UserRole = 'superadmin' | 'moderator' | 'landlord' | 'executor' | 'customer'
|
|
|
|
|
|
+/** Статус пользователя: активен, заблокирован или ожидает верификации */
|
|
|
export type UserStatus = 'active' | 'banned' | 'pending_verification'
|
|
|
|
|
|
+/**
|
|
|
+ * Пользователь платформы
|
|
|
+ * @property id - Уникальный идентификатор
|
|
|
+ * @property email - Электронная почта
|
|
|
+ * @property role - Роль в системе
|
|
|
+ * @property status - Текущий статус
|
|
|
+ * @property name - Отображаемое имя (опционально)
|
|
|
+ * @property avatar_url - Ссылка на аватар (опционально)
|
|
|
+ * @property phone - Номер телефона (опционально)
|
|
|
+ * @property bio - Краткая биография (опционально)
|
|
|
+ * @property country - Страна (опционально)
|
|
|
+ * @property created_at - Дата регистрации
|
|
|
+ */
|
|
|
export interface User {
|
|
|
id: string
|
|
|
email: string
|
|
|
@@ -15,15 +30,45 @@ export interface User {
|
|
|
created_at: string
|
|
|
}
|
|
|
|
|
|
+/** Тип объекта: обычное место или студия */
|
|
|
export type PlaceType = 'place' | 'studio'
|
|
|
|
|
|
+/** Статус места: черновик, на модерации, опубликовано, отклонено или в архиве */
|
|
|
export type PlaceStatus = 'draft' | 'pending_moderation' | 'published' | 'rejected' | 'archived'
|
|
|
|
|
|
+/**
|
|
|
+ * Географические координаты
|
|
|
+ * @property lat - Широта
|
|
|
+ * @property lng - Долгота
|
|
|
+ */
|
|
|
export interface Coordinates {
|
|
|
lat: number
|
|
|
lng: number
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Место или студия для фотосъёмок
|
|
|
+ * @property id - Уникальный идентификатор
|
|
|
+ * @property type - Тип объекта (место или студия)
|
|
|
+ * @property title - Название
|
|
|
+ * @property description - Описание (опционально)
|
|
|
+ * @property address - Адрес (опционально)
|
|
|
+ * @property coordinates - Географические координаты
|
|
|
+ * @property cover_image - URL обложки (опционально)
|
|
|
+ * @property images - Массив URL изображений
|
|
|
+ * @property access_info - Информация о доступе (опционально)
|
|
|
+ * @property rating - Рейтинг
|
|
|
+ * @property reviews_count - Количество отзывов
|
|
|
+ * @property tags - Список тегов
|
|
|
+ * @property features - Список характеристик
|
|
|
+ * @property status - Статус публикации
|
|
|
+ * @property owner - Владелец (id, name, avatar_url)
|
|
|
+ * @property pricing - Ценообразование для студий (опционально)
|
|
|
+ * @property booking_url - Ссылка на бронирование (опционально)
|
|
|
+ * @property executor_services - Услуги исполнителей (опционально)
|
|
|
+ * @property created_at - Дата создания
|
|
|
+ * @property updated_at - Дата обновления (опционально)
|
|
|
+ */
|
|
|
export interface Place {
|
|
|
id: string
|
|
|
type: PlaceType
|
|
|
@@ -51,6 +96,15 @@ export interface Place {
|
|
|
updated_at?: string
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Услуга, предоставляемая исполнителем на месте съёмки
|
|
|
+ * @property id - Уникальный идентификатор
|
|
|
+ * @property title - Название услуги
|
|
|
+ * @property price - Стоимость
|
|
|
+ * @property currency - Валюта
|
|
|
+ * @property duration_minutes - Длительность в минутах (опционально)
|
|
|
+ * @property executor_name - Имя исполнителя
|
|
|
+ */
|
|
|
export interface ExecutorService {
|
|
|
id: string
|
|
|
title: string
|
|
|
@@ -60,12 +114,25 @@ export interface ExecutorService {
|
|
|
executor_name: string
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Тег (стиль съёмки)
|
|
|
+ * @property id - Уникальный идентификатор (slug)
|
|
|
+ * @property name - Отображаемое название
|
|
|
+ * @property category - Категория тега (опционально)
|
|
|
+ */
|
|
|
export interface Tag {
|
|
|
id: string
|
|
|
name: string
|
|
|
category?: string
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Характеристика места (напр. парковка, гримёрка)
|
|
|
+ * @property id - Уникальный идентификатор (slug)
|
|
|
+ * @property name - Отображаемое название
|
|
|
+ * @property category - Категория (опционально)
|
|
|
+ * @property icon - Иконка (опционально)
|
|
|
+ */
|
|
|
export interface Feature {
|
|
|
id: string
|
|
|
name: string
|
|
|
@@ -73,6 +140,22 @@ export interface Feature {
|
|
|
icon?: string
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Услуга фотографа / исполнителя
|
|
|
+ * @property id - Уникальный идентификатор
|
|
|
+ * @property executor_id - Идентификатор исполнителя
|
|
|
+ * @property title - Название услуги
|
|
|
+ * @property description - Описание (опционально)
|
|
|
+ * @property price - Стоимость
|
|
|
+ * @property currency - Валюта
|
|
|
+ * @property duration_minutes - Длительность в минутах (опционально)
|
|
|
+ * @property tags - Связанные теги
|
|
|
+ * @property rating - Рейтинг
|
|
|
+ * @property reviews_count - Количество отзывов
|
|
|
+ * @property portfolio_images - Фото портфолио
|
|
|
+ * @property status - Статус публикации
|
|
|
+ * @property created_at - Дата создания
|
|
|
+ */
|
|
|
export interface Service {
|
|
|
id: string
|
|
|
executor_id: string
|
|
|
@@ -89,6 +172,14 @@ export interface Service {
|
|
|
created_at: string
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Отзыв на место или услугу
|
|
|
+ * @property id - Уникальный идентификатор
|
|
|
+ * @property user - Автор отзыва (id, name, avatar_url)
|
|
|
+ * @property rating - Оценка
|
|
|
+ * @property text - Текст отзыва (опционально)
|
|
|
+ * @property created_at - Дата создания
|
|
|
+ */
|
|
|
export interface Review {
|
|
|
id: string
|
|
|
user: Pick<User, 'id' | 'name' | 'avatar_url'>
|
|
|
@@ -97,6 +188,17 @@ export interface Review {
|
|
|
created_at: string
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Бронирование студии или места
|
|
|
+ * @property id - Уникальный идентификатор
|
|
|
+ * @property place_id - Идентификатор места
|
|
|
+ * @property start_time - Время начала
|
|
|
+ * @property end_time - Время окончания
|
|
|
+ * @property status - Статус бронирования
|
|
|
+ * @property total_price - Общая стоимость (опционально)
|
|
|
+ * @property currency - Валюта
|
|
|
+ * @property comment - Комментарий (опционально)
|
|
|
+ */
|
|
|
export interface Booking {
|
|
|
id: string
|
|
|
place_id: string
|
|
|
@@ -108,12 +210,28 @@ export interface Booking {
|
|
|
comment?: string
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Ответ API с пагинацией на основе курсора
|
|
|
+ * @template T - Тип элементов списка
|
|
|
+ * @property data - Массив элементов
|
|
|
+ * @property next_cursor - Курсор для следующей страницы (опционально)
|
|
|
+ * @property has_more - Есть ли ещё элементы
|
|
|
+ */
|
|
|
export interface PaginatedResponse<T> {
|
|
|
data: T[]
|
|
|
next_cursor?: string
|
|
|
has_more: boolean
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Структура ошибки API (соответствует RFC 7807 Problem Details)
|
|
|
+ * @property type - URI типа ошибки
|
|
|
+ * @property title - Краткое описание ошибки
|
|
|
+ * @property status - HTTP-статус
|
|
|
+ * @property detail - Подробное описание
|
|
|
+ * @property instance - URI экземпляра ошибки (опционально)
|
|
|
+ * @property errors - Ошибки валидации полей (опционально)
|
|
|
+ */
|
|
|
export interface ApiError {
|
|
|
type: string
|
|
|
title: string
|