60 lines
3.3 KiB
Plaintext
60 lines
3.3 KiB
Plaintext
---
|
|
description:
|
|
globs: components/sdk/**
|
|
alwaysApply: false
|
|
---
|
|
|
|
# Руководство по работе с GraphQL Zeus в SDK
|
|
|
|
## Основной процесс
|
|
|
|
1. **Анализ DTO бэкенда**:
|
|
- Изучите структуру DTO классов (`@ObjectType`) в бэкенде
|
|
- Обратите внимание на имена типов в декораторах `@ObjectType('ИмяТипа')`
|
|
- Отметьте поля, связи и вложенные объекты
|
|
|
|
2. **Создание селекторов**:
|
|
- Для каждого DTO создайте соответствующий селектор с именем `raw<ИмяТипа>Selector`
|
|
- Селектор - это объект, где ключи соответствуют полям DTO, а значения - `true`
|
|
- Для вложенных объектов используйте вложенные селекторы: `field: nestedSelector`
|
|
- Для списков используйте один селектор без массива: `items: itemSelector`
|
|
|
|
3. **Валидация селекторов**:
|
|
- Для каждого селектора создайте проверку типа:
|
|
```typescript
|
|
const _validate: MakeAllFieldsRequired<ValueTypes['ТочноеИмяГрафКьЭлТипа']> = rawSelector
|
|
```
|
|
- Имя типа должно точно совпадать с именем в декораторе `@ObjectType`
|
|
|
|
4. **Экспорт селекторов**:
|
|
- Создайте финальный селектор с помощью функции `Selector`:
|
|
```typescript
|
|
export const typeSelector = Selector('ТочноеИмяГрафКьЭлТипа')(rawTypeSelector)
|
|
```
|
|
- Экспортируйте сырой селектор для переиспользования
|
|
- Экспортируйте тип модели: `export type modelType = ModelTypes['ТочноеИмяГрафКьЭлТипа']`
|
|
|
|
5. **Создание запросов/мутаций**:
|
|
- Используйте селекторы в запросах и мутациях:
|
|
```typescript
|
|
export const query = Selector('Query')({
|
|
queryName: [{ data: $('data', 'ТочноеИмяВходногоТипа!') }, exportedSelector]
|
|
})
|
|
```
|
|
- Для параметров используйте оператор `$` с точным именем входного типа
|
|
- Создайте интерфейс входных данных:
|
|
```typescript
|
|
export interface IInput {
|
|
data: ModelTypes['ТочноеИмяВходногоТипа']
|
|
}
|
|
```
|
|
|
|
## Особенности работы
|
|
|
|
- **Документы**: всегда сохраняйте структуру `{ hash, signatures, rawDocument }`
|
|
- **Сложные DTO**: разбивайте на атомарные селекторы и комбинируйте их
|
|
- **Типы в Zeus**: часто отличаются от имен классов в бэкенде, всегда проверяйте в `schema.gql`
|
|
- **Массивы**: Zeus автоматически обрабатывает массивы, не используйте `[selector]`
|
|
|
|
Это руководство поможет правильно структурировать работу с SDK и избежать типичных ошибок при работе с Zeus.
|