Files
tf_provider/docs/TODO/client_go_split.md
T

35 lines
2.4 KiB
Markdown

# TODO: разбить `provider/internal/core/client.go`
Файл разросся до **1678 строк** — монолит, смешаны зоны ответственности. Разбить на отдельные файлы в пакете `core` (мелкими модулями).
⚠️ НЕ трогать без явной команды. Только рефакторинг-план.
## Предлагаемое разбиение
| Файл | Зона ответственности |
|---|---|
| `client.go` | Core-структура `UniversalClient`, конструктор, `doRequest`, retry, `buildURL`, sanitize auth |
| `client_http.go` | `doRequest`, `formatAPIError`, retry-логика, `User-Agent`/DDoS-Guard |
| `instance_find.go` | `FindInstanceByDisplayName` (+search/fallback-пути, `isInstanceDeleted`, `isInstanceDeletedError`) |
| `instance_state.go` | `GetInstanceStateRaw`, `GetInstanceState`, `GetInstanceStateParams`, `GetInstanceStateDetails`, `validateInstanceStatus` |
| `instance_create.go` | `CreateGenericInstanceUniversalV6`, `createInstanceWithContext` |
| `instance_operation.go` | `RunInstanceOperationUniversal`, `RunInstanceOperationUniversalWithDefaults`, `RunInstanceOperationUniversalByCode`, `RunRedeployOperation`, `fetchOperationCfsParams` |
| `operation_wait.go` | `waitForOperationFinish`, `waitForInstanceIdle`, печать этапов |
| `params_ref.go` | `resolveRefSvcParamValues`, `resolveRefSvcParams`, `ResolveRefSvcParamValue`, `ResolveS3UidInAllMapFixed` |
| `params_norm.go` | `normalizeUniversalValueV6`, `buildMapFixedDefault`, `normalizeInstanceParamValue` |
| `instance_output.go` | (уже вынесено отдельно) `instance_outputs.go` |
| `instance_params.go` | (уже отдельно) `instance_params.go` |
## Уже вынесено (не трогать)
- `instance_params.go`
- `instance_outputs.go`
- `refsvc_resolve.go`
## Правила при рефакторинге
1. Только перенос функций — без изменения логики (чистый move).
2. Сохранить `debug(...)`-логи и комментарии `// НЕ МЕНЯТЬ`.
3. `go build ./... && go vet ./internal/core/` после каждого шага.
4. Коммит после каждого вынесенного блока (правило «коммит после каждой правки»).