# sonsonyyy/podcast architecture

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

- Interactive diagram: https://gitdiagram.com/sonsonyyy/podcast
- Repository: https://github.com/sonsonyyy/podcast

## Overview

Podcast is a small NestJS backend. The main workflow is an HTTP client creating, listing, filtering featured episodes, or retrieving an episode; the episodes controller validates input and delegates episode operations to a service that keeps records in memory. A configuration service is called for logging, and a separate topics module is registered, though its behavior is not shown in the sampled source. No persistent database or external service is evidenced.

Main entry points: [`src/episodes/episodes.controller.ts`](https://github.com/sonsonyyy/podcast/blob/main/src/episodes/episodes.controller.ts) (Episode routes), [`src/app.module.ts`](https://github.com/sonsonyyy/podcast/blob/main/src/app.module.ts) (App composition), [`src/episodes/episodes.service.ts`](https://github.com/sonsonyyy/podcast/blob/main/src/episodes/episodes.service.ts) (Episode operations), [`src/app.controller.ts`](https://github.com/sonsonyyy/podcast/blob/main/src/app.controller.ts) (Root endpoint)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["HTTP runtime"]
  node_bootstrap["Nest bootstrap<br/>[main.ts]"]
  node_app["App composition<br/>[app.module.ts]"]
  node_app_controller["Root endpoint<br/>[app.controller.ts]"]
  node_app_service["Greeting service<br/>[app.service.ts]"]
end

subgraph group_episodes["Episode handling"]
  node_episodes_controller["Episode routes"]
  node_episodes_service["Episode operations"]
  node_episode_store[("In-memory episodes")]
  node_episode_dto["Create episode input"]
  node_episode_entity["Episode model<br/>[episode.entity.ts]"]
  node_positive_pipe["Positive limit check"]
end

subgraph group_support["Supporting services"]
  node_config_module["Config module<br/>[config.module.ts]"]
  node_config_service["Config logger<br/>[config.service.ts]"]
  node_topics_module["Topics module<br/>[topics.module.ts]"]
end

node_client(("HTTP client"))

node_client -->|"calls episode routes"| node_episodes_controller
node_client -->|"calls root route"| node_app_controller
node_bootstrap -->|"creates application"| node_app
node_app_controller -->|"calls greeting"| node_app_service
node_episodes_controller -->|"delegates episode operations"| node_episodes_service
node_episodes_controller -->|"calls logging"| node_config_service
node_episodes_controller -->|"validates limit"| node_positive_pipe
node_episodes_controller -->|"validates create input"| node_episode_dto
node_episodes_service -->|"reads and writes"| node_episode_store
node_episodes_service -->|"uses episode records"| node_episode_entity
node_app -->|"registers controller"| node_app_controller
node_app -->|"registers provider"| node_app_service
node_app -->|"imports module"| node_topics_module
node_app -->|"imports episode module"| node_episodes_controller
node_config_module -->|"provides service"| node_config_service

click node_bootstrap "https://github.com/sonsonyyy/podcast/blob/main/src/main.ts"
click node_app "https://github.com/sonsonyyy/podcast/blob/main/src/app.module.ts"
click node_app_controller "https://github.com/sonsonyyy/podcast/blob/main/src/app.controller.ts"
click node_app_service "https://github.com/sonsonyyy/podcast/blob/main/src/app.service.ts"
click node_episodes_controller "https://github.com/sonsonyyy/podcast/blob/main/src/episodes/episodes.controller.ts"
click node_episodes_service "https://github.com/sonsonyyy/podcast/blob/main/src/episodes/episodes.service.ts"
click node_episode_store "https://github.com/sonsonyyy/podcast/blob/main/src/episodes/episodes.service.ts"
click node_episode_dto "https://github.com/sonsonyyy/podcast/blob/main/src/episodes/dto/create-episode.dto.ts"
click node_episode_entity "https://github.com/sonsonyyy/podcast/blob/main/src/episodes/entity/episode.entity.ts"
click node_positive_pipe "https://github.com/sonsonyyy/podcast/blob/main/src/pipes/is-positive/is-positive.pipe.ts"
click node_config_module "https://github.com/sonsonyyy/podcast/blob/main/src/config/config.module.ts"
click node_config_service "https://github.com/sonsonyyy/podcast/blob/main/src/config/config.service.ts"
click node_topics_module "https://github.com/sonsonyyy/podcast/blob/main/src/topics/topics.module.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_bootstrap,node_app,node_app_controller,node_app_service,node_client toneBlue
class node_episodes_controller,node_episodes_service,node_episode_store,node_episode_dto,node_episode_entity,node_positive_pipe toneAmber
class node_config_module,node_config_service,node_topics_module toneMint
```

## Components

### HTTP runtime

- [Nest bootstrap](https://github.com/sonsonyyy/podcast/blob/main/src/main.ts): `src/main.ts`
- [App composition](https://github.com/sonsonyyy/podcast/blob/main/src/app.module.ts): `src/app.module.ts`
- [Root endpoint](https://github.com/sonsonyyy/podcast/blob/main/src/app.controller.ts): `src/app.controller.ts`
- [Greeting service](https://github.com/sonsonyyy/podcast/blob/main/src/app.service.ts): `src/app.service.ts`

### Episode handling

- [Episode routes](https://github.com/sonsonyyy/podcast/blob/main/src/episodes/episodes.controller.ts): `src/episodes/episodes.controller.ts`
- [Episode operations](https://github.com/sonsonyyy/podcast/blob/main/src/episodes/episodes.service.ts): `src/episodes/episodes.service.ts`
- [In-memory episodes](https://github.com/sonsonyyy/podcast/blob/main/src/episodes/episodes.service.ts): `src/episodes/episodes.service.ts`
- [Create episode input](https://github.com/sonsonyyy/podcast/blob/main/src/episodes/dto/create-episode.dto.ts): `src/episodes/dto/create-episode.dto.ts`
- [Episode model](https://github.com/sonsonyyy/podcast/blob/main/src/episodes/entity/episode.entity.ts): `src/episodes/entity/episode.entity.ts`
- [Positive limit check](https://github.com/sonsonyyy/podcast/blob/main/src/pipes/is-positive/is-positive.pipe.ts): `src/pipes/is-positive/is-positive.pipe.ts`

### Supporting services

- [Config module](https://github.com/sonsonyyy/podcast/blob/main/src/config/config.module.ts): `src/config/config.module.ts`
- [Config logger](https://github.com/sonsonyyy/podcast/blob/main/src/config/config.service.ts): `src/config/config.service.ts`
- [Topics module](https://github.com/sonsonyyy/podcast/blob/main/src/topics/topics.module.ts): `src/topics/topics.module.ts`

### Other components

- **HTTP client**

## Connections

- HTTP client → Episode routes: calls episode routes
- HTTP client → Root endpoint: calls root route
- Nest bootstrap → App composition: creates application
- Root endpoint → Greeting service: calls greeting
- Episode routes → Episode operations: delegates episode operations
- Episode routes → Config logger: calls logging
- Episode routes → Positive limit check: validates limit
- Episode routes → Create episode input: validates create input
- Episode operations → In-memory episodes: reads and writes
- Episode operations → Episode model: uses episode records
- App composition → Root endpoint: registers controller
- App composition → Greeting service: registers provider
- App composition → Topics module: imports module
- App composition → Episode routes: imports episode module
- Config module → Config logger: provides service
