<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Codebase Analysis Report</title>
<style>
body { font-family: sans-serif; display: flex; flex-direction: column; align-items: center; }
#report-container { display: flex; width: 98%; gap: 16px; margin-top: 20px; }
#graph-container { flex-grow: 1; border: 1px solid #ccc; padding: 10px; border-radius: 8px; }
#sidebar { width: 400px; flex-shrink: 0; border: 1px solid #ccc; padding: 10px; border-radius: 8px; max-height: 85vh; overflow-y: auto; }
h1, h2 { color: #333; }
#analysis-report ul { list-style-type: none; padding-left: 0; }
#analysis-report h3 { border-bottom: 1px solid #eee; padding-bottom: 5px; margin-top: 20px;}
#analysis-report li { background-color: #f9f9f9; border: 1px solid #eee; padding: 8px; margin-bottom: 5px; border-radius: 4px; }
#analysis-report strong { color: #c0392b; }
.classNode { fill:#DDA0DD; stroke:#8A2BE2; stroke-width:2px; }
.functionNode { fill:#87CEEB; stroke:#4682B4; stroke-width:2px; }
.dependencyNode { fill:#90EE90; stroke:#2E8B57; stroke-width:2px; }
.fileNode { fill:#FFFACD; stroke:#FFD700; stroke-width:2px; }
.moduleNode { fill:#E6E6FA; stroke:#9370DB; stroke-width:2px; }
.traitNode { fill:#FFB6C1; stroke:#DC143C; stroke-width:2px; }
.structNode { fill:#B0E0E6; stroke:#4682B4; stroke-width:2px; }
.enumNode { fill:#F0E68C; stroke:#DAA520; stroke-width:2px; }
.macroNode { fill:#FFA07A; stroke:#FF6347; stroke-width:2px; }
.configNode { fill:#D3D3D3; stroke:#808080; stroke-width:2px; }
.docNode { fill:#F5DEB3; stroke:#D2B48C; stroke-width:2px; }
.exampleNode { fill:#E0E0E0; stroke:#A0A0A0; stroke-width:2px; }
</style>
</head>
<body>
<h1>Codebase Analysis Report</h1>
<div id="report-container">
<div id="graph-container">
<h2>Knowledge Graph</h2>
<pre class="mermaid">
graph TD
subgraph "Source & Logic"
subgraph "Core Module"
core_mod["core::mod"]:::moduleNode
core_entity["core::entity<br/>Entity, Data, Link traits"]:::traitNode
core_link["core::link<br/>LinkEntity, LinkDefinition"]:::structNode
core_service["core::service<br/>DataService, LinkService"]:::traitNode
core_module_trait["core::module<br/>Module, EntityFetcher, EntityCreator"]:::traitNode
core_query["core::query<br/>QueryParams, PaginatedResponse"]:::structNode
core_auth["core::auth<br/>AuthProvider, AuthContext"]:::traitNode
core_field["core::field<br/>FieldValue, FieldFormat"]:::enumNode
core_extractors["core::extractors<br/>LinkExtractor, RecursiveLinkExtractor"]:::structNode
core_pluralize["core::pluralize<br/>Pluralizer"]:::structNode
core_store["core::store<br/>QueryableStore"]:::traitNode
core_validation["core::validation<br/>Validated, EntityValidationConfig"]:::structNode
end
subgraph "Server Module"
server_mod["server::mod"]:::moduleNode
server_builder["server::builder<br/>ServerBuilder"]:::structNode
server_host["server::host<br/>ServerHost"]:::structNode
server_entity_registry["server::entity_registry<br/>EntityRegistry, EntityDescriptor"]:::structNode
server_router["server::router<br/>build_link_routes"]:::functionNode
server_rest["server::exposure::rest<br/>RestExposure"]:::structNode
server_graphql["server::exposure::graphql<br/>GraphQLExposure"]:::structNode
server_graphql_schema["server::exposure::graphql::schema<br/>QueryRoot, MutationRoot"]:::structNode
server_graphql_executor["server::exposure::graphql::executor<br/>GraphQLExecutor"]:::structNode
end
subgraph "Links Module"
links_mod["links::mod"]:::moduleNode
links_handlers["links::handlers<br/>AppState, handlers"]:::structNode
links_registry["links::registry<br/>LinkRouteRegistry"]:::structNode
end
subgraph "Entities Module"
entities_mod["entities::mod"]:::moduleNode
entities_macros["entities::macros<br/>Macros for entity generation"]:::macroNode
end
subgraph "Storage Module"
storage_mod["storage::mod"]:::moduleNode
storage_in_memory["storage::in_memory<br/>InMemoryLinkService"]:::structNode
storage_dynamodb["storage::dynamodb<br/>DynamoDBDataService, DynamoDBLinkService"]:::structNode
end
subgraph "Config Module"
config_mod["config::mod<br/>LinksConfig, EntityConfig"]:::structNode
end
lib_rs["lib.rs<br/>Library Root"]:::fileNode
end
subgraph "Build & Dependencies"
cargo_toml["Cargo.toml<br/>Dependencies"]:::configNode
axum_dep["axum<br/>Web Framework"]:::dependencyNode
async_graphql_dep["async-graphql<br/>GraphQL Support"]:::dependencyNode
tokio_dep["tokio<br/>Async Runtime"]:::dependencyNode
serde_dep["serde<br/>Serialization"]:::dependencyNode
end
subgraph "Documentation & Config"
readme["README.md"]:::docNode
docs_dir["docs/"]:::docNode
examples_dir["examples/"]:::exampleNode
end
lib_rs -->|"exposes"| core_mod
lib_rs -->|"exposes"| server_mod
lib_rs -->|"exposes"| links_mod
lib_rs -->|"exposes"| entities_mod
lib_rs -->|"exposes"| storage_mod
lib_rs -->|"exposes"| config_mod
core_mod -->|"uses"| core_entity
core_mod -->|"uses"| core_link
core_mod -->|"uses"| core_service
core_mod -->|"uses"| core_module_trait
core_mod -->|"uses"| core_query
core_mod -->|"uses"| core_auth
core_mod -->|"uses"| core_field
core_mod -->|"uses"| core_extractors
core_mod -->|"uses"| core_pluralize
core_mod -->|"uses"| core_store
core_mod -->|"uses"| core_validation
core_service -->|"depends on"| core_entity
core_service -->|"depends on"| core_link
core_module_trait -->|"depends on"| core_entity
core_module_trait -->|"depends on"| config_mod
core_link -->|"uses"| core_pluralize
core_extractors -->|"depends on"| core_link
core_extractors -->|"depends on"| links_registry
core_extractors -->|"depends on"| config_mod
server_mod -->|"uses"| server_builder
server_mod -->|"uses"| server_host
server_mod -->|"uses"| server_entity_registry
server_mod -->|"uses"| server_rest
server_mod -->|"uses"| server_graphql
server_builder -->|"creates"| server_host
server_builder -->|"uses"| server_entity_registry
server_builder -->|"uses"| server_rest
server_builder -->|"uses"| config_mod
server_builder -->|"uses"| core_module_trait
server_builder -->|"uses"| core_service
server_builder -->|"uses"| axum_dep
server_host -->|"contains"| config_mod
server_host -->|"contains"| core_service
server_host -->|"contains"| links_registry
server_host -->|"contains"| server_entity_registry
server_host -->|"contains"| core_module_trait
server_rest -->|"uses"| server_host
server_rest -->|"uses"| server_router
server_rest -->|"uses"| server_entity_registry
server_router -->|"uses"| links_handlers
server_router -->|"uses"| core_query
server_graphql -->|"uses"| server_host
server_graphql -->|"uses"| server_graphql_schema
server_graphql -->|"uses"| server_graphql_executor
server_graphql -->|"uses"| async_graphql_dep
server_graphql_executor -->|"uses"| server_host
server_graphql_schema -->|"uses"| server_host
links_mod -->|"uses"| links_handlers
links_mod -->|"uses"| links_registry
links_handlers -->|"uses"| core_extractors
links_handlers -->|"uses"| core_service
links_handlers -->|"uses"| core_entity
links_handlers -->|"uses"| core_link
links_handlers -->|"uses"| core_query
links_handlers -->|"uses"| links_registry
links_handlers -->|"uses"| config_mod
links_registry -->|"uses"| core_link
links_registry -->|"uses"| config_mod
entities_mod -->|"uses"| entities_macros
entities_macros -->|"generates code for"| core_entity
entities_macros -->|"uses"| core_field
entities_macros -->|"uses"| core_validation
storage_mod -->|"implements"| core_service
storage_in_memory -->|"implements"| core_service
storage_in_memory -->|"uses"| core_link
storage_dynamodb -->|"implements"| core_service
storage_dynamodb -->|"uses"| core_entity
storage_dynamodb -->|"uses"| core_link
config_mod -->|"uses"| core_link
server_builder -->|"loads"| config_mod
links_registry -->|"uses"| config_mod
server_builder -->|"uses"| tokio_dep
server_builder -->|"uses"| axum_dep
server_rest -->|"uses"| axum_dep
server_graphql -->|"uses"| axum_dep
links_handlers -->|"uses"| axum_dep
core_link -->|"uses"| serde_dep
config_mod -->|"uses"| serde_dep
cargo_toml -->|"defines"| axum_dep
cargo_toml -->|"defines"| async_graphql_dep
cargo_toml -->|"defines"| tokio_dep
cargo_toml -->|"defines"| serde_dep
</pre>
</div>
<div id="sidebar">
<h2>Analysis & Refactoring</h2>
<div id="analysis-report">
<h3>Vue d'ensemble du projet</h3>
<p><strong>This-RS</strong> est un framework Rust pour construire des APIs REST et GraphQL avec gestion d'entités et de relations complexes. Le projet suit une architecture modulaire bien définie.</p>
<h3>Architecture Principale</h3>
<ul>
<li><strong>Core Module</strong> : Définit les traits fondamentaux (Entity, Data, Link) et les services abstraits (DataService, LinkService). C'est le cœur du framework.</li>
<li><strong>Server Module</strong> : Gère la construction du serveur HTTP avec support REST et GraphQL via ServerBuilder et ServerHost.</li>
<li><strong>Links Module</strong> : Gère les relations entre entités avec routage sémantique et enrichissement des liens.</li>
<li><strong>Entities Module</strong> : Fournit des macros pour générer automatiquement les implémentations d'entités.</li>
<li><strong>Storage Module</strong> : Implémentations concrètes (InMemory, DynamoDB) des services de stockage.</li>
<li><strong>Config Module</strong> : Gestion de configuration YAML pour les entités et les liens.</li>
</ul>
<h3>Points Forts</h3>
<ul>
<li><strong>Séparation des responsabilités</strong> : Architecture modulaire claire avec des modules bien définis.</li>
<li><strong>Abstraction flexible</strong> : Utilisation de traits pour permettre différentes implémentations de stockage.</li>
<li><strong>Support multi-protocole</strong> : REST et GraphQL supportés via le même ServerHost.</li>
<li><strong>Routage sémantique</strong> : Système de liens bidirectionnels avec routes nommées.</li>
<li><strong>Extensibilité</strong> : Design orienté traits facilitant l'ajout de nouvelles fonctionnalités.</li>
</ul>
<h3>Suggestions d'Amélioration</h3>
<ul>
<li><strong>Documentation des dépendances circulaires</strong> : Certaines dépendances entre modules pourraient être mieux documentées (ex: core::extractors dépend de links::registry).</li>
<li><strong>Tests d'intégration</strong> : Ajouter plus de tests d'intégration pour valider les interactions entre modules.</li>
<li><strong>Gestion d'erreurs</strong> : Standardiser la gestion d'erreurs entre les différents modules.</li>
<li><strong>Performance</strong> : Optimiser les requêtes de liens pour les relations complexes (N+1 queries potentiel).</li>
<li><strong>Validation</strong> : Le module validation pourrait être mieux intégré avec le système de configuration.</li>
</ul>
<h3>Relations Clés</h3>
<ul>
<li><strong>ServerBuilder</strong> centralise la construction du serveur et orchestre tous les modules.</li>
<li><strong>ServerHost</strong> est le point d'entrée transport-agnostic contenant tout l'état du framework.</li>
<li><strong>LinkRouteRegistry</strong> gère la résolution des routes sémantiques vers les types de liens.</li>
<li><strong>EntityRegistry</strong> maintient les descripteurs d'entités pour la génération automatique de routes CRUD.</li>
</ul>
<h3>Dépendances Externes</h3>
<ul>
<li><strong>axum</strong> : Framework web moderne pour Rust</li>
<li><strong>async-graphql</strong> : Support GraphQL (optionnel via feature flag)</li>
<li><strong>tokio</strong> : Runtime async</li>
<li><strong>serde</strong> : Sérialisation/désérialisation</li>
</ul>
<h3>Statistiques</h3>
<ul>
<li><strong>Fichiers analysés</strong> : 68 fichiers Rust</li>
<li><strong>Modules principaux</strong> : 6 (core, server, links, entities, storage, config)</li>
<li><strong>Traits principaux</strong> : Entity, Data, Link, DataService, LinkService, Module</li>
<li><strong>Structures principales</strong> : ServerBuilder, ServerHost, LinkRouteRegistry, EntityRegistry</li>
</ul>
</div>
</div>
</div>
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
mermaid.initialize({
startOnLoad: true,
theme: 'default',
mermaid: {
curve: 'basis'
},
htmlLabels: true
});
</script>
</body>
</html>