feat: auth/stars API, collections and publish routes, star/author migrations

This commit is contained in:
loki5512344 2026-10-04 12:47:20 +02:00
parent 43cf0e277d
commit 65820d4ef9
Signed by: boba
GPG key ID: 253067914055423B
43 changed files with 2008 additions and 408 deletions

View file

@ -1,10 +1,10 @@
# Git-стратегия — почему монорепо
# Git-стратегия - почему монорепо
## Решение (ADR-001)
**Выбрано: монорепо в корне `/` с двумя пакетами `indexium-backend/` и `indexium-frontend/`.**
Альтернатива — полирепо (два отдельных git) — отклонена на старте.
Альтернатива - полирепо (два отдельных git) - отклонена на старте.
## Почему монорепо
@ -16,11 +16,11 @@
| Версионирование контрактов | Фронт всегда соответствует бэку в `main` | Нужен отдельный версионинг |
| Стоимость поддержки | Минимальна для 1-3 человек | Оверхед: 2 набора настроек, 2 issue-треккера |
Монорепо оправдан пока команда <10 человек и релизный цикл единый. Если в будущем бэкенд и фронт разойдутся по командам/каденсу — легко разрезать через `git filter-repo` или `git subtree`.
Монорепо оправдан пока команда <10 человек и релизный цикл единый. Если в будущем бэкенд и фронт разойдутся по командам/каденсу - легко разрезать через `git filter-repo` или `git subtree`.
## Что было сделано
1. Удалён пустой `.git` из `indexium-backend/` (коммитов не было — безопасно).
1. Удалён пустой `.git` из `indexium-backend/` (коммитов не было - безопасно).
2. `git init --initial-branch=main` в корне `Indexium/`.
3. Корневой `.gitignore` + локальные.
4. Весь код теперь трекается как:
@ -38,8 +38,8 @@
## Workflow
### Ветки
- `main` — защищённая, только через PR.
- `feat/<scope>-<short>` — фичи, напр. `feat/webhook-hmac`.
- `main` - защищённая, только через PR.
- `feat/<scope>-<short>` - фичи, напр. `feat/webhook-hmac`.
- `fix/<scope>-<short>`.
### Коммиты (Conventional Commits)
@ -52,7 +52,7 @@ chore(frontend): bump svelte 5.56 → 5.57
### PR
- Один PR = одна фича/фикс.
- Если меняется API — в том же PR обновляется `docs/api-spec.md` и фронт-клиент.
- Если меняется API - в том же PR обновляется `docs/api-spec.md` и фронт-клиент.
- CI должен пройти: `cargo fmt --check`, `cargo clippy`, `cargo test`, `svelte-check`.
### Локально
@ -70,17 +70,17 @@ git push -u origin feat/my-feature
Сигналы что пора:
- >10 активных контрибьюторов, частые конфликты в `main`.
- Фронт деплоится 10× в день, бэк — 1× в неделю (разный каденс).
- Фронт деплоится 10× в день, бэк - 1× в неделю (разный каденс).
- Нужны разные права доступа (внешние контрибьюторы только к фронту).
Как резать: `git subtree split -P indexium-backend -b backend-only` и аналогично для фронта, либо `git filter-repo --path`.
## Альтернативы (для справки)
- **Git submodules** — не рекомендуется: сложны, легко сломать, плохой DX.
- **Polyrepo + shared package** — имеет смысл если выносить `openapi`/`types` в отдельный npm/crate.
- **Git submodules** - не рекомендуется: сложны, легко сломать, плохой DX.
- **Polyrepo + shared package** - имеет смысл если выносить `openapi`/`types` в отдельный npm/crate.
## ADR
- ADR-001: Монорепо vs полирепо — принято монорепо (этот документ).
- ADR-001: Монорепо vs полирепо - принято монорепо (этот документ).
- Следующие ADR складывать в `docs/adr/NNN-title.md`.