# aliraza372/asessmenttask-nextjs architecture

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

- Interactive diagram: https://gitdiagram.com/aliraza372/asessmenttask-nextjs
- Repository: https://github.com/aliraza372/asessmenttask-nextjs

## Overview

Movies is a web application for signing in and managing a personal movie list, including poster uploads. The main workflow is login, browse a paginated list, create a movie with an uploaded image, and edit movie details. The sampled source shows the dashboard and create flows plus API persistence; edit and some authentication wiring are inferred only from the tree and are shown conservatively.

Main entry points: [`app/api/movies/route.ts`](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/api/movies/route.ts) (Movie collection API), [`backend/lib/dbConnect.ts`](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/backend/lib/dbConnect.ts) (Database connector), [`app/dashboard/page.tsx`](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/dashboard/page.tsx) (Movie dashboard), [`app/dashboard/create/page.tsx`](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/dashboard/create/page.tsx) (Create movie)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Web experience"]
  node_login_page["Login page<br/>[page.tsx]"]
  node_dashboard["Movie dashboard<br/>[page.tsx]"]
  node_create_form["Create movie<br/>[page.tsx]"]
  node_edit_form["Edit movie<br/>[page.tsx]"]
  node_movie_card["Movie card<br/>[MovieCard.tsx]"]
end

subgraph group_api["Application API"]
  node_movie_collection_api["Movie collection API<br/>[route.ts]"]
  node_movie_item_api["Movie item API<br/>[route.ts]"]
  node_upload_api["Poster upload API<br/>[route.ts]"]
end

subgraph group_identity["Identity"]
  node_login_action["Login action<br/>[lib.ts]"]
  node_user_api["User lookup<br/>[route.ts]"]
  node_seed_api["Seed account<br/>[route.ts]"]
end

subgraph group_data["Persistence"]
  node_user_model["User model<br/>[User.ts]"]
  node_movie_model["Movie model<br/>[Movie.ts]"]
  node_db_connection["Database connector<br/>[dbConnect.ts]"]
end

node_visitor(("Visitor"))
node_mongo[("MongoDB")]
node_poster_files["Poster files"]

node_visitor -->|"opens"| node_login_page
node_visitor -->|"browses"| node_dashboard
node_visitor -->|"submits"| node_create_form
node_visitor -->|"edits"| node_edit_form
node_login_page -->|"authenticates"| node_login_action
node_login_action -->|"fetches user"| node_user_api
node_user_api -->|"connects"| node_db_connection
node_user_api -->|"queries"| node_user_model
node_seed_api -->|"connects"| node_db_connection
node_seed_api -->|"creates account"| node_user_model
node_dashboard -->|"fetches page"| node_movie_collection_api
node_dashboard -->|"renders"| node_movie_card
node_create_form -->|"uploads poster"| node_upload_api
node_create_form -->|"creates movie"| node_movie_collection_api
node_edit_form -.->|"updates movie"| node_movie_item_api
node_movie_collection_api -->|"connects"| node_db_connection
node_movie_collection_api -->|"queries and saves"| node_movie_model
node_movie_item_api -->|"connects"| node_db_connection
node_movie_item_api -->|"reads and updates"| node_movie_model
node_user_model -->|"persists"| node_mongo
node_movie_model -->|"persists"| node_mongo
node_upload_api -->|"writes file"| node_poster_files

click node_login_page "https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/login/page.tsx"
click node_dashboard "https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/dashboard/page.tsx"
click node_create_form "https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/dashboard/create/page.tsx"
click node_edit_form "https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/dashboard/edit/%5Bid%5D/page.tsx"
click node_movie_card "https://github.com/aliraza372/asessmenttask-nextjs/blob/main/components/MovieCard.tsx"
click node_login_action "https://github.com/aliraza372/asessmenttask-nextjs/blob/main/lib.ts"
click node_user_api "https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/api/users/route.ts"
click node_seed_api "https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/api/seed/route.ts"
click node_movie_collection_api "https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/api/movies/route.ts"
click node_movie_item_api "https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/api/movies/%5Bid%5D/route.ts"
click node_upload_api "https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/api/upload/route.ts"
click node_user_model "https://github.com/aliraza372/asessmenttask-nextjs/blob/main/backend/models/User.ts"
click node_movie_model "https://github.com/aliraza372/asessmenttask-nextjs/blob/main/backend/models/Movie.ts"
click node_db_connection "https://github.com/aliraza372/asessmenttask-nextjs/blob/main/backend/lib/dbConnect.ts"
click node_poster_files "https://github.com/aliraza372/asessmenttask-nextjs/tree/main/public"

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_login_page,node_dashboard,node_create_form,node_edit_form,node_movie_card toneBlue
class node_movie_collection_api,node_movie_item_api,node_upload_api,node_mongo toneAmber
class node_login_action,node_user_api,node_seed_api toneMint
class node_user_model,node_movie_model,node_db_connection toneRose
class node_visitor toneIndigo
class node_poster_files toneTeal
```

## Components

### Web experience

- [Login page](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/login/page.tsx): `app/login/page.tsx`
- [Movie dashboard](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/dashboard/page.tsx): `app/dashboard/page.tsx`
- [Create movie](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/dashboard/create/page.tsx): `app/dashboard/create/page.tsx`
- [Edit movie](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/dashboard/edit/%5Bid%5D/page.tsx): `app/dashboard/edit/[id]/page.tsx`
- [Movie card](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/components/MovieCard.tsx): `components/MovieCard.tsx`

### Application API

- [Movie collection API](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/api/movies/route.ts): `app/api/movies/route.ts`
- [Movie item API](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/api/movies/%5Bid%5D/route.ts): `app/api/movies/[id]/route.ts`
- [Poster upload API](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/api/upload/route.ts): `app/api/upload/route.ts`

### Identity

- [Login action](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/lib.ts): `lib.ts`
- [User lookup](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/api/users/route.ts): `app/api/users/route.ts`
- [Seed account](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/app/api/seed/route.ts): `app/api/seed/route.ts`

### Persistence

- [User model](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/backend/models/User.ts): `backend/models/User.ts`
- [Movie model](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/backend/models/Movie.ts): `backend/models/Movie.ts`
- [Database connector](https://github.com/aliraza372/asessmenttask-nextjs/blob/main/backend/lib/dbConnect.ts): `backend/lib/dbConnect.ts`

### Other components

- **Visitor**
- **MongoDB**
- [Poster files](https://github.com/aliraza372/asessmenttask-nextjs/tree/main/public): `public`

## Connections

- Visitor → Login page: opens
- Visitor → Movie dashboard: browses
- Visitor → Create movie: submits
- Visitor → Edit movie: edits
- Login page → Login action: authenticates
- Login action → User lookup: fetches user
- User lookup → Database connector: connects
- User lookup → User model: queries
- Seed account → Database connector: connects
- Seed account → User model: creates account
- Movie dashboard → Movie collection API: fetches page
- Movie dashboard → Movie card: renders
- Create movie → Poster upload API: uploads poster
- Create movie → Movie collection API: creates movie
- Edit movie → Movie item API: updates movie
- Movie collection API → Database connector: connects
- Movie collection API → Movie model: queries and saves
- Movie item API → Database connector: connects
- Movie item API → Movie model: reads and updates
- User model → MongoDB: persists
- Movie model → MongoDB: persists
- Poster upload API → Poster files: writes file
