feat(storage): Firestore KVStore + KVProvider abstraction

Phase 04 of go-port-cloud-run plan. Introduces KVProvider abstraction
with memory backend (via Prefixed wrapper) and Firestore backend (via
collection-per-module isolation). Backend selection gated by env vars:
GOOGLE_CLOUD_PROJECT or FIRESTORE_EMULATOR_HOST → Firestore, else memory.
Emulator-gated tests via `make test-emulator`. Security hardened: emulator
fallback project ID, prefix validation on List, length-in-bytes docs.
This commit is contained in:
tiennm99 committed 2026-05-08 23:51:24 +07:00
1 parent 067abb72a1
commit 1f86f3df12
12 files changed
+767 -48

No files matched your search

+1 -1
View File
@@ -15,7 +15,7 @@ const testCronSecret = "shared-cron-secret"
func buildRegistry(t *testing.T, factories map[string]modules.Factory, names ...string) *modules.Registry {
t.Helper()
reg, err := modules.Build(names, factories, modules.Deps{KV: storage.NewMemoryKVStore()})
reg, err := modules.Build(names, factories, storage.NewMemoryProvider(), nil)
if err != nil {
t.Fatalf("modules.Build: %v", err)
}