# dandoetech/resource-registry architecture

> Architecture diagram of the GitHub repository dandoetech/resource-registry, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dandoetech/resource-registry
- Repository: https://github.com/dandoetech/resource-registry

## Overview

DanDoeTech Resource Registry is a framework-agnostic PHP library for defining API resource metadata for consumer packages. The main workflow is to define a Resource, have its builder create a ResourceDefinition, then retrieve definitions through Registry; ArrayRegistryDriver provides an alternative array-config source. The graph groups related contracts and value objects to keep this small runtime library focused. Some registry and hydration behavior is represented from the README and excerpts; unsampled implementation details are not inferred.

Main entry points: [`src/Builder/ResourceBuilder.php`](https://github.com/dandoetech/resource-registry/blob/main/src/Builder/ResourceBuilder.php) (ResourceBuilder), [`src/Definition/ResourceDefinition.php`](https://github.com/dandoetech/resource-registry/blob/main/src/Definition/ResourceDefinition.php) (Resource definition), [`src/Definition/FieldType.php`](https://github.com/dandoetech/resource-registry/blob/main/src/Definition/FieldType.php) (Metadata types), [`src/Resource.php`](https://github.com/dandoetech/resource-registry/blob/main/src/Resource.php) (Resource base)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_authoring["Resource authoring"]
  node_resource["Resource base<br/>[Resource.php]"]
  node_builder["ResourceBuilder"]
end

subgraph group_metadata["Metadata model"]
  node_contracts["Definition contracts"]
  node_field["Field metadata"]
  node_relation["Relation metadata"]
  node_computed["Computed metadata"]
  node_action["Action metadata"]
  node_types["Metadata types<br/>[FieldType.php]"]
  node_queryprofile["Query profiles<br/>[QueryProfile.php]"]
  node_definition["Resource definition"]
end

subgraph group_registry["Registry access"]
  node_registry["Registry<br/>[Registry.php]"]
  node_arraydriver["Array driver"]
end

node_consumer(("Package user"))

node_consumer -->|"defines resources"| node_resource
node_consumer -->|"retrieves definitions"| node_registry
node_resource -->|"builds with"| node_builder
node_builder -->|"builds"| node_definition
node_builder -->|"creates fields"| node_field
node_builder -->|"creates relations"| node_relation
node_builder -->|"creates computed fields"| node_computed
node_builder -->|"creates actions"| node_action
node_builder -->|"creates profiles"| node_queryprofile
node_arraydriver -->|"hydrates"| node_definition
node_registry -.->|"uses driver"| node_arraydriver
node_definition -->|"implements"| node_contracts
node_field -->|"uses field type"| node_types
node_relation -->|"uses relation type"| node_types
node_computed -->|"uses field type"| node_types

click node_resource "https://github.com/dandoetech/resource-registry/blob/main/src/Resource.php"
click node_builder "https://github.com/dandoetech/resource-registry/blob/main/src/Builder/ResourceBuilder.php"
click node_contracts "https://github.com/dandoetech/resource-registry/blob/main/src/Contracts/ResourceDefinitionInterface.php"
click node_field "https://github.com/dandoetech/resource-registry/blob/main/src/Definition/FieldDefinition.php"
click node_relation "https://github.com/dandoetech/resource-registry/blob/main/src/Definition/RelationDefinition.php"
click node_computed "https://github.com/dandoetech/resource-registry/blob/main/src/Definition/ComputedFieldDefinition.php"
click node_action "https://github.com/dandoetech/resource-registry/blob/main/src/Definition/ActionDefinition.php"
click node_types "https://github.com/dandoetech/resource-registry/blob/main/src/Definition/FieldType.php"
click node_queryprofile "https://github.com/dandoetech/resource-registry/blob/main/src/Definition/QueryProfile.php"
click node_definition "https://github.com/dandoetech/resource-registry/blob/main/src/Definition/ResourceDefinition.php"
click node_registry "https://github.com/dandoetech/resource-registry/blob/main/src/Registry/Registry.php"
click node_arraydriver "https://github.com/dandoetech/resource-registry/blob/main/src/Registry/ArrayRegistryDriver.php"

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_resource,node_builder,node_consumer toneBlue
class node_contracts,node_field,node_relation,node_computed,node_action,node_types,node_queryprofile,node_definition toneAmber
class node_registry,node_arraydriver toneMint
```

## Components

### Resource authoring

- [Resource base](https://github.com/dandoetech/resource-registry/blob/main/src/Resource.php): `src/Resource.php`
- [ResourceBuilder](https://github.com/dandoetech/resource-registry/blob/main/src/Builder/ResourceBuilder.php): `src/Builder/ResourceBuilder.php`

### Metadata model

- [Definition contracts](https://github.com/dandoetech/resource-registry/blob/main/src/Contracts/ResourceDefinitionInterface.php): `src/Contracts/ResourceDefinitionInterface.php`
- [Field metadata](https://github.com/dandoetech/resource-registry/blob/main/src/Definition/FieldDefinition.php): `src/Definition/FieldDefinition.php`
- [Relation metadata](https://github.com/dandoetech/resource-registry/blob/main/src/Definition/RelationDefinition.php): `src/Definition/RelationDefinition.php`
- [Computed metadata](https://github.com/dandoetech/resource-registry/blob/main/src/Definition/ComputedFieldDefinition.php): `src/Definition/ComputedFieldDefinition.php`
- [Action metadata](https://github.com/dandoetech/resource-registry/blob/main/src/Definition/ActionDefinition.php): `src/Definition/ActionDefinition.php`
- [Metadata types](https://github.com/dandoetech/resource-registry/blob/main/src/Definition/FieldType.php): `src/Definition/FieldType.php`
- [Query profiles](https://github.com/dandoetech/resource-registry/blob/main/src/Definition/QueryProfile.php): `src/Definition/QueryProfile.php`
- [Resource definition](https://github.com/dandoetech/resource-registry/blob/main/src/Definition/ResourceDefinition.php): `src/Definition/ResourceDefinition.php`

### Registry access

- [Registry](https://github.com/dandoetech/resource-registry/blob/main/src/Registry/Registry.php): `src/Registry/Registry.php`
- [Array driver](https://github.com/dandoetech/resource-registry/blob/main/src/Registry/ArrayRegistryDriver.php): `src/Registry/ArrayRegistryDriver.php`

### Other components

- **Package user**

## Connections

- Package user → Resource base: defines resources (evidence: `README.md`)
- Package user → Registry: retrieves definitions (evidence: `README.md`)
- Resource base → ResourceBuilder: builds with (evidence: `src/Resource.php`)
- ResourceBuilder → Resource definition: builds (evidence: `src/Builder/ResourceBuilder.php`)
- ResourceBuilder → Field metadata: creates fields (evidence: `src/Builder/ResourceBuilder.php`)
- ResourceBuilder → Relation metadata: creates relations (evidence: `src/Builder/ResourceBuilder.php`)
- ResourceBuilder → Computed metadata: creates computed fields (evidence: `src/Builder/ResourceBuilder.php`)
- ResourceBuilder → Action metadata: creates actions (evidence: `src/Builder/ResourceBuilder.php`)
- ResourceBuilder → Query profiles: creates profiles (evidence: `src/Builder/ResourceBuilder.php`)
- Array driver → Resource definition: hydrates (evidence: `src/Registry/ArrayRegistryDriver.php`)
- Registry → Array driver: uses driver (evidence: `src/Registry/ArrayRegistryDriver.php`)
- Resource definition → Definition contracts: implements (evidence: `src/Definition/ResourceDefinition.php`)
- Field metadata → Metadata types: uses field type (evidence: `src/Definition/FieldDefinition.php`)
- Relation metadata → Metadata types: uses relation type (evidence: `src/Definition/RelationDefinition.php`)
- Computed metadata → Metadata types: uses field type (evidence: `src/Definition/ComputedFieldDefinition.php`)
