Закрывает W2 эпика #53: SQL-бэкенд реально ходит в БД Community Server (MySQL 8.0), доказано интеграционным тестом и тестом на фасаде.
Что сделано
Client.SQLFileStore() (FileStore, error) — open SQL-стора из env (ONLYOFFICE_DSN / ONLYOFFICE_PG_*).
Client.FileStore("pg"|"sql"|"postgres"|"mysql") теперь отдаёт SQL-стор; при ошибке открытия — errStore (не nil, ошибка на каждом вызове).
readOrder фасада: postgres → mysql → rest → dav (стор, зарегистрированный под своим именем mysql, тоже выбирается для чтения).
TestIntegrationPGStore зелёный на реальном DSN; Download-шаг корректно skip без MINIO_*.
TestIntegrationSQLFacade — доказательство, что фасад читает через SQL: Read().Name() = SQL, Entry.Provider == "mysql" (REST даёт rest), сверка Stat/List с REST, плюс прямой FileStore("pg").
Unit: маршрутизация SQL-имён без DSN, readOrder, приоритет mysql-стора.
Docs: docs/community-server-db.md (туннель 3306, креды/путь без паролей, использование через фасад, ограничение Disc vs MinIO), docs/unified-file-client.md, README, AGENTS.
Проверка
go build ./..., go vet ./..., go test ./..., go test -race ./... — зелёные.
go test -tags=integration -run 'TestIntegrationPGStore|TestIntegrationSQLFacade' — PASS/PASS на живом MySQL (VM onlyoffice-v2, DSN через SSH-туннель).
Без DSN — оба теста SKIP. gitleaks: no leaks; секреты только именами ENV.
Не мержу и не закрываю issue — жду ревью PO.
Закрывает W2 эпика #53: SQL-бэкенд реально ходит в БД Community Server (MySQL 8.0), доказано интеграционным тестом и тестом на фасаде.
## Что сделано
- `Client.SQLFileStore() (FileStore, error)` — open SQL-стора из env (`ONLYOFFICE_DSN` / `ONLYOFFICE_PG_*`).
- `Client.FileStore("pg"|"sql"|"postgres"|"mysql")` теперь отдаёт SQL-стор; при ошибке открытия — `errStore` (не `nil`, ошибка на каждом вызове).
- `readOrder` фасада: `postgres` → `mysql` → `rest` → `dav` (стор, зарегистрированный под своим именем `mysql`, тоже выбирается для чтения).
- `TestIntegrationPGStore` зелёный на реальном DSN; Download-шаг корректно skip без `MINIO_*`.
- `TestIntegrationSQLFacade` — доказательство, что фасад читает через SQL: `Read().Name()` = SQL, `Entry.Provider == "mysql"` (REST даёт `rest`), сверка `Stat`/`List` с REST, плюс прямой `FileStore("pg")`.
- Unit: маршрутизация SQL-имён без DSN, `readOrder`, приоритет mysql-стора.
- Docs: `docs/community-server-db.md` (туннель 3306, креды/путь без паролей, использование через фасад, ограничение Disc vs MinIO), `docs/unified-file-client.md`, README, AGENTS.
## Проверка
- `go build ./...`, `go vet ./...`, `go test ./...`, `go test -race ./...` — зелёные.
- `go test -tags=integration -run 'TestIntegrationPGStore|TestIntegrationSQLFacade'` — PASS/PASS на живом MySQL (VM onlyoffice-v2, DSN через SSH-туннель).
- Без DSN — оба теста SKIP. gitleaks: no leaks; секреты только именами ENV.
Не мержу и не закрываю issue — жду ревью PO.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Закрывает W2 эпика #53: SQL-бэкенд реально ходит в БД Community Server (MySQL 8.0), доказано интеграционным тестом и тестом на фасаде.
Что сделано
Client.SQLFileStore() (FileStore, error)— open SQL-стора из env (ONLYOFFICE_DSN/ONLYOFFICE_PG_*).Client.FileStore("pg"|"sql"|"postgres"|"mysql")теперь отдаёт SQL-стор; при ошибке открытия —errStore(неnil, ошибка на каждом вызове).readOrderфасада:postgres→mysql→rest→dav(стор, зарегистрированный под своим именемmysql, тоже выбирается для чтения).TestIntegrationPGStoreзелёный на реальном DSN; Download-шаг корректно skip безMINIO_*.TestIntegrationSQLFacade— доказательство, что фасад читает через SQL:Read().Name()= SQL,Entry.Provider == "mysql"(REST даётrest), сверкаStat/Listс REST, плюс прямойFileStore("pg").readOrder, приоритет mysql-стора.docs/community-server-db.md(туннель 3306, креды/путь без паролей, использование через фасад, ограничение Disc vs MinIO),docs/unified-file-client.md, README, AGENTS.Проверка
go build ./...,go vet ./...,go test ./...,go test -race ./...— зелёные.go test -tags=integration -run 'TestIntegrationPGStore|TestIntegrationSQLFacade'— PASS/PASS на живом MySQL (VM onlyoffice-v2, DSN через SSH-туннель).Не мержу и не закрываю issue — жду ревью PO.