Implement identity graph stitching and configurable profile storage

Issue persistent signed anonymous IDs and accept cookie/token-bound events.
Resolve verified email, phone, OAuth, and namespaced third-party IDs into
transactionally merged master identities with historical event aliases.
Protect shared-device account switching, tenant isolation, and event retries.

Store sparse canonical profiles as PostgreSQL JSONB or local SQLite JSON.
Support an optional versioned Cassandra wide-column projection through a
transactional outbox, retry worker, and immediate canonical read fallback.
Document deployment settings and provide opt-in database integration tests.

Validation: 43 local tests passed; 6 external database tests skipped.
Ruff checks, formatting, and offline uv lock verification passed.
This commit is contained in:
2026-09-15 23:49:43 +08:00
parent c30a136102
commit 0fc6c68a99
27 changed files with 2993 additions and 103 deletions
+5
View File
@@ -28,6 +28,11 @@ server {
proxy_send_timeout 30s;
# No URI suffix on proxy_pass: preserve /v1/... and query strings.
# Exact roots prevent nginx from redirecting POST /v1/events to a trailing slash.
location = /v1/events { proxy_pass http://adcloud_events; }
location = /v1/users { proxy_pass http://adcloud_users; }
location = /v1/ads { proxy_pass http://adcloud_ads; }
location = /v1/identity { proxy_pass http://adcloud_identity; }
location ^~ /v1/events/ { proxy_pass http://adcloud_events; }
location ^~ /v1/users/ { proxy_pass http://adcloud_users; }
location ^~ /v1/ads/ { proxy_pass http://adcloud_ads; }