# duymk123/admin-feature-flag-service architecture

> Architecture diagram of the GitHub repository duymk123/admin-feature-flag-service, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/duymk123/admin-feature-flag-service
- Repository: https://github.com/duymk123/admin-feature-flag-service

## Overview

This repository is a Super Admin control plane for a multi-tenant feature-flag ecosystem. The primary workflow is to authenticate, inspect tenants and master features, grant or revoke tenant entitlements, and apply configuration to the tenant’s feature-flag service; audit history supports operational review. The graph also retains dashboard and tenant administration capabilities. Frontend relationships are supported by excerpts or the SOURCE INDEX; backend internals are mostly unsampled, so uncertain controller/service and persistence links are omitted. Cross-service synchronization is documented in the README.

Main entry points: [`src/main/java/com/example/adminfeatureflagservice/controller`](https://github.com/duymk123/admin-feature-flag-service/tree/main/src/main/java/com/example/adminfeatureflagservice/controller) (REST API), [`Frontend/src/App.jsx`](https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/App.jsx) (Portal App), [`Frontend/src/api`](https://github.com/duymk123/admin-feature-flag-service/tree/main/Frontend/src/api) (API Modules), [`src/main/java/com/example/adminfeatureflagservice/repository`](https://github.com/duymk123/admin-feature-flag-service/tree/main/src/main/java/com/example/adminfeatureflagservice/repository) (JPA Repositories)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_portal["Admin Portal"]
  node_app["Portal App<br/>[App.jsx]"]
  node_auth["Session Context<br/>[AuthContext.jsx]"]
  node_login["Login Page<br/>[LoginPage.jsx]"]
  node_dashboard["Dashboard<br/>[DashboardPage.jsx]"]
  node_tenantsui["Tenant Admin<br/>[TenantsPage.jsx]"]
  node_grantmodal["Grant Manager"]
  node_auditui["Audit Viewer<br/>[AuditLogsPage.jsx]"]
  node_apis["API Modules"]
  node_apiclient["HTTP Client<br/>[client.js]"]
end

subgraph group_control["Control Plane API"]
  node_backend["REST API"]
  node_authservice["Authentication"]
  node_routing["Tenant Routing"]
end

subgraph group_domain["Entitlements and Audit"]
  node_tenantservice["Tenant Management"]
  node_feature["Master Features"]
  node_grants["Tenant Grants"]
  node_sync["Remote Apply"]
  node_audit["Audit Trail"]
end

subgraph group_persistence["Persistent State"]
  node_repositories["JPA Repositories"]
  node_database[("Admin Database<br/>[schema.sql]")]
end

node_admin(("Super Admin"))
node_tenantserviceext{{"Tenant Flag Service"}}

node_admin -->|"uses"| node_app
node_app -->|"checks session"| node_auth
node_app -->|"shows signed out"| node_login
node_app -->|"renders"| node_dashboard
node_app -->|"renders"| node_tenantsui
node_app -->|"renders"| node_auditui
node_login -->|"signs in"| node_auth
node_auth -->|"requests login"| node_apis
node_dashboard -->|"loads summaries"| node_apis
node_tenantsui -->|"opens grants"| node_grantmodal
node_tenantsui -->|"manages tenants"| node_apis
node_grantmodal -->|"updates grants"| node_apis
node_auditui -->|"loads audit"| node_apis
node_apis -->|"issues requests"| node_apiclient
node_apiclient -.->|"calls REST API"| node_backend
node_backend -.->|"authenticates"| node_authservice
node_backend -.->|"handles tenants"| node_tenantservice
node_backend -.->|"handles catalog"| node_feature
node_backend -.->|"handles entitlements"| node_grants
node_backend -.->|"triggers apply"| node_sync
node_backend -.->|"serves audit"| node_audit
node_sync -.->|"resolves tenant"| node_routing
node_routing -->|"sends REST sync"| node_tenantserviceext
node_tenantservice -.->|"persists tenant data"| node_repositories
node_feature -.->|"persists catalog"| node_repositories
node_grants -.->|"persists grants"| node_repositories
node_audit -.->|"persists events"| node_repositories
node_repositories -.->|"stores records"| node_database

click node_app "https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/App.jsx"
click node_auth "https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/context/AuthContext.jsx"
click node_login "https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/pages/LoginPage.jsx"
click node_dashboard "https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/pages/DashboardPage.jsx"
click node_tenantsui "https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/pages/TenantsPage.jsx"
click node_grantmodal "https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/components/tenant/TenantGrantModal.jsx"
click node_auditui "https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/pages/AuditLogsPage.jsx"
click node_apis "https://github.com/duymk123/admin-feature-flag-service/tree/main/Frontend/src/api"
click node_apiclient "https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/api/client.js"
click node_backend "https://github.com/duymk123/admin-feature-flag-service/tree/main/src/main/java/com/example/adminfeatureflagservice/controller"
click node_authservice "https://github.com/duymk123/admin-feature-flag-service/blob/main/src/main/java/com/example/adminfeatureflagservice/service/impl/AuthServiceImpl.java"
click node_tenantservice "https://github.com/duymk123/admin-feature-flag-service/blob/main/src/main/java/com/example/adminfeatureflagservice/service/impl/TenantServiceImpl.java"
click node_feature "https://github.com/duymk123/admin-feature-flag-service/blob/main/src/main/java/com/example/adminfeatureflagservice/service/impl/MasterFeatureServiceImpl.java"
click node_grants "https://github.com/duymk123/admin-feature-flag-service/blob/main/src/main/java/com/example/adminfeatureflagservice/service/impl/TenantGrantServiceImpl.java"
click node_sync "https://github.com/duymk123/admin-feature-flag-service/blob/main/src/main/java/com/example/adminfeatureflagservice/service/impl/SyncServiceImpl.java"
click node_audit "https://github.com/duymk123/admin-feature-flag-service/blob/main/src/main/java/com/example/adminfeatureflagservice/service/impl/AuditLogServiceImpl.java"
click node_routing "https://github.com/duymk123/admin-feature-flag-service/blob/main/src/main/java/com/example/adminfeatureflagservice/client/FeatureFlagServiceClient.java"
click node_repositories "https://github.com/duymk123/admin-feature-flag-service/tree/main/src/main/java/com/example/adminfeatureflagservice/repository"
click node_database "https://github.com/duymk123/admin-feature-flag-service/blob/main/data/schema.sql"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_auth,node_login,node_dashboard,node_tenantsui,node_grantmodal,node_auditui,node_apis,node_apiclient toneBlue
class node_backend,node_authservice,node_routing toneAmber
class node_tenantservice,node_feature,node_grants,node_sync,node_audit toneMint
class node_repositories,node_database toneRose
class node_admin,node_tenantserviceext toneIndigo
```

## Components

### Admin Portal

- [Portal App](https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/App.jsx): `Frontend/src/App.jsx`
- [Session Context](https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/context/AuthContext.jsx): `Frontend/src/context/AuthContext.jsx`
- [Login Page](https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/pages/LoginPage.jsx): `Frontend/src/pages/LoginPage.jsx`
- [Dashboard](https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/pages/DashboardPage.jsx): `Frontend/src/pages/DashboardPage.jsx`
- [Tenant Admin](https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/pages/TenantsPage.jsx): `Frontend/src/pages/TenantsPage.jsx`
- [Grant Manager](https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/components/tenant/TenantGrantModal.jsx): `Frontend/src/components/tenant/TenantGrantModal.jsx`
- [Audit Viewer](https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/pages/AuditLogsPage.jsx): `Frontend/src/pages/AuditLogsPage.jsx`
- [API Modules](https://github.com/duymk123/admin-feature-flag-service/tree/main/Frontend/src/api): `Frontend/src/api`
- [HTTP Client](https://github.com/duymk123/admin-feature-flag-service/blob/main/Frontend/src/api/client.js): `Frontend/src/api/client.js`

### Control Plane API

- [REST API](https://github.com/duymk123/admin-feature-flag-service/tree/main/src/main/java/com/example/adminfeatureflagservice/controller): `src/main/java/com/example/adminfeatureflagservice/controller`
- [Authentication](https://github.com/duymk123/admin-feature-flag-service/blob/main/src/main/java/com/example/adminfeatureflagservice/service/impl/AuthServiceImpl.java): `src/main/java/com/example/adminfeatureflagservice/service/impl/AuthServiceImpl.java`
- [Tenant Routing](https://github.com/duymk123/admin-feature-flag-service/blob/main/src/main/java/com/example/adminfeatureflagservice/client/FeatureFlagServiceClient.java): `src/main/java/com/example/adminfeatureflagservice/client/FeatureFlagServiceClient.java`

### Entitlements and Audit

- [Tenant Management](https://github.com/duymk123/admin-feature-flag-service/blob/main/src/main/java/com/example/adminfeatureflagservice/service/impl/TenantServiceImpl.java): `src/main/java/com/example/adminfeatureflagservice/service/impl/TenantServiceImpl.java`
- [Master Features](https://github.com/duymk123/admin-feature-flag-service/blob/main/src/main/java/com/example/adminfeatureflagservice/service/impl/MasterFeatureServiceImpl.java): `src/main/java/com/example/adminfeatureflagservice/service/impl/MasterFeatureServiceImpl.java`
- [Tenant Grants](https://github.com/duymk123/admin-feature-flag-service/blob/main/src/main/java/com/example/adminfeatureflagservice/service/impl/TenantGrantServiceImpl.java): `src/main/java/com/example/adminfeatureflagservice/service/impl/TenantGrantServiceImpl.java`
- [Remote Apply](https://github.com/duymk123/admin-feature-flag-service/blob/main/src/main/java/com/example/adminfeatureflagservice/service/impl/SyncServiceImpl.java): `src/main/java/com/example/adminfeatureflagservice/service/impl/SyncServiceImpl.java`
- [Audit Trail](https://github.com/duymk123/admin-feature-flag-service/blob/main/src/main/java/com/example/adminfeatureflagservice/service/impl/AuditLogServiceImpl.java): `src/main/java/com/example/adminfeatureflagservice/service/impl/AuditLogServiceImpl.java`

### Persistent State

- [JPA Repositories](https://github.com/duymk123/admin-feature-flag-service/tree/main/src/main/java/com/example/adminfeatureflagservice/repository): `src/main/java/com/example/adminfeatureflagservice/repository`
- [Admin Database](https://github.com/duymk123/admin-feature-flag-service/blob/main/data/schema.sql): `data/schema.sql`

### Other components

- **Super Admin**
- **Tenant Flag Service**

## Connections

- Super Admin → Portal App: uses
- Portal App → Session Context: checks session (evidence: `Frontend/src/App.jsx`)
- Portal App → Login Page: shows signed out (evidence: `Frontend/src/App.jsx`)
- Portal App → Dashboard: renders (evidence: `Frontend/src/App.jsx`)
- Portal App → Tenant Admin: renders (evidence: `Frontend/src/App.jsx`)
- Portal App → Audit Viewer: renders (evidence: `Frontend/src/App.jsx`)
- Login Page → Session Context: signs in (evidence: `Frontend/src/pages/LoginPage.jsx`)
- Session Context → API Modules: requests login (evidence: `Frontend/src/context/AuthContext.jsx`)
- Dashboard → API Modules: loads summaries (evidence: `Frontend/src/pages/DashboardPage.jsx`)
- Tenant Admin → Grant Manager: opens grants (evidence: `Frontend/src/pages/TenantsPage.jsx`)
- Tenant Admin → API Modules: manages tenants (evidence: `Frontend/src/pages/TenantsPage.jsx`)
- Grant Manager → API Modules: updates grants (evidence: `Frontend/src/components/tenant/TenantGrantModal.jsx`)
- Audit Viewer → API Modules: loads audit (evidence: `Frontend/src/pages/AuditLogsPage.jsx`)
- API Modules → HTTP Client: issues requests (evidence: `Frontend/src/api/grantApi.js`)
- HTTP Client → REST API: calls REST API
- REST API → Authentication: authenticates
- REST API → Tenant Management: handles tenants
- REST API → Master Features: handles catalog
- REST API → Tenant Grants: handles entitlements
- REST API → Remote Apply: triggers apply
- REST API → Audit Trail: serves audit
- Remote Apply → Tenant Routing: resolves tenant
- Tenant Routing → Tenant Flag Service: sends REST sync (evidence: `README.md`)
- Tenant Management → JPA Repositories: persists tenant data
- Master Features → JPA Repositories: persists catalog
- Tenant Grants → JPA Repositories: persists grants
- Audit Trail → JPA Repositories: persists events
- JPA Repositories → Admin Database: stores records
