117 lines
4.7 KiB
Markdown
117 lines
4.7 KiB
Markdown
# Follow-up Questions (q-003)
|
||
|
||
## Структура данных для переменных окружения
|
||
|
||
3. **Тип `Env` содержит только `Name` и `Path`:**
|
||
```golang
|
||
type Env struct {
|
||
Name string `json:"name"`
|
||
Path string `json:"path"`
|
||
}
|
||
```
|
||
|
||
Но `parseLocals` возвращает `map[K]map[string]any` — т.е. `filename → (key → value)`.
|
||
|
||
**Вопрос:** Где хранятся сами переменные (key-value pairs)?
|
||
- (a) Нужен отдельный тип `EnvVar` с ключом и значением?
|
||
- (b) Добавить поле `Vars map[string]string` в `Env`?
|
||
- (c) Переменные хранятся только на сервере, `Env` — только metadata?
|
||
|
||
Answer: Переменные окружения бывают не только строками, учти это и создай подходящую структуру;
|
||
---
|
||
|
||
## Создание проекта
|
||
|
||
4. **Как создаётся новый проект?**
|
||
- `project save -n` — обновляет имя существующего проекта
|
||
- `project remove` — удаляет проект
|
||
- **Нет команды для создания проекта**
|
||
|
||
Варианты:
|
||
- (a) `aevs project create -n "name"` — отдельная команда
|
||
- (b) `aevs sync` создаёт проект автоматически, если `project_id` в конфиге пустой
|
||
- (c) Проекты создаются только через веб-интерфейс сервера
|
||
|
||
Answer: (b)
|
||
|
||
---
|
||
|
||
## Инициализация конфига
|
||
|
||
5. **Как создаётся `aevs.yaml` впервые?**
|
||
- `aevs sync` без конфига → ошибка "no config found"
|
||
|
||
Варианты:
|
||
- (a) Пользователь создаёт вручную
|
||
- (b) Команда `aevs init` создаёт шаблон конфига
|
||
- (c) `aevs init` + интерактивные промпты (project name, api_key, scan for env files)
|
||
|
||
Answer: (c)
|
||
|
||
---
|
||
|
||
## Merge: контекст проекта
|
||
|
||
6. **Команда `aevs merge -v "ts1 ts2"` — как определяется проект?**
|
||
- Сейчас нет `-c, --config` флага в описании merge
|
||
- Версии принадлежат конкретному проекту
|
||
|
||
**Нужно добавить:**
|
||
- `-c, --config` для чтения `project_id` из конфига?
|
||
- Или `-p, --project {uuid}` для явного указания?
|
||
|
||
Answer: Нужно добавить оба флага как опциональные, если ни одного нет выводить ошибку
|
||
|
||
---
|
||
|
||
## Sync: "save into current version"
|
||
|
||
7. **В sync описаны два варианта:**
|
||
> - result files creates new version
|
||
> - result files should be saved into current version
|
||
|
||
**Вопрос по второму варианту:**
|
||
- "Save into current version" = обновление существующей версии in-place?
|
||
- Не создаст ли это конфликты, если другой пользователь уже синхронизировался с этой версией?
|
||
- Или имеется в виду что-то другое?
|
||
|
||
Answer: да, ты прав, это создаст конфликты, поэтому всегда создавай новые версии, пока их кто-то не смерджит;
|
||
|
||
---
|
||
|
||
## Wrangler reference
|
||
|
||
8. **По поводу wrangler:**
|
||
Изучил — Cloudflare wrangler использует REST API с Bearer token authentication.
|
||
|
||
**Предлагаю для aevs:**
|
||
```
|
||
Base URL: configurable (e.g., https://api.aevs.io)
|
||
Auth: Header `Authorization: Bearer {api_key}`
|
||
Format: JSON
|
||
|
||
Endpoints:
|
||
GET /projects → []Project
|
||
POST /projects → Project (create)
|
||
PATCH /projects/{id} → Project (update name)
|
||
DELETE /projects/{id} → void
|
||
|
||
GET /projects/{id}/versions → []Version
|
||
POST /projects/{id}/versions → Version (create)
|
||
GET /projects/{id}/versions/{ts} → Version (with full env data)
|
||
PATCH /projects/{id}/versions/{ts} → Version (update state/merge)
|
||
```
|
||
|
||
**Подходит такой интерфейс?**
|
||
Answer: да;
|
||
|
||
---
|
||
|
||
## Server Base URL
|
||
|
||
9. **Где хранится URL сервера?**
|
||
- В конфиге `aevs.yaml`?
|
||
- В environment variable (e.g., `AEVS_API_URL`)?
|
||
- Захардкожен для MVP?
|
||
Answer: давай указывать его в конфиге;
|