# nahiyanasir/cinematube architecture

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

- Interactive diagram: https://gitdiagram.com/nahiyanasir/cinematube
- Repository: https://github.com/nahiyanasir/cinematube

## Overview

This is an Express/Prisma backend for a media-catalog service with user accounts, media discovery, social lists and reviews, and paid access through media purchases or subscriptions. The principal workflow is a client request entering the app, being dispatched to a feature route/controller, handled by a service, and returned as an API response; authenticated actions also use user identity. The tree and sampled code support the review and auth flows in detail, while several other feature links are based on their module structure. No README was provided, so undocumented capabilities and unsampled integrations are not inferred.

Main entry points: [`src/app/routes/index.ts`](https://github.com/nahiyanasir/cinematube/blob/main/src/app/routes/index.ts) (Route registry), [`src/app/lib/prisma.ts`](https://github.com/nahiyanasir/cinematube/blob/main/src/app/lib/prisma.ts) (Prisma client), [`src/app/modules/auth/auth.service.ts`](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/auth/auth.service.ts) (Auth service), [`src/app/modules/auth/auth.controller.ts`](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/auth/auth.controller.ts) (Auth controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API entry"]
  node_app["Express app<br/>[app.ts]"]
  node_routes["Route registry<br/>[index.ts]"]
  node_authmw["Auth middleware<br/>[checkAuth.ts]"]
  node_errorhandling["Error handling<br/>[globalError.ts]"]
  node_prisma["Prisma client<br/>[prisma.ts]"]
  node_response["Response helpers<br/>[sendResponse.ts]"]
end

subgraph group_identity["Identity and users"]
  node_authcontroller["Auth controller<br/>[auth.controller.ts]"]
  node_authservice["Auth service<br/>[auth.service.ts]"]
  node_authlib["Auth provider<br/>[auth.ts]"]
  node_tokens["Token utilities<br/>[token.ts]"]
  node_usercontroller["User controller<br/>[user.controller.ts]"]
  node_userservice["User service<br/>[user.service.ts]"]
end

subgraph group_catalog["Catalog and engagement"]
  node_media["Media feature<br/>[media.service.ts]"]
  node_genre["Genre feature<br/>[genre.service.ts]"]
  node_reviews["Review feature<br/>[review.service.ts]"]
  node_watchlist["Watchlist feature"]
  node_bookmarks["Bookmarks"]
  node_favourites["Favourites"]
end

subgraph group_commerce["Payments and access"]
  node_payment["Media payments<br/>[payment.service.ts]"]
  node_subscription["Subscriptions<br/>[sub.service.ts]"]
  node_stripeconfig["Stripe config<br/>[stripe.config.ts]"]
end

subgraph group_operations["Administration"]
  node_contact["Contact messages<br/>[contact.service.ts]"]
  node_admin["Admin operations<br/>[admin.service.ts]"]
end

node_client(("API client"))
node_database[("Application database")]

node_client -->|"sends request"| node_app
node_app -->|"mounts routes"| node_routes
node_routes -->|"guards requests"| node_authmw
node_authmw -->|"dispatches auth"| node_authcontroller
node_authcontroller -->|"calls"| node_authservice
node_authservice -->|"calls auth API"| node_authlib
node_authservice -->|"creates tokens"| node_tokens
node_authservice -->|"reads/writes users"| node_prisma
node_authservice -->|"reads/writes sessions"| node_prisma
node_routes -->|"dispatches user"| node_usercontroller
node_usercontroller -->|"calls"| node_userservice
node_userservice -->|"accesses user data"| node_prisma
node_routes -->|"dispatches media"| node_media
node_routes -->|"dispatches genres"| node_genre
node_routes -->|"dispatches reviews"| node_reviews
node_reviews -->|"reads/writes reviews"| node_prisma
node_reviews -->|"updates media ratings"| node_prisma
node_routes -->|"dispatches watchlist"| node_watchlist
node_routes -->|"dispatches bookmarks"| node_bookmarks
node_routes -->|"dispatches favourites"| node_favourites
node_routes -->|"dispatches payments"| node_payment
node_routes -->|"dispatches subscriptions"| node_subscription
node_subscription -->|"uses config"| node_stripeconfig
node_routes -->|"dispatches contact"| node_contact
node_routes -->|"dispatches admin"| node_admin
node_media -->|"accesses catalog"| node_prisma
node_genre -->|"accesses genres"| node_prisma
node_watchlist -->|"accesses lists"| node_prisma
node_bookmarks -->|"accesses bookmarks"| node_prisma
node_favourites -->|"accesses favourites"| node_prisma
node_payment -->|"accesses payments"| node_prisma
node_contact -->|"accesses messages"| node_prisma
node_admin -->|"accesses admin data"| node_prisma
node_prisma -->|"queries"| node_database
node_authcontroller -->|"formats response"| node_response
node_usercontroller -->|"formats response"| node_response

click node_app "https://github.com/nahiyanasir/cinematube/blob/main/src/app.ts"
click node_routes "https://github.com/nahiyanasir/cinematube/blob/main/src/app/routes/index.ts"
click node_authmw "https://github.com/nahiyanasir/cinematube/blob/main/src/app/middlewares/checkAuth.ts"
click node_errorhandling "https://github.com/nahiyanasir/cinematube/blob/main/src/app/middlewares/globalError.ts"
click node_authcontroller "https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/auth/auth.controller.ts"
click node_authservice "https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/auth/auth.service.ts"
click node_authlib "https://github.com/nahiyanasir/cinematube/blob/main/src/app/lib/auth.ts"
click node_tokens "https://github.com/nahiyanasir/cinematube/blob/main/src/app/utils/token.ts"
click node_usercontroller "https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/user/user.controller.ts"
click node_userservice "https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/user/user.service.ts"
click node_media "https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/media/media.service.ts"
click node_genre "https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/genre/genre.service.ts"
click node_reviews "https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/review/review.service.ts"
click node_watchlist "https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/watchList/watchList.service.ts"
click node_bookmarks "https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/bookmark/bookmark.service.ts"
click node_favourites "https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/favourite/favourite.service.ts"
click node_payment "https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/payment/payment.service.ts"
click node_subscription "https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/subscription/sub.service.ts"
click node_stripeconfig "https://github.com/nahiyanasir/cinematube/blob/main/src/app/config/stripe.config.ts"
click node_contact "https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/contact/contact.service.ts"
click node_admin "https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/admin/admin.service.ts"
click node_prisma "https://github.com/nahiyanasir/cinematube/blob/main/src/app/lib/prisma.ts"
click node_response "https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/shared/sendResponse.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_app,node_routes,node_authmw,node_errorhandling,node_prisma,node_response,node_client toneBlue
class node_authcontroller,node_authservice,node_authlib,node_tokens,node_usercontroller,node_userservice,node_database toneAmber
class node_media,node_genre,node_reviews,node_watchlist,node_bookmarks,node_favourites toneMint
class node_payment,node_subscription,node_stripeconfig toneRose
class node_contact,node_admin toneIndigo
```

## Components

### API entry

- [Express app](https://github.com/nahiyanasir/cinematube/blob/main/src/app.ts): `src/app.ts`
- [Route registry](https://github.com/nahiyanasir/cinematube/blob/main/src/app/routes/index.ts): `src/app/routes/index.ts`
- [Auth middleware](https://github.com/nahiyanasir/cinematube/blob/main/src/app/middlewares/checkAuth.ts): `src/app/middlewares/checkAuth.ts`
- [Error handling](https://github.com/nahiyanasir/cinematube/blob/main/src/app/middlewares/globalError.ts): `src/app/middlewares/globalError.ts`
- [Prisma client](https://github.com/nahiyanasir/cinematube/blob/main/src/app/lib/prisma.ts): `src/app/lib/prisma.ts`
- [Response helpers](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/shared/sendResponse.ts): `src/app/modules/shared/sendResponse.ts`

### Identity and users

- [Auth controller](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/auth/auth.controller.ts): `src/app/modules/auth/auth.controller.ts`
- [Auth service](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/auth/auth.service.ts): `src/app/modules/auth/auth.service.ts`
- [Auth provider](https://github.com/nahiyanasir/cinematube/blob/main/src/app/lib/auth.ts): `src/app/lib/auth.ts`
- [Token utilities](https://github.com/nahiyanasir/cinematube/blob/main/src/app/utils/token.ts): `src/app/utils/token.ts`
- [User controller](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/user/user.controller.ts): `src/app/modules/user/user.controller.ts`
- [User service](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/user/user.service.ts): `src/app/modules/user/user.service.ts`

### Catalog and engagement

- [Media feature](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/media/media.service.ts): `src/app/modules/media/media.service.ts`
- [Genre feature](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/genre/genre.service.ts): `src/app/modules/genre/genre.service.ts`
- [Review feature](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/review/review.service.ts): `src/app/modules/review/review.service.ts`
- [Watchlist feature](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/watchList/watchList.service.ts): `src/app/modules/watchList/watchList.service.ts`
- [Bookmarks](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/bookmark/bookmark.service.ts): `src/app/modules/bookmark/bookmark.service.ts`
- [Favourites](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/favourite/favourite.service.ts): `src/app/modules/favourite/favourite.service.ts`

### Payments and access

- [Media payments](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/payment/payment.service.ts): `src/app/modules/payment/payment.service.ts`
- [Subscriptions](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/subscription/sub.service.ts): `src/app/modules/subscription/sub.service.ts`
- [Stripe config](https://github.com/nahiyanasir/cinematube/blob/main/src/app/config/stripe.config.ts): `src/app/config/stripe.config.ts`

### Administration

- [Contact messages](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/contact/contact.service.ts): `src/app/modules/contact/contact.service.ts`
- [Admin operations](https://github.com/nahiyanasir/cinematube/blob/main/src/app/modules/admin/admin.service.ts): `src/app/modules/admin/admin.service.ts`

### Other components

- **API client**
- **Application database**

## Connections

- API client → Express app: sends request
- Express app → Route registry: mounts routes
- Route registry → Auth middleware: guards requests
- Auth middleware → Auth controller: dispatches auth
- Auth controller → Auth service: calls
- Auth service → Auth provider: calls auth API
- Auth service → Token utilities: creates tokens
- Auth service → Prisma client: reads/writes users
- Auth service → Prisma client: reads/writes sessions
- Route registry → User controller: dispatches user
- User controller → User service: calls
- User service → Prisma client: accesses user data
- Route registry → Media feature: dispatches media
- Route registry → Genre feature: dispatches genres
- Route registry → Review feature: dispatches reviews
- Review feature → Prisma client: reads/writes reviews
- Review feature → Prisma client: updates media ratings
- Route registry → Watchlist feature: dispatches watchlist
- Route registry → Bookmarks: dispatches bookmarks
- Route registry → Favourites: dispatches favourites
- Route registry → Media payments: dispatches payments
- Route registry → Subscriptions: dispatches subscriptions
- Subscriptions → Stripe config: uses config
- Route registry → Contact messages: dispatches contact
- Route registry → Admin operations: dispatches admin
- Media feature → Prisma client: accesses catalog
- Genre feature → Prisma client: accesses genres
- Watchlist feature → Prisma client: accesses lists
- Bookmarks → Prisma client: accesses bookmarks
- Favourites → Prisma client: accesses favourites
- Media payments → Prisma client: accesses payments
- Contact messages → Prisma client: accesses messages
- Admin operations → Prisma client: accesses admin data
- Prisma client → Application database: queries
- Auth controller → Response helpers: formats response
- User controller → Response helpers: formats response
