# trieudb3317dev/digital-museum-be architecture

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

- Interactive diagram: https://gitdiagram.com/trieudb3317dev/digital-museum-be
- Repository: https://github.com/trieudb3317dev/digital-museum-be

## Overview

Digital Museum API is a NestJS backend for public museum discovery and museum-staff content management. Visitors browse published museums and content, search, and save favorites; staff manage artifacts and related collections, exhibitions, tours, media, and narrations, with editorial workflows and platform-admin controls. Controllers delegate domain operations to a shared service, while narration audio generation is handled by a TTS service. The README documents PostgreSQL persistence and MVP limits; unsampled implementation details are not inferred beyond those documented capabilities.

Main entry points: [`src/platform.service.ts`](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/platform.service.ts) (Platform domain service), [`src/narrations/tts.service.ts`](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/narrations/tts.service.ts) (Narration audio generation), [`src/auth/auth.controller.ts`](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/auth/auth.controller.ts) (Accounts and profiles), [`src/museums/museums.controller.ts`](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/museums/museums.controller.ts) (Museum directory and membership)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and access"]
  node_auth["Accounts and profiles<br/>[auth.controller.ts]"]
  node_guards["Authentication and scope<br/>[guards.ts]"]
end

subgraph group_museum["Museum administration"]
  node_museumapi["Museum directory and membership"]
  node_platformadmin["Platform administration"]
end

subgraph group_content["Content management"]
  node_contentapi["Artifacts, collections, exhibitions"]
  node_workflow["Editorial workflow rules<br/>[workflow.ts]"]
  node_mediaapi["Media management"]
  node_dimensions["Image validation"]
end

subgraph group_experiences["Visitor experiences"]
  node_tours["Virtual tours and scenes"]
  node_narrations["Narration management"]
  node_tts["Narration audio generation<br/>[tts.service.ts]"]
  node_ttsprovider["TTS provider adapter<br/>[tts.provider.ts]"]
  node_search["Public search"]
  node_favorites["Visitor favorites"]
end

subgraph group_data["Domain and persistence"]
  node_service["Platform domain service"]
  node_entities["Museum domain entities<br/>[index.ts]"]
  node_database[("PostgreSQL")]
end

node_visitor(("Visitor"))
node_staff(("Museum staff"))
node_admin(("Platform admin"))

node_visitor -->|"registers or signs in"| node_auth
node_staff -->|"authenticates"| node_auth
node_admin -->|"manages museums"| node_platformadmin
node_visitor -->|"browses museums"| node_museumapi
node_staff -->|"manages memberships"| node_museumapi
node_visitor -->|"browses content"| node_contentapi
node_staff -->|"manages content"| node_contentapi
node_staff -->|"builds tours"| node_tours
node_visitor -->|"views tours"| node_tours
node_staff -->|"manages media"| node_mediaapi
node_staff -->|"manages narrations"| node_narrations
node_visitor -->|"reads narrations"| node_narrations
node_visitor -->|"searches content"| node_search
node_visitor -->|"saves favorites"| node_favorites
node_auth -->|"delegates account operations"| node_service
node_museumapi -->|"delegates museum operations"| node_service
node_platformadmin -->|"delegates admin operations"| node_service
node_contentapi -->|"delegates content operations"| node_service
node_tours -->|"delegates tour operations"| node_service
node_mediaapi -->|"delegates media operations"| node_service
node_narrations -->|"delegates narration operations"| node_service
node_search -->|"delegates search"| node_service
node_favorites -->|"delegates favorites"| node_service
node_service -->|"validates image dimensions"| node_dimensions
node_service -->|"applies workflow rules"| node_workflow
node_service -->|"enqueues audio generation"| node_tts
node_tts -->|"synthesizes speech"| node_ttsprovider
node_service -->|"uses domain entities"| node_entities
node_tts -->|"reads and saves records"| node_entities
node_entities -->|"maps persisted records"| node_database

