this-rs 0.0.7

Framework for building complex multi-entity REST and GraphQL APIs with many relationships
Documentation
<!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; }
        /* Mermaid Node Styling */
        .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>
            <!-- The raw source for this graph is also saved in knowledge_graph.mmd -->
            <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>