Skip to content

DTO

DTO (Data Transfer Objects) — это TypeScript-описания форматов запросов и ответов бэкенда. Они организованы по доменам в src/dto/<домен>/, по одному типу на файл, и реэкспортируются из корня пакета.

ts
import type {
  ClientDto,
  CreateClientRequestDto,
  ClientStatusDto,
} from '@diealltagsfeen/frontend-api-client'

Категории типов

Суффикс / формаНазначениеПример
XxxDto (interface)Сущность из ответаClientDto, InsuranceDto
XxxDto / XxxParam (enum)Перечисление с бэкенд-кодамиClientStatusDto, GenderParam
CreateXxxRequestDto / UpdateXxxRequestDtoТело POST/PUT-запросаCreateClientRequestDto
GetXxxResponseDtoФорма успешного ответаGetWorkTimeSettingsResponseDto
GetXxxRequestDto / XxxRequestParamПараметры GET-запросаGetClientsRequestDto

Сущности

Сущности — это interface с типизированными (часто вложенными) полями:

ts
export interface InsuranceDto {
  id: number
  number?: string | null
  type?: InsuranceTypeDto | null
  clientId: number
  insuranceCompanyId?: number | null
  coveragePercentage?: number | null
  insuranceCompany?: InsuranceCompanyDto | null
}

Перечисления (enum)

Статусы, типы и категории — это TypeScript-enum, числовые значения которых совпадают с кодами бэкенда:

ts
export enum ClientStatusDto {
  WaitClientCall = 101,
  InProgress = 400,
  Closed = 901,
  Archived = 902,
}

Использование вместо «магических чисел»:

ts
import { ClientStatusDto } from '@diealltagsfeen/frontend-api-client'

await clientService.UpdateStatus({ clientId: 123, status: ClientStatusDto.InProgress })

Метки и цвета для UI

Сами по себе DTO-перечисления не содержат i18n-ключей и цветов — это чисто значения, синхронизированные с бэкендом. Отображаемые названия, цвета и иконки статусов задаются на стороне приложения-потребителя.

Пагинация

Общие типы пагинации лежат в dto/common:

ts
// запрос (frontend-форма; сервис маппит page → Pagination.CurrentPage)
interface Pagination {
  page: number
  rowsPerPage: number
  sortBy: string
  descending: boolean
}

// ответ — конверт со списком и общим количеством
interface PaginationResult<T> {
  values: T[]
  totalCount: number
}

Типизация ответа со списком:

ts
const result = await workerService.GetTable(queryString)
if (result) {
  const page = result.pagination as PaginationResult<WorkerDto>
  page.values.forEach(useWorker)
}

Где смотреть полный список

Полный перечень DTO по доменам с таблицами полей, типов, обязательности и примерами JSON — в разделе API Reference → DTO. При наличии бэкенд-snapshot документация дополняется C#-типами и числовыми кодами enum.