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
+8 -1
View File
@@ -4,7 +4,14 @@ version = "0.1.0"
description = "AdCloud tracking and ad delivery backend for developers and coding agents"
readme = "README.md"
requires-python = ">=3.12"
dependencies = ["fastapi>=0.115,<1", "uvicorn>=0.30,<1"]
dependencies = ["fastapi>=0.115,<1", "uvicorn>=0.30,<1", "sqlalchemy>=2.0,<3", "email-validator>=2.2,<3", "phonenumbers>=9,<10", "python-dotenv>=1,<2"]
[project.optional-dependencies]
postgres = ["psycopg[binary]>=3.2,<4"]
cassandra = ["cassandra-driver>=3.29,<4"]
[project.scripts]
adcloud-profiles = "adcloud_server.projection:main"
[dependency-groups]
dev = ["httpx>=0.27,<1", "pytest>=8,<10", "ruff>=0.9,<1"]