Products were inserted with empty tenant_id because ExtractTenantId was
called after the Insert; moved extraction before the struct so rows are
stored with the correct tenant and appear in list queries.
Regenerated purchase.pb.go and purchase_grpc.pb.go from purchase.proto
using protoc-gen-go v1.36.11; the previous hand-written stubs lacked the
proto.Message interface, causing all purchase gRPC calls to fail with a
marshal error.
- Clear default passwords in all service configs and local dev YAMLs
- Add entrypoint.sh with envsubst to resolve ${ENV} vars in go-zero YAML
- Update Dockerfiles to install gettext and use entrypoint
- Update docker-compose to pass secrets via environment and require via ${VAR:?...}
- Add .gitignore rules for .env files, add .env.example template
Co-Authored-By: Claude <noreply@anthropic.com>