# ylehilds/walmart-movies architecture

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

- Interactive diagram: https://gitdiagram.com/ylehilds/walmart-movies
- Repository: https://github.com/ylehilds/walmart-movies

## Overview

Walmart Movies is a React CRUD interface backed by a Spring Boot movie API. Users list, create, edit, and delete movies; the controller delegates operations through a service to a configured store. Store implementations persist either in memory or Cosmos DB and publish create/update/delete events to Kafka. The README also documents Kafka UI and the Cosmos emulator as local operational integrations. Source excerpts establish the main API and persistence calls; the UI-to-API link is visible in the frontend code, while Kafka delivery is documented and implemented by the producer.

Main entry points: [`backend/src/main/java/com/walmart/moviesapi/store/CosmosMovieStore.java`](https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/store/CosmosMovieStore.java) (Cosmos store), [`backend/src/main/java/com/walmart/moviesapi/events/MovieEventProducer.java`](https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/events/MovieEventProducer.java) (Event producer), [`backend/src/main/java/com/walmart/moviesapi/store/InMemoryMovieStore.java`](https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/store/InMemoryMovieStore.java) (Memory store), [`backend/src/main/java/com/walmart/moviesapi/store/MovieStore.java`](https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/store/MovieStore.java) (Store interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Movie interface"]
  node_app["Movie UI<br/>[App.jsx]"]
end

subgraph group_api["Movie API"]
  node_controller["Movie endpoints"]
  node_service["Movie service<br/>[MovieService.java]"]
  node_movie["Movie model<br/>[Movie.java]"]
end

subgraph group_persistence["Persistence"]
  node_storeapi["Store interface<br/>[MovieStore.java]"]
  node_memoryconfig["Memory selection"]
  node_memorystore[("Memory store")]
  node_cosmosconfig["Cosmos selection"]
  node_cosmosstore[("Cosmos store")]
end

subgraph group_events["Event messaging"]
  node_eventproducer["Event producer"]
  node_event["Movie event<br/>[MovieEvent.java]"]
  node_listener["Event listener"]
end

node_user(("Movie user"))
node_cosmos[("Cosmos DB")]
node_kafka["Kafka topic"]
node_kafkaui["Kafka UI"]

node_user -->|"uses"| node_app
node_app -->|"requests CRUD"| node_controller
node_controller -->|"delegates"| node_service
node_service -->|"calls operations"| node_storeapi
node_memoryconfig -->|"provides"| node_memorystore
node_cosmosconfig -->|"provides"| node_cosmosstore
node_memorystore -->|"implements"| node_storeapi
node_cosmosstore -->|"implements"| node_storeapi
node_cosmosstore -->|"reads and writes"| node_cosmos
node_memorystore -->|"publishes changes"| node_eventproducer
node_cosmosstore -->|"publishes changes"| node_eventproducer
node_eventproducer -->|"publishes payload"| node_event
node_eventproducer -->|"sends events"| node_kafka
node_kafka -.->|"delivers events"| node_listener
node_kafka -->|"inspected with"| node_kafkaui

click node_app "https://github.com/ylehilds/walmart-movies/blob/main/frontend/src/App.jsx"
click node_controller "https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/web/MovieController.java"
click node_service "https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/service/MovieService.java"
click node_movie "https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/model/Movie.java"
click node_storeapi "https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/store/MovieStore.java"
click node_memoryconfig "https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/config/InMemoryStoreConfig.java"
click node_memorystore "https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/store/InMemoryMovieStore.java"
click node_cosmosconfig "https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/config/CosmosStoreConfig.java"
click node_cosmosstore "https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/store/CosmosMovieStore.java"
click node_eventproducer "https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/events/MovieEventProducer.java"
click node_event "https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/events/MovieEvent.java"
click node_listener "https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/events/MovieEventListener.java"

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_user,node_kafkaui toneBlue
class node_controller,node_service,node_movie,node_cosmos toneAmber
class node_storeapi,node_memoryconfig,node_memorystore,node_cosmosconfig,node_cosmosstore toneMint
class node_eventproducer,node_event,node_listener toneRose
class node_kafka toneIndigo
```

## Components

### Movie interface

- [Movie UI](https://github.com/ylehilds/walmart-movies/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`

### Movie API

- [Movie endpoints](https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/web/MovieController.java): `backend/src/main/java/com/walmart/moviesapi/web/MovieController.java`
- [Movie service](https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/service/MovieService.java): `backend/src/main/java/com/walmart/moviesapi/service/MovieService.java`
- [Movie model](https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/model/Movie.java): `backend/src/main/java/com/walmart/moviesapi/model/Movie.java`

### Persistence

- [Store interface](https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/store/MovieStore.java): `backend/src/main/java/com/walmart/moviesapi/store/MovieStore.java`
- [Memory selection](https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/config/InMemoryStoreConfig.java): `backend/src/main/java/com/walmart/moviesapi/config/InMemoryStoreConfig.java`
- [Memory store](https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/store/InMemoryMovieStore.java): `backend/src/main/java/com/walmart/moviesapi/store/InMemoryMovieStore.java`
- [Cosmos selection](https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/config/CosmosStoreConfig.java): `backend/src/main/java/com/walmart/moviesapi/config/CosmosStoreConfig.java`
- [Cosmos store](https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/store/CosmosMovieStore.java): `backend/src/main/java/com/walmart/moviesapi/store/CosmosMovieStore.java`

### Event messaging

- [Event producer](https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/events/MovieEventProducer.java): `backend/src/main/java/com/walmart/moviesapi/events/MovieEventProducer.java`
- [Movie event](https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/events/MovieEvent.java): `backend/src/main/java/com/walmart/moviesapi/events/MovieEvent.java`
- [Event listener](https://github.com/ylehilds/walmart-movies/blob/main/backend/src/main/java/com/walmart/moviesapi/events/MovieEventListener.java): `backend/src/main/java/com/walmart/moviesapi/events/MovieEventListener.java`

### Other components

- **Movie user**
- **Cosmos DB**
- **Kafka topic**
- **Kafka UI**

## Connections

- Movie user → Movie UI: uses (evidence: `README.md`)
- Movie UI → Movie endpoints: requests CRUD (evidence: `frontend/src/App.jsx`)
- Movie endpoints → Movie service: delegates (evidence: `backend/src/main/java/com/walmart/moviesapi/web/MovieController.java`)
- Movie service → Store interface: calls operations (evidence: `backend/src/main/java/com/walmart/moviesapi/service/MovieService.java`)
- Memory selection → Memory store: provides (evidence: `backend/src/main/java/com/walmart/moviesapi/config/InMemoryStoreConfig.java`)
- Cosmos selection → Cosmos store: provides (evidence: `backend/src/main/java/com/walmart/moviesapi/config/CosmosStoreConfig.java`)
- Memory store → Store interface: implements (evidence: `backend/src/main/java/com/walmart/moviesapi/store/InMemoryMovieStore.java`)
- Cosmos store → Store interface: implements (evidence: `backend/src/main/java/com/walmart/moviesapi/store/CosmosMovieStore.java`)
- Cosmos store → Cosmos DB: reads and writes (evidence: `backend/src/main/java/com/walmart/moviesapi/store/CosmosMovieStore.java`)
- Memory store → Event producer: publishes changes (evidence: `backend/src/main/java/com/walmart/moviesapi/store/InMemoryMovieStore.java`)
- Cosmos store → Event producer: publishes changes (evidence: `backend/src/main/java/com/walmart/moviesapi/store/CosmosMovieStore.java`)
- Event producer → Movie event: publishes payload (evidence: `backend/src/main/java/com/walmart/moviesapi/events/MovieEventProducer.java`)
- Event producer → Kafka topic: sends events (evidence: `README.md`)
- Kafka topic → Event listener: delivers events
- Kafka topic → Kafka UI: inspected with (evidence: `README.md`)
