TorbatYar/docs/current-architecture-review.md
Mortezakoohjani 12c8615615 Ship enterprise Accounting FE/API with CRUD parity and production wiring.
Adds accounting-service PATCH/archive, fiscal helpers, COA templates and setup status, plus SuperApp Accounting UI (DS, scoreboard, masters, vouchers, ledger, ops modules) with session refresh and HTTPS public API URLs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-24 15:26:43 +03:30

297 lines
18 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DEPRECATED — Current Architecture Documentation Review
> **Status:** Deprecated historical inventory (2026-07-22).
> **Superseded by:** [docs/README.md](README.md) and the consolidated documentation tree.
> Kept for audit trail only — do not update.
**Date:** 2026-07-22
**Scope:** Read-only inventory of architecture / structure / progress documentation in the TorbatYar (SuperApp) repository.
**Action taken:** No existing documentation was modified at review time. This review file is retained as history.
---
## 1. Discovered documents
Search covered the whole repo for architecture-related markdown and naming patterns (`architecture*`, `design*`, `database*`, `progress*`, `roadmap*`, `ADR*`, `deployment*`, `services*`, etc.).
### 1.1 Core docs (`docs/`)
| # | Path |
| --- | --- |
| 1 | `docs/architecture.md` |
| 2 | `docs/database_schema.md` |
| 3 | `docs/services_contracts.md` |
| 4 | `docs/developer_guide.md` |
| 5 | `docs/progress.md` |
| 6 | `docs/last_step.md` |
### 1.2 Root & package READMEs
| # | Path |
| --- | --- |
| 7 | `README.md` |
| 8 | `backend/README.md` |
| 9 | `frontend/README.md` |
| 10 | `backend/services/README.md` |
| 11 | `backend/core-service/alembic/README.md` |
### 1.3 Service READMEs (`backend/services/*/README.md`)
| # | Path |
| --- | --- |
| 12 | `backend/services/identity-access/README.md` |
| 13 | `backend/services/accounting/README.md` |
| 14 | `backend/services/crm/README.md` |
| 15 | `backend/services/ecommerce/README.md` |
| 16 | `backend/services/restaurant/README.md` |
| 17 | `backend/services/website_builder/README.md` |
| 18 | `backend/services/live_chat/README.md` |
| 19 | `backend/services/ai_assistant/README.md` |
| 20 | `backend/services/smart_messenger/README.md` |
| 21 | `backend/services/sms_panel/README.md` |
| 22 | `backend/services/link_shortener/README.md` |
| 23 | `backend/services/file_storage/README.md` |
| 24 | `backend/services/notification/README.md` |
### 1.4 Related non-markdown / ops material (not architecture docs, but architecture-relevant)
These are **not** architecture documents, but they encode production architecture decisions and are currently undocumented (or only partially documented) in `docs/`:
| Path / area | Why it matters |
| --- | --- |
| `infrastructure/nginx/torbatyar.ir.conf` | Live reverse-proxy / TLS / tenant host routing |
| `infrastructure/nginx/provision_ssl.py` | Auto SSL expand for tenant domains |
| `infrastructure/nginx/torbatyar-tenant-ssl.map` | Per-tenant HTTPS redirect readiness |
| `infrastructure/deploy/.env.production.example` | Production env contract (incl. `SSL_PROVISION_*`) |
| `infrastructure/keycloak/realm/superapp-realm.json` | SSO realm / clients / redirect URIs |
| `docker-compose.yml` | Runtime topology (Core, Identity, Keycloak, FE, Celery, Postgres, Redis) |
| `.env.example` | Config surface area |
| `scripts/deploy_*.py` | Operational deploy procedures (not product docs) |
### 1.5 Patterns searched but **not found**
No dedicated files matching:
- `ADR*` / architecture decision records
- `roadmap*` / `next-step*` (except `docs/last_step.md`)
- `design*` / `system*` / `engineering*` / `conventions*` / `principles*` as standalone docs
- `docs/` deployment guide
- `AGENTS.md` / `CONTRIBUTING.md` / `CHANGELOG.md` at repo root
**Total architecture-related markdown documents reviewed:** **24**
---
## 2. Purpose of each document
### Core docs
| Document | Purpose |
| --- | --- |
| `docs/architecture.md` | Canonical high-level architecture: FE/BE split, multi-tenancy, Core responsibilities, tenant resolution, entitlement, outbox, identity layers (SSO + OTP), white-label intent, Phase 4 onboarding model. |
| `docs/database_schema.md` | Schema reference for `core_platform_db` and `identity_access_db`, plus conceptual schemas for future business-service databases. |
| `docs/services_contracts.md` | Inter-service communication rules, event envelope, entitlement check API, Core APIs, onboarding/tenant-context contracts, Identity auth APIs. |
| `docs/developer_guide.md` | Developer onboarding: prerequisites, Docker/local setup, env vars, folder layout, Alembic/pytest/Celery, how to add a new service. |
| `docs/progress.md` | Phase-by-phase checklist of what was delivered; backlog of remaining work. **Primary status source of truth.** |
| `docs/last_step.md` | Narrative of the latest completed delivery (Phase 4 / brief Phase 3) and proposed next phase (white-label runtime). |
### Package READMEs
| Document | Purpose |
| --- | --- |
| `README.md` | Project entrypoint: overview, quick start, links to `docs/`, high-level tree. |
| `backend/README.md` | Backend boundary, tree, Core run/test commands, no-UI rule. |
| `frontend/README.md` | Frontend boundary, stack versions, run commands, white-label note. |
| `backend/services/README.md` | States that `services/` holds future service placeholders and architecture rules. |
| `backend/core-service/alembic/README.md` | How to create/apply/downgrade Core Alembic migrations. |
### Service READMEs
| Document | Purpose |
| --- | --- |
| `identity-access/README.md` | Real Identity & Access service: Keycloak BFF, DB, run/test, basic OIDC flow. |
| `accounting``notification` READMEs (12 files) | Placeholder scope statements: intended responsibilities, independent DB name, entitlement prefix, API/event-only rule. |
---
## 3. Validity assessment
Legend:
- **Valid** — accurate enough to trust as current guidance
- **Partially valid** — still useful but contains stale or incomplete claims
- **Placeholder-valid** — intentionally aspirational / not yet implemented (OK if labeled clearly)
- **Stale** — claims that contradict current code / fresher docs
| Document | Validity | Notes |
| --- | --- | --- |
| `docs/progress.md` | **Valid** (best status doc) | Reflects phases 14 done, JIT done, nginx+SSL done, white-label partial. |
| `docs/last_step.md` | **Mostly valid** | Best narrative of “what just shipped” and next phase; white-label wording is transitional. |
| `docs/architecture.md` | **Partially valid** | Core principles still correct; several operational claims stale (JIT deferred, nginx later, “only Core implemented”). |
| `docs/database_schema.md` | **Mostly valid** | Core/Identity schema docs remain useful; future service DBs correctly marked conceptual. |
| `docs/services_contracts.md` | **Partially valid** | Onboarding/Identity contracts largely correct; missing newer public tenant-site + SSL; JIT `403` note may be outdated. |
| `docs/developer_guide.md` | **Partially valid** | Setup still useful; `services/` “all placeholder”, missing Identity/env/SSL/production ops, possible API client naming confusion. |
| `README.md` | **Partially valid** | Quick start OK; claims only phases 12; tree omits `infrastructure/`, `scripts/`. |
| `backend/README.md` | **Partially valid** | Boundary rules OK; `services/` still called placeholder-only. |
| `frontend/README.md` | **Partially valid** | Separation OK; does not describe onboarding/tenant host/SSO pages; cites `api-client.ts` while primary client is `api.ts` (both files exist). |
| `backend/services/README.md` | **Stale** | Says no services implemented in Phase 1 / only READMEs — Identity is implemented. |
| `alembic/README.md` | **Valid** | Narrow and accurate for Core migrations. |
| `identity-access/README.md` | **Partially valid** | Correct as a real service, but API list incomplete vs contracts (mobile/session APIs). |
| Business service READMEs (12) | **Placeholder-valid** | Correctly labeled unimplemented; still useful as future module map. |
---
## 4. Overlaps
| Topic | Documents that cover it | Overlap assessment |
| --- | --- | --- |
| FE/BE separation rules | `architecture.md` §2.1, `developer_guide.md`, `README.md`, `backend/README.md`, `frontend/README.md` | **Heavy overlap** — same rule repeated 5 times. Keep once in architecture; short pointer elsewhere. |
| Database-per-service / no cross-DB | `architecture.md`, `services_contracts.md`, `services/README.md`, most service READMEs | Intentional repetition; OK if architecture is canonical and others link to it. |
| Phase status / what is done | `progress.md`, `last_step.md`, `README.md`, `architecture.md` intro | **Conflict risk** — status should live only in `progress.md` (+ short pointer in `last_step.md`). |
| Onboarding / Phase 4 | `architecture.md` §11, `services_contracts.md` §7, `progress.md`, `last_step.md`, `database_schema.md` | Complementary if roles are clear: architecture=model, contracts=API, progress=checklist, last_step=narrative. |
| Identity / SSO / OTP | `architecture.md`, `services_contracts.md`, `progress.md`, `identity-access/README.md` | Overlap acceptable; Identity README should not duplicate full contracts. |
| White-label | `architecture.md` §10, `frontend/README.md`, `progress.md`, `last_step.md` | Overlap + **inconsistency** on “done vs partial”. |
| Future service list | `architecture.md`, `database_schema.md` conceptual DBs, 12 service READMEs | Triple map of the same modules — consolidate later. |
| How to run the stack | `README.md`, `developer_guide.md`, `backend/README.md`, `frontend/README.md` | Moderate overlap; root README should stay the short path. |
---
## 5. Obsolete or stale claims
| Claim | Where | Why obsolete / stale |
| --- | --- | --- |
| Repo includes only Phase 1 + Phase 2 | `README.md` | Phases 34 are delivered per `progress.md`. |
| In Phase 1 only Core is implemented; everything under `services/` is placeholder | `architecture.md`, `backend/README.md`, `developer_guide.md`, `backend/services/README.md` | Identity & Access is a real implemented service. |
| JIT Core user from Keycloak JWT is deferred / yields `403` | `architecture.md` §11, `services_contracts.md` §7 | JIT implemented in `UserService.resolve_current`; marked done in `progress.md` / `last_step.md`. |
| Nginx/Traefik added in later phases | `architecture.md` §9 | Production nginx + TLS + tenant auto-SSL are in place. |
| White-label is only static `theme.config.json` | older framing in architecture / last_step residual wording | Partial runtime exists: `GET /public/tenant-site`, `TenantSitePage`, subdomain-aware `useTheme`. |
| Outbox “real publish later” | `architecture.md` / workers commentary | Still largely true for message bus, but progress backlog already tracks it — keep, but dont imply whole infra is unimplemented. |
| Admin login is a dedicated OTP UI | older progress wording (partially corrected) | Admin login now routes through central SSO; OTP still exists via Identity/Keycloak + Core APIs. |
**Not obsolete (still intentionally open):**
- Real payment gateway
- Real DNS/TXT custom-domain verification
- Membership/plan auto-provision on legacy `POST /admin/tenants`
- First real business module (Restaurant etc.)
- Advanced permissions / invites
- Independent Subscription service
- Real message bus
---
## 6. Missing topics
Topics that are **implemented or operationally real** but poorly / not documented in architecture docs:
1. **Production deployment topology** — hosts (`192.168.10.162` app, `192.168.10.156` nginx), domains (`torbatyar.ir`, `api.`, `identity.`, `auth.`, `*.torbatyar.ir`).
2. **Nginx routing & TLS model** — apex vs service hosts vs tenant subdomains; HTTP→HTTPS rules; LE cert expand.
3. **Automatic tenant SSL provisioning**`SSL_PROVISION_*`, Celery task `provision_domain_ssl`, `provision_ssl.py`.
4. **Public tenant site API & UX**`GET /api/v1/public/tenant-site`, guest landing vs member services on subdomain.
5. **Cross-subdomain auth cookies** — cookie Domain=`.torbatyar.ir`, login redirect via apex.
6. **Alembic production practice**`upgrade 0001_initial && stamp head` used in compose (important operational caveat vs “upgrade head”).
7. **Phase numbering glossary** — brief “Phase 3” vs docs “فاز ۳ OTP” vs docs “فاز ۴ onboarding”.
8. **ADRs / decision log** — no Architecture Decision Records.
9. **Security model summary** — platform_admin vs tenant roles vs Identity memberships (two membership tables).
10. **Observability / logging / backup / disaster recovery** — absent.
11. **CI/CD & git workflow** — Gitea remote exists; no architecture doc.
12. **Frontend API client map**`lib/api.ts` vs `lib/api-client.ts` roles.
13. **Celery queues & SSL worker networking** — worker must reach nginx host over SSH.
14. **Keycloak theme / mobile OTP unified login UX** — implemented; scattered across docs.
15. **Roadmap document** — only `last_step.md` + backlog bullets; no dedicated roadmap.
---
## 7. Conflicting information
| Conflict | Doc A | Doc B / Reality | Preferred truth |
| --- | --- | --- | --- |
| Current phase coverage | README: phases 12 | progress: phases 14 done | **progress.md** |
| Are services implemented? | `services/README.md`: none | Identity service exists | **Identity is real; others placeholder** |
| JIT provisioning | architecture/contracts: not done / 403 | progress/last_step + `user_service.py`: done | **JIT done (edge cases remain)** |
| Reverse proxy / TLS | architecture: later | progress + nginx configs: done | **Nginx/TLS done** |
| White-label runtime | architecture: config/theme file framing; last_step: next phase | progress: partial (`tenant-site`, `TenantSitePage`, `useTheme`) | **Partial — next phase to finish** |
| Phase “3” meaning | progress: OTP = فاز ۳ | brief/architecture/last_step: onboarding = Phase 3 / docs فاز ۴ | **Needs explicit glossary** |
| Frontend API entry | developer_guide / frontend README: `api-client.ts` | Main typed client used by app is largely `api.ts` | **Document both or consolidate** |
| Dual `tenant_memberships` | database_schema explains Core vs Identity | Easy to miss; contracts/architecture mention lightly | **Must stay explicit everywhere memberships are discussed** |
---
## 8. Recommendations
### 8.1 Do not rewrite everything yet
Wait for approval (per request). When approved, prefer **reconcile + slim**, not a brand-new parallel doc set that duplicates again.
### 8.2 Proposed documentation roles (target model)
| Document | Should become |
| --- | --- |
| `docs/architecture.md` | **Canonical architecture** (principles, components, tenancy, identity, entitlement, events). Status claims removed or linked to progress. |
| `docs/database_schema.md` | **Canonical data model** only. |
| `docs/services_contracts.md` | **Canonical API/event contracts** only (include public tenant-site). |
| `docs/progress.md` | **Only status checklist** (what is done / open). |
| `docs/last_step.md` | **Latest delivery narrative + next-step proposal** (or rename to `next-steps.md`). |
| `docs/developer_guide.md` | **How to run/develop locally**. |
| `README.md` | Short intro + links; no stale phase claims. |
| New (recommended): `docs/deployment.md` | Production topology, nginx, TLS, SSL auto-provision, env vars. |
| New (recommended): `docs/adr/` | Short decision records for major choices. |
| Service READMEs | Identity: keep real; business modules: keep placeholders but link to architecture module map. |
### 8.3 Immediate reconciliation items (when editing is approved)
1. Fix stale JIT / nginx / “phases 12 only” / “all services placeholder” statements.
2. Add a **phase numbering glossary** (brief vs internal).
3. Document **tenant subdomain runtime** (public site, theme, cookies, SSL).
4. Update Identity README API table to match contracts.
5. Clarify `api.ts` vs `api-client.ts`.
6. Update root tree to include `infrastructure/` and `scripts/`.
### 8.4 What not to do
- Do not create a second “full architecture” that competes with `architecture.md` without retiring overlaps.
- Do not treat placeholder service READMEs as implementation status.
- Do not mix roadmap, status, and architecture in one file.
### 8.5 Suggested reading order (today)
1. `docs/progress.md` + `docs/last_step.md` — current truth
2. `docs/architecture.md` — design intent (discount stale ops claims)
3. `docs/database_schema.md` + `docs/services_contracts.md`
4. `README.md` + developer/frontend/backend READMEs
5. `identity-access/README.md` + other service placeholders
---
## Appendix A — Inventory matrix (compact)
| # | Document | Purpose class | Valid? | Obsolete bits? | Overlaps |
| --- | --- | --- | --- | --- | --- |
| 1 | `docs/architecture.md` | Architecture | Partial | JIT, nginx, Core-only | High |
| 2 | `docs/database_schema.md` | Data model | Mostly | Minor | Medium |
| 3 | `docs/services_contracts.md` | Contracts | Partial | JIT 403; missing public site | Medium |
| 4 | `docs/developer_guide.md` | Dev ops | Partial | placeholders; env gaps | Medium |
| 5 | `docs/progress.md` | Status | Yes | — | With last_step |
| 6 | `docs/last_step.md` | Status/narrative | Mostly | White-label nuance | With progress |
| 7 | `README.md` | Entry | Partial | Phase 12 only | High |
| 8 | `backend/README.md` | Package | Partial | placeholders | Medium |
| 9 | `frontend/README.md` | Package | Partial | incomplete FE map | Medium |
| 10 | `backend/services/README.md` | Package | Stale | “none implemented” | High |
| 11 | `alembic/README.md` | Tooling | Yes | — | Low |
| 12 | `identity-access/README.md` | Service | Partial | incomplete APIs | Medium |
| 1324 | Business service READMEs | Placeholders | Placeholder-valid | N/A if labeled | With architecture module list |
---
## Appendix B — Approval gate
**No further architecture documentation changes will be made until approval.**
When approved, recommended first deliverables:
1. Reconcile stale claims in existing docs (minimal edits).
2. Add `docs/deployment.md`.
3. Optionally introduce `docs/adr/` and a slim `docs/roadmap.md` (or rename `last_step.md`).
Awaiting decision before creating the final architecture documentation set.