# duymk123/feature-flag-lib architecture

> Architecture diagram of the GitHub repository duymk123/feature-flag-lib, 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/feature-flag-lib
- Repository: https://github.com/duymk123/feature-flag-lib

## Overview

This is a Spring Boot feature-flag library for microservices. An application calls the fail-safe client, or marks a method with `@RequireFeature`; the library evaluates the flag locally using a captured user/request context and applicable strategies, avoiding database reads on the hot path. It also documents local snapshot persistence and synchronization from a central admin service. The graph follows README-documented relationships; source excerpts were unavailable, so implementation details and unshown call ownership are not inferred.

Main entry points: [`src/main/java/com/example/featureflag/strategy/EvaluationStrategy.java`](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/strategy/EvaluationStrategy.java) (Strategy Interface), [`src/main/java/com/example/featureflag/service/impl/FeatureFlagConfigServiceImpl.java`](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/service/impl/FeatureFlagConfigServiceImpl.java) (Config Service), [`src/main/java/com/example/featureflag/client/FeatureFlagClient.java`](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/client/FeatureFlagClient.java) (Flag Client), [`src/main/java/com/example/featureflag/aspect/FeatureFlagAspect.java`](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/aspect/FeatureFlagAspect.java) (Feature Aspect)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_integration["Application Integration"]
  node_aspect["Feature Aspect"]
  node_annotations["Feature Annotations"]
  node_client["Flag Client"]
  node_autoconfig["Auto Configuration"]
end

subgraph group_evaluation["Flag Evaluation"]
  node_service["Config Service"]
  node_serviceapi["Service Interface"]
  node_context["Evaluation Context"]
  node_threadpool["Evaluation Pool"]
end

subgraph group_strategies["Evaluation Strategies"]
  node_strategyapi["Strategy Interface"]
  node_username["Username Strategy"]
  node_role["User Role Strategy"]
  node_ip["Client IP Strategy"]
  node_release["Release Date Strategy"]
  node_rollout["Gradual Rollout Strategy"]
end

subgraph group_sync["Snapshot Synchronization"]
  node_syncdto["Sync Request DTOs"]
end

subgraph group_persistence["Local Persistence"]
  node_repo["Config Repository"]
  node_entity[("Flag Config Entity")]
end

node_app(("Microservice"))
node_admin(("Central Admin"))

node_app -->|"marks methods"| node_annotations
node_annotations -->|"intercepts via"| node_aspect
node_aspect -->|"checks through"| node_client
node_app -->|"checks flags"| node_client
node_client -->|"delegates to"| node_serviceapi
node_serviceapi -->|"implemented by"| node_service
node_service -->|"captures context"| node_context
node_service -->|"evaluates concurrently"| node_threadpool
node_autoconfig -->|"provides"| node_threadpool
node_service -->|"evaluates strategies"| node_strategyapi
node_strategyapi -->|"implemented by"| node_username
node_strategyapi -->|"implemented by"| node_role
node_strategyapi -->|"implemented by"| node_ip
node_strategyapi -->|"implemented by"| node_release
node_strategyapi -->|"implemented by"| node_rollout
node_admin -->|"sends snapshots"| node_syncdto
node_syncdto -.->|"synchronizes flags"| node_service
node_service -->|"persists snapshots"| node_repo
node_repo -->|"stores configs"| node_entity

