# phaneendra24/turium-assignment-backend architecture

> Architecture diagram of the GitHub repository phaneendra24/turium-assignment-backend, 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/phaneendra24/turium-assignment-backend
- Repository: https://github.com/phaneendra24/turium-assignment-backend

## Overview

This is an Express backend for a retrieval-augmented knowledge service. Users can ingest notes or URLs, retrieve stored items, ask context-grounded questions with citations, and review conversation history. URL ingestion extracts readable page content (falling back to Puppeteer); both ingestion types are chunked, embedded, and stored for semantic retrieval. Chat persists messages and citations in SQLite through Prisma. The README documents ChromaDB and OpenAI integrations; vector-store implementation details were not sampled, so those links reflect the documented capabilities rather than inspected internals.

Main entry points: [`src/data/data.service.ts`](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/data/data.service.ts) (Data workflows), [`src/db/queries.ts`](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/db/queries.ts) (Persistence queries), [`src/services/vectorStore.ts`](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/services/vectorStore.ts) (Vector store client), [`src/data/data.controller.ts`](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/data/data.controller.ts) (Request handlers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API"]
  node_app["Express app<br/>[app.ts]"]
  node_routes["API router<br/>[routes.ts]"]
  node_data_routes["Data endpoints<br/>[data.routes.ts]"]
  node_controller["Request handlers<br/>[data.controller.ts]"]
  node_schema["Input validation<br/>[data.schema.ts]"]
end

subgraph group_ingest["Content ingestion"]
  node_service["Data workflows<br/>[data.service.ts]"]
  node_scraper["Web extraction<br/>[scrape.service.ts]"]
  node_text["Text cleaning<br/>[text.service.ts]"]
  node_tokenizer["Chunking<br/>[tokenizer.ts]"]
  node_embedding["Embedding client<br/>[embedding.ts]"]
end

subgraph group_chat["Retrieval and chat"]
  node_vector["Vector store client<br/>[vectorStore.ts]"]
end

subgraph group_storage["Persistence"]
  node_queries["Persistence queries<br/>[queries.ts]"]
  node_prisma["Prisma client<br/>[index.ts]"]
end

node_user(("API user"))
node_openai["OpenAI API"]
node_chroma[("ChromaDB")]
node_sqlite[("SQLite database<br/>[schema.prisma]")]

node_user -->|"sends requests"| node_app
node_app -->|"mounts API"| node_routes
node_routes -->|"mounts data routes"| node_data_routes
node_data_routes -->|"dispatches handlers"| node_controller
node_controller -->|"validates input"| node_schema
node_controller -->|"invokes workflow"| node_service
node_service -->|"scrapes URLs"| node_scraper
node_scraper -->|"cleans extracted text"| node_text
node_service -->|"cleans notes"| node_text
node_service -->|"chunks content"| node_tokenizer
node_service -->|"embeds chunks"| node_embedding
node_embedding -->|"requests embeddings"| node_openai
node_service -->|"stores chunks"| node_vector
node_vector -->|"writes vectors"| node_chroma
node_scraper -.->|"fetches web pages"| node_user
node_service -->|"stores documents"| node_queries
node_service -->|"reads documents"| node_queries
node_queries -->|"executes queries"| node_prisma
node_prisma -->|"reads and writes"| node_sqlite
node_service -->|"embeds questions"| node_embedding
node_service -->|"searches chunks"| node_vector
node_vector -->|"queries vectors"| node_chroma
node_service -->|"generates answers"| node_openai
node_service -->|"persists conversations"| node_queries
node_service -->|"loads history"| node_queries

click node_app "https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/app.ts"
click node_routes "https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/routes/routes.ts"
click node_data_routes "https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/data/data.routes.ts"
click node_controller "https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/data/data.controller.ts"
click node_schema "https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/data/data.schema.ts"
click node_service "https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/data/data.service.ts"
click node_scraper "https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/services/scrape.service.ts"
click node_text "https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/services/text.service.ts"
click node_tokenizer "https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/services/tokenizer.ts"
click node_embedding "https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/services/embedding.ts"
click node_vector "https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/services/vectorStore.ts"
click node_queries "https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/db/queries.ts"
click node_prisma "https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/db/index.ts"
click node_sqlite "https://github.com/phaneendra24/turium-assignment-backend/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_app,node_routes,node_data_routes,node_controller,node_schema,node_user toneBlue
class node_service,node_scraper,node_text,node_tokenizer,node_embedding,node_chroma,node_sqlite toneAmber
class node_vector,node_openai toneMint
class node_queries,node_prisma toneRose
```

## Components

### API

- [Express app](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/app.ts): `src/app.ts`
- [API router](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/routes/routes.ts): `src/routes/routes.ts`
- [Data endpoints](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/data/data.routes.ts): `src/data/data.routes.ts`
- [Request handlers](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/data/data.controller.ts): `src/data/data.controller.ts`
- [Input validation](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/data/data.schema.ts): `src/data/data.schema.ts`

### Content ingestion

- [Data workflows](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/data/data.service.ts): `src/data/data.service.ts`
- [Web extraction](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/services/scrape.service.ts): `src/services/scrape.service.ts`
- [Text cleaning](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/services/text.service.ts): `src/services/text.service.ts`
- [Chunking](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/services/tokenizer.ts): `src/services/tokenizer.ts`
- [Embedding client](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/services/embedding.ts): `src/services/embedding.ts`

### Retrieval and chat

- [Vector store client](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/services/vectorStore.ts): `src/services/vectorStore.ts`

### Persistence

- [Persistence queries](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/db/queries.ts): `src/db/queries.ts`
- [Prisma client](https://github.com/phaneendra24/turium-assignment-backend/blob/main/src/db/index.ts): `src/db/index.ts`

### Other components

- **API user**
- **OpenAI API**
- **ChromaDB**
- [SQLite database](https://github.com/phaneendra24/turium-assignment-backend/blob/main/prisma/schema.prisma): `prisma/schema.prisma`

## Connections

- API user → Express app: sends requests
- Express app → API router: mounts API
- API router → Data endpoints: mounts data routes
- Data endpoints → Request handlers: dispatches handlers
- Request handlers → Input validation: validates input
- Request handlers → Data workflows: invokes workflow
- Data workflows → Web extraction: scrapes URLs
- Web extraction → Text cleaning: cleans extracted text
- Data workflows → Text cleaning: cleans notes
- Data workflows → Chunking: chunks content
- Data workflows → Embedding client: embeds chunks
- Embedding client → OpenAI API: requests embeddings
- Data workflows → Vector store client: stores chunks
- Vector store client → ChromaDB: writes vectors
- Web extraction → API user: fetches web pages
- Data workflows → Persistence queries: stores documents
- Data workflows → Persistence queries: reads documents
- Persistence queries → Prisma client: executes queries
- Prisma client → SQLite database: reads and writes
- Data workflows → Embedding client: embeds questions
- Data workflows → Vector store client: searches chunks
- Vector store client → ChromaDB: queries vectors
- Data workflows → OpenAI API: generates answers
- Data workflows → Persistence queries: persists conversations
- Data workflows → Persistence queries: loads history
