# sanjeevpandeyy/document-vault architecture

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

- Interactive diagram: https://gitdiagram.com/sanjeevpandeyy/document-vault
- Repository: https://github.com/sanjeevpandeyy/document-vault

## Overview

Document Vault is a GraphQL API for organizing collections and managing documents. A client request enters through the Bun server, is handled by the GraphQL schema and resolvers, then reaches collection or document services that validate inputs and use Prisma to access PostgreSQL. The README also describes search, filtering, cursor pagination, tags, archiving, nested collection documents, and structured errors. Resolver and schema-composition source was not sampled, so those links follow the documented structure and tree; uncertain internal wiring is omitted.

Main entry points: [`src/graphql/resolvers/index.ts`](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/graphql/resolvers/index.ts) (Resolver map), [`src/server.ts`](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/server.ts) (Bun server), [`src/services/collection.service.ts`](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/services/collection.service.ts) (Collection service), [`src/services/document.service.ts`](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/services/document.service.ts) (Document service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["GraphQL API"]
  node_server["Bun server<br/>[server.ts]"]
  node_schema_builder["Schema setup<br/>[schema.ts]"]
  node_schema_def["GraphQL schema<br/>[schema.graphql]"]
  node_resolver_map["Resolver map<br/>[index.ts]"]
  node_collection_resolver["Collection resolvers"]
  node_document_resolver["Document resolvers"]
  node_relationship_resolver["Relationship resolvers"]
  node_datetime["DateTime scalar<br/>[datetime.scalar.ts]"]
end

subgraph group_domain["Vault Services"]
  node_collection_service["Collection service"]
  node_document_service["Document service"]
end

subgraph group_data["Persistence"]
  node_prisma["Prisma client<br/>[prisma.ts]"]
  node_postgres[("PostgreSQL<br/>[schema.prisma]")]
end

subgraph group_crosscut["Shared Support"]
  node_validators["Input validation<br/>[common.ts]"]
  node_app_errors["Structured errors<br/>[app-error.ts]"]
  node_env["Runtime config<br/>[env.ts]"]
end

node_client(("API client"))

node_client -->|"sends GraphQL"| node_server
node_server -->|"serves schema"| node_schema_builder
node_schema_builder -->|"defines types"| node_schema_def
node_schema_builder -->|"uses resolvers"| node_resolver_map
node_resolver_map -->|"registers"| node_collection_resolver
node_resolver_map -->|"registers"| node_document_resolver
node_resolver_map -->|"registers"| node_relationship_resolver
node_resolver_map -->|"registers"| node_datetime
node_collection_resolver -->|"delegates"| node_collection_service
node_document_resolver -->|"delegates"| node_document_service
node_collection_service -->|"validates input"| node_validators
node_document_service -->|"validates input"| node_validators
node_collection_service -->|"raises errors"| node_app_errors
node_document_service -->|"raises errors"| node_app_errors
node_server -->|"formats errors"| node_app_errors
node_server -->|"reads port"| node_env
node_prisma -->|"reads database URL"| node_env
node_collection_service -->|"queries and writes"| node_prisma
node_document_service -->|"queries and writes"| node_prisma
node_prisma -->|"accesses data"| node_postgres

click node_server "https://github.com/sanjeevpandeyy/document-vault/blob/main/src/server.ts"
click node_schema_builder "https://github.com/sanjeevpandeyy/document-vault/blob/main/src/graphql/schema.ts"
click node_schema_def "https://github.com/sanjeevpandeyy/document-vault/blob/main/src/graphql/schema.graphql"
click node_resolver_map "https://github.com/sanjeevpandeyy/document-vault/blob/main/src/graphql/resolvers/index.ts"
click node_collection_resolver "https://github.com/sanjeevpandeyy/document-vault/blob/main/src/graphql/resolvers/collection.resolver.ts"
click node_document_resolver "https://github.com/sanjeevpandeyy/document-vault/blob/main/src/graphql/resolvers/document.resolver.ts"
click node_relationship_resolver "https://github.com/sanjeevpandeyy/document-vault/blob/main/src/graphql/resolvers/relationship.resolver.ts"
click node_datetime "https://github.com/sanjeevpandeyy/document-vault/blob/main/src/graphql/resolvers/datetime.scalar.ts"
click node_collection_service "https://github.com/sanjeevpandeyy/document-vault/blob/main/src/services/collection.service.ts"
click node_document_service "https://github.com/sanjeevpandeyy/document-vault/blob/main/src/services/document.service.ts"
click node_validators "https://github.com/sanjeevpandeyy/document-vault/blob/main/src/validators/common.ts"
click node_app_errors "https://github.com/sanjeevpandeyy/document-vault/blob/main/src/errors/app-error.ts"
click node_env "https://github.com/sanjeevpandeyy/document-vault/blob/main/src/config/env.ts"
click node_prisma "https://github.com/sanjeevpandeyy/document-vault/blob/main/src/lib/prisma.ts"
click node_postgres "https://github.com/sanjeevpandeyy/document-vault/blob/main/prisma/schema.prisma"

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_server,node_schema_builder,node_schema_def,node_resolver_map,node_collection_resolver,node_document_resolver,node_relationship_resolver,node_datetime,node_client toneBlue
class node_collection_service,node_document_service toneAmber
class node_prisma,node_postgres toneMint
class node_validators,node_app_errors,node_env toneRose
```

## Components

### GraphQL API

- [Bun server](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/server.ts): `src/server.ts`
- [Schema setup](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/graphql/schema.ts): `src/graphql/schema.ts`
- [GraphQL schema](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/graphql/schema.graphql): `src/graphql/schema.graphql`
- [Resolver map](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/graphql/resolvers/index.ts): `src/graphql/resolvers/index.ts`
- [Collection resolvers](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/graphql/resolvers/collection.resolver.ts): `src/graphql/resolvers/collection.resolver.ts`
- [Document resolvers](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/graphql/resolvers/document.resolver.ts): `src/graphql/resolvers/document.resolver.ts`
- [Relationship resolvers](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/graphql/resolvers/relationship.resolver.ts): `src/graphql/resolvers/relationship.resolver.ts`
- [DateTime scalar](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/graphql/resolvers/datetime.scalar.ts): `src/graphql/resolvers/datetime.scalar.ts`

### Vault Services

- [Collection service](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/services/collection.service.ts): `src/services/collection.service.ts`
- [Document service](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/services/document.service.ts): `src/services/document.service.ts`

### Persistence

- [Prisma client](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/lib/prisma.ts): `src/lib/prisma.ts`
- [PostgreSQL](https://github.com/sanjeevpandeyy/document-vault/blob/main/prisma/schema.prisma): `prisma/schema.prisma`

### Shared Support

- [Input validation](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/validators/common.ts): `src/validators/common.ts`
- [Structured errors](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/errors/app-error.ts): `src/errors/app-error.ts`
- [Runtime config](https://github.com/sanjeevpandeyy/document-vault/blob/main/src/config/env.ts): `src/config/env.ts`

### Other components

- **API client**

## Connections

- API client → Bun server: sends GraphQL
- Bun server → Schema setup: serves schema
- Schema setup → GraphQL schema: defines types
- Schema setup → Resolver map: uses resolvers
- Resolver map → Collection resolvers: registers
- Resolver map → Document resolvers: registers
- Resolver map → Relationship resolvers: registers
- Resolver map → DateTime scalar: registers
- Collection resolvers → Collection service: delegates
- Document resolvers → Document service: delegates
- Collection service → Input validation: validates input
- Document service → Input validation: validates input
- Collection service → Structured errors: raises errors
- Document service → Structured errors: raises errors
- Bun server → Structured errors: formats errors
- Bun server → Runtime config: reads port
- Prisma client → Runtime config: reads database URL
- Collection service → Prisma client: queries and writes
- Document service → Prisma client: queries and writes
- Prisma client → PostgreSQL: accesses data