click node_aspect "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/aspect/FeatureFlagAspect.java"
click node_annotations "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/annotation/RequireFeature.java"
click node_client "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/client/FeatureFlagClient.java"
click node_autoconfig "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/config/FeatureFlagAutoConfiguration.java"
click node_service "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/service/impl/FeatureFlagConfigServiceImpl.java"
click node_serviceapi "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/service/FeatureFlagConfigService.java"
click node_context "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/strategy/EvaluationContext.java"
click node_threadpool "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/config/FeatureFlagAutoConfiguration.java"
click node_strategyapi "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/strategy/EvaluationStrategy.java"
click node_username "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/strategy/impl/UsernameStrategy.java"
click node_role "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/strategy/impl/UserRoleStrategy.java"
click node_ip "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/strategy/impl/ClientIpStrategy.java"
click node_release "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/strategy/impl/ReleaseDateStrategy.java"
click node_rollout "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/strategy/impl/GradualRolloutStrategy.java"
click node_syncdto "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/dto/FeatureFlagSyncRequest.java"
click node_repo "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/repository/FeatureFlagConfigRepo.java"
click node_entity "https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/entity/FeatureFlagConfig.java"

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_aspect,node_annotations,node_client,node_autoconfig toneBlue
class node_service,node_serviceapi,node_context,node_threadpool toneAmber
class node_strategyapi,node_username,node_role,node_ip,node_release,node_rollout toneMint
class node_syncdto toneRose
class node_repo,node_entity,node_app,node_admin toneIndigo
```

## Components

### Application Integration

- [Feature Aspect](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/aspect/FeatureFlagAspect.java): `src/main/java/com/example/featureflag/aspect/FeatureFlagAspect.java`
- [Feature Annotations](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/annotation/RequireFeature.java): `src/main/java/com/example/featureflag/annotation/RequireFeature.java`
- [Flag Client](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/client/FeatureFlagClient.java): `src/main/java/com/example/featureflag/client/FeatureFlagClient.java`
- [Auto Configuration](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/config/FeatureFlagAutoConfiguration.java): `src/main/java/com/example/featureflag/config/FeatureFlagAutoConfiguration.java`

### Flag Evaluation

- [Config Service](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/service/impl/FeatureFlagConfigServiceImpl.java): `src/main/java/com/example/featureflag/service/impl/FeatureFlagConfigServiceImpl.java`
- [Service Interface](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/service/FeatureFlagConfigService.java): `src/main/java/com/example/featureflag/service/FeatureFlagConfigService.java`
- [Evaluation Context](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/strategy/EvaluationContext.java): `src/main/java/com/example/featureflag/strategy/EvaluationContext.java`
- [Evaluation Pool](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/config/FeatureFlagAutoConfiguration.java): `src/main/java/com/example/featureflag/config/FeatureFlagAutoConfiguration.java`

### Evaluation Strategies

- [Strategy Interface](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/strategy/EvaluationStrategy.java): `src/main/java/com/example/featureflag/strategy/EvaluationStrategy.java`
- [Username Strategy](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/strategy/impl/UsernameStrategy.java): `src/main/java/com/example/featureflag/strategy/impl/UsernameStrategy.java`
- [User Role Strategy](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/strategy/impl/UserRoleStrategy.java): `src/main/java/com/example/featureflag/strategy/impl/UserRoleStrategy.java`
- [Client IP Strategy](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/strategy/impl/ClientIpStrategy.java): `src/main/java/com/example/featureflag/strategy/impl/ClientIpStrategy.java`
- [Release Date Strategy](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/strategy/impl/ReleaseDateStrategy.java): `src/main/java/com/example/featureflag/strategy/impl/ReleaseDateStrategy.java`
- [Gradual Rollout Strategy](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/strategy/impl/GradualRolloutStrategy.java): `src/main/java/com/example/featureflag/strategy/impl/GradualRolloutStrategy.java`

### Snapshot Synchronization

- [Sync Request DTOs](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/dto/FeatureFlagSyncRequest.java): `src/main/java/com/example/featureflag/dto/FeatureFlagSyncRequest.java`

### Local Persistence

- [Config Repository](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/repository/FeatureFlagConfigRepo.java): `src/main/java/com/example/featureflag/repository/FeatureFlagConfigRepo.java`
- [Flag Config Entity](https://github.com/duymk123/feature-flag-lib/blob/main/src/main/java/com/example/featureflag/entity/FeatureFlagConfig.java): `src/main/java/com/example/featureflag/entity/FeatureFlagConfig.java`

### Other components

- **Microservice**
- **Central Admin**

## Connections

- Microservice → Feature Annotations: marks methods (evidence: `README.md`)
- Feature Annotations → Feature Aspect: intercepts via (evidence: `README.md`)
- Feature Aspect → Flag Client: checks through (evidence: `README.md`)
- Microservice → Flag Client: checks flags (evidence: `README.md`)
- Flag Client → Service Interface: delegates to (evidence: `README.md`)
- Service Interface → Config Service: implemented by (evidence: `README.md`)
- Config Service → Evaluation Context: captures context (evidence: `README.md`)
- Config Service → Evaluation Pool: evaluates concurrently (evidence: `README.md`)
- Auto Configuration → Evaluation Pool: provides (evidence: `README.md`)
- Config Service → Strategy Interface: evaluates strategies (evidence: `README.md`)
- Strategy Interface → Username Strategy: implemented by (evidence: `README.md`)
- Strategy Interface → User Role Strategy: implemented by (evidence: `README.md`)
- Strategy Interface → Client IP Strategy: implemented by (evidence: `README.md`)
- Strategy Interface → Release Date Strategy: implemented by (evidence: `README.md`)
- Strategy Interface → Gradual Rollout Strategy: implemented by (evidence: `README.md`)
- Central Admin → Sync Request DTOs: sends snapshots (evidence: `README.md`)
- Sync Request DTOs → Config Service: synchronizes flags
- Config Service → Config Repository: persists snapshots (evidence: `README.md`)
- Config Repository → Flag Config Entity: stores configs (evidence: `README.md`)
