feat(files): SQL backend via Client.FileStore + live MySQL facade test (#55) #60

Merged
eSlider merged 1 commits from feat/db-integration#55 into main 2026-09-16 22:30:05 +01:00
Owner

Закрывает 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.
eSlider added 1 commit 2026-09-16 22:26:22 +01:00
feat(files): SQL file backend via Client.FileStore/SQLFileStore + live MySQL integration (#55)
Release Please / Release Please (push) Skipped
Release / GoReleaser (push) Skipped
Tests / Secret scan (gitleaks) (push) Skipped
Tests / Test (Go 1.25) (push) Skipped
Tests / Test (Go stable) (push) Skipped
Tests / Secret scan (gitleaks) (pull_request) Successful in 4s
Tests / Test (Go stable) (pull_request) Successful in 24s
Tests / Test (Go 1.25) (pull_request) Successful in 26s
a6bba30438
eSlider merged commit 620505cb24 into main 2026-09-16 22:30:05 +01:00
eSlider deleted branch feat/db-integration#55 2026-09-16 22:30:05 +01:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: eSlider/go-onlyoffice#60