click node_auth "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/auth/auth.controller.ts"
click node_guards "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/common/guards.ts"
click node_service "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/platform.service.ts"
click node_museumapi "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/museums/museums.controller.ts"
click node_platformadmin "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/museums/platform-admin.controller.ts"
click node_contentapi "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/content/content.controller.ts"
click node_workflow "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/common/workflow.ts"
click node_mediaapi "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/media/media.controller.ts"
click node_dimensions "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/media/image-dimensions.ts"
click node_tours "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/tours/tours.controller.ts"
click node_narrations "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/narrations/narrations.controller.ts"
click node_tts "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/narrations/tts.service.ts"
click node_ttsprovider "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/narrations/tts.provider.ts"
click node_search "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/search/search.controller.ts"
click node_favorites "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/favorites/favorites.controller.ts"
click node_entities "https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/entities/index.ts"

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_auth,node_guards toneBlue
class node_museumapi,node_platformadmin toneAmber
class node_contentapi,node_workflow,node_mediaapi,node_dimensions toneMint
class node_tours,node_narrations,node_tts,node_ttsprovider,node_search,node_favorites toneRose
class node_service,node_entities,node_database,node_visitor,node_staff,node_admin toneIndigo
```

## Components

### API and access

- [Accounts and profiles](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/auth/auth.controller.ts): `src/auth/auth.controller.ts`
- [Authentication and scope](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/common/guards.ts): `src/common/guards.ts`

### Museum administration

- [Museum directory and membership](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/museums/museums.controller.ts): `src/museums/museums.controller.ts`
- [Platform administration](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/museums/platform-admin.controller.ts): `src/museums/platform-admin.controller.ts`

### Content management

- [Artifacts, collections, exhibitions](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/content/content.controller.ts): `src/content/content.controller.ts`
- [Editorial workflow rules](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/common/workflow.ts): `src/common/workflow.ts`
- [Media management](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/media/media.controller.ts): `src/media/media.controller.ts`
- [Image validation](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/media/image-dimensions.ts): `src/media/image-dimensions.ts`

### Visitor experiences

- [Virtual tours and scenes](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/tours/tours.controller.ts): `src/tours/tours.controller.ts`
- [Narration management](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/narrations/narrations.controller.ts): `src/narrations/narrations.controller.ts`
- [Narration audio generation](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/narrations/tts.service.ts): `src/narrations/tts.service.ts`
- [TTS provider adapter](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/narrations/tts.provider.ts): `src/narrations/tts.provider.ts`
- [Public search](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/search/search.controller.ts): `src/search/search.controller.ts`
- [Visitor favorites](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/favorites/favorites.controller.ts): `src/favorites/favorites.controller.ts`

### Domain and persistence

- [Platform domain service](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/platform.service.ts): `src/platform.service.ts`
- [Museum domain entities](https://github.com/trieudb3317dev/digital-museum-be/blob/master/src/entities/index.ts): `src/entities/index.ts`
- **PostgreSQL**

### Other components

- **Visitor**
- **Museum staff**
- **Platform admin**

## Connections

- Visitor → Accounts and profiles: registers or signs in
- Museum staff → Accounts and profiles: authenticates
- Platform admin → Platform administration: manages museums
- Visitor → Museum directory and membership: browses museums
- Museum staff → Museum directory and membership: manages memberships
- Visitor → Artifacts, collections, exhibitions: browses content
- Museum staff → Artifacts, collections, exhibitions: manages content
- Museum staff → Virtual tours and scenes: builds tours
- Visitor → Virtual tours and scenes: views tours
- Museum staff → Media management: manages media
- Museum staff → Narration management: manages narrations
- Visitor → Narration management: reads narrations
- Visitor → Public search: searches content
- Visitor → Visitor favorites: saves favorites
- Accounts and profiles → Platform domain service: delegates account operations (evidence: `src/auth/auth.controller.ts`)
- Museum directory and membership → Platform domain service: delegates museum operations (evidence: `src/museums/museums.controller.ts`)
- Platform administration → Platform domain service: delegates admin operations (evidence: `src/museums/platform-admin.controller.ts`)
- Artifacts, collections, exhibitions → Platform domain service: delegates content operations (evidence: `src/content/content.controller.ts`)
- Virtual tours and scenes → Platform domain service: delegates tour operations (evidence: `src/tours/tours.controller.ts`)
- Media management → Platform domain service: delegates media operations (evidence: `src/media/media.controller.ts`)
- Narration management → Platform domain service: delegates narration operations (evidence: `src/narrations/narrations.controller.ts`)
- Public search → Platform domain service: delegates search (evidence: `src/search/search.controller.ts`)
- Visitor favorites → Platform domain service: delegates favorites (evidence: `src/favorites/favorites.controller.ts`)
- Platform domain service → Image validation: validates image dimensions (evidence: `src/platform.service.ts`)
- Platform domain service → Editorial workflow rules: applies workflow rules (evidence: `src/platform.service.ts`)
- Platform domain service → Narration audio generation: enqueues audio generation (evidence: `src/platform.service.ts`)
- Narration audio generation → TTS provider adapter: synthesizes speech (evidence: `src/narrations/tts.service.ts`)
- Platform domain service → Museum domain entities: uses domain entities (evidence: `src/platform.service.ts`)
- Narration audio generation → Museum domain entities: reads and saves records (evidence: `src/narrations/tts.service.ts`)
- Museum domain entities → PostgreSQL: maps persisted records
