# abdulalimswe/foodies architecture

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

- Interactive diagram: https://gitdiagram.com/abdulalimswe/foodies
- Repository: https://github.com/abdulalimswe/foodies

## Overview

1. **Repository shape**
   - This is a three-app full-stack system:
     - `foodiesapi`: Spring Boot REST backend
     - `foodies`: customer-facing React app
     - `adminpanel`: admin React app
   - The frontend apps are separate deployments, but both talk to the same backend API.

2. **Core architectural style**
   - The backend is a layered monolith: HTTP controllers → service layer → MongoDB repositories → document entities.
   - The frontend apps are thin clients: route/page components call service modules, which wrap API requests to the backend.

3. **Backend entry points and boundaries**
   - `FoodiesapiApplication` is the Spring Boot startup class.
   - API surface is organized by domain controllers:
     - `AuthController`
     - `UserController`
     - `FoodController`
     - `CartController`
     - `OrderController`
     - `PaymentController`
   - This makes the backend the main integration boundary for both user and admin flows.

4. **Backend domain model**
   - Persistent data is modeled as MongoDB documents in `Entity/`:
     - `UserEntity`
     - `FoodEntity`
     - `CartEntity`
     - `OrderEntity`
   - Request/response payloads are separated into DTO-style classes in `io/`, so the API contract is not the same as the database model.

5. **Backend business services**
   - Business logic lives in `service/` and `service/impl/`.
   - Key capabilities:
     - authentication and user management
     - food catalog CRUD
     - cart operations
     - order creation and lifecycle updates
     - payment initiation/validation
   - `AuthenticationFacade` and `AppUserDetailsService` support user-context handling and Spring Security integration.

6. **Security and auth flow**
   - Security is JWT-based.
   - `SecurityConfig`, `JwtAuthenticationFilter`, and `JwtUtils` define the auth boundary.
   - Login/register happen through `AuthController`; subsequent protected calls use `Authorization: Bearer <token>`.
   - `CustomAuthenticationEntryPoint` handles unauthorized access responses.

7. **Payment and external integrations**
   - Payments are first-class backend concerns, not frontend-only flows.
   - `PaymentController` and `SSLCommerzPaymentService` coordinate checkout with external gateways.
   - Supported flows include:
     - SSLCommerz for Bangladesh
     - Razorpay for international payments
     - Cash on delivery
   - Payment callbacks (`success`, `failure`, `cancel`) return to backend endpoints, which then update order state.

8. **Infrastructure dependencies**
   - MongoDB is the primary datastore.
   - AWS S3 is used for food image storage via `AWSConfig`.
   - The backend is configured through application properties and environment variables for database, JWT, S3, and payment gateway secrets.

9. **Customer frontend architecture**
   - `foodies` is a React/Vite app with page-level routing under `pages/` and reusable UI in `components/`.
   - Important pieces:
     - `StoreContext` for shared state
     - `authService`, `cartService`, `foodService`, `orderService` for backend calls
     - `cartUtils` for client-side cart manipulation
   - The app covers browsing, item details, cart, checkout, auth, and payment result pages.

10. **Admin panel architecture**
   - `adminpanel` is a separate React/Vite interface for operational staff.
   - Its UI is organized around management tasks:
     - `AddFood`
     - `ListFood`
     - `Orders`
   - It uses its own service layer to call the same backend, but exposes admin-oriented workflows rather than customer flows.

11. **Main data flows**
   - **Catalog flow:** backend food records → customer browsing and admin maintenance.
   - **Cart flow:** customer actions update cart state in the frontend and persist through backend cart APIs.
   - **Order flow:** checkout payload → order creation → payment gateway initialization → callback validation → order status update.
   - **Admin flow:** admin updates food and order records through protected backend endpoints.

12. **What to diagram as boundaries**
   - Draw three client boundaries: customer app, admin app, backend API.
   - Inside the backend, show three sub-boundaries: security/auth, domain services, persistence/integration.
   - Outside the backend, show MongoDB, AWS S3, SSLCommerz, and Razorpay as external dependencies.

Main entry points: [`foodiesapi/src/main/java/swe/utin/foodiesapi/controller/FoodController.java`](https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/controller/FoodController.java) (Domain APIs), [`foodiesapi/src/main/java/swe/utin/foodiesapi/repository/FoodRepository.java`](https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/repository/FoodRepository.java) (Repositories), [`foodies/src/service/orderService.js`](https://github.com/abdulalimswe/foodies/blob/main/foodies/src/service/orderService.js) (API Services), [`foodiesapi/src/main/java/swe/utin/foodiesapi/service/impl/SSLCommerzPaymentServiceImpl.java`](https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/service/impl/SSLCommerzPaymentServiceImpl.java) (Payment Service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_customer_app["Customer App"]
  node_foodies_app["Foodies UI<br/>react app<br/>[main.jsx]"]
  node_foodies_pages["Pages<br/>route views<br/>[Home.jsx]"]
  node_foodies_services["API Services<br/>client services<br/>[orderService.js]"]
  node_foodies_store(("Store Context<br/>shared state<br/>[StoreContext.jsx]"))
end

subgraph group_admin_app["Admin App"]
  node_admin_app["Admin UI<br/>react app<br/>[main.jsx]"]
  node_admin_pages["Admin Pages<br/>admin views<br/>[AddFood.jsx]"]
  node_admin_services["Admin API<br/>client services<br/>[foodService.js]"]
end

subgraph group_backend_api["Backend API"]
  node_boot_app(("Startup<br/>spring boot"))
  node_auth_controller["Auth API<br/>controller"]
  node_domain_controllers["Domain APIs<br/>controllers"]
end

subgraph group_security_auth["Security/Auth"]
  node_security_config["Security Config<br/>jwt security"]
  node_jwt_filter["JWT Filter<br/>request filter"]
end

subgraph group_domain_services["Domain Services"]
  node_user_service["User Service<br/>domain service"]
  node_food_service["Food Service<br/>catalog service"]
  node_cart_order_service["Cart & Order<br/>order service"]
end

subgraph group_persistence_integration["Persistence/Integration"]
  node_payment_service["Payment Service<br/>gateway service"]
  node_repositories[("Repositories")]
  node_entities["Documents<br/>[FoodEntity.java]"]
end

subgraph group_external_deps["External Dependencies"]
  node_aws_config{{"AWS S3<br/>storage config<br/>[AWSConfig.java]"}}
  node_mongo_db[("MongoDB<br/>datastore")]
  node_sslcommerz{{"SSLCommerz<br/>payment gateway"}}
  node_razorpay{{"Razorpay<br/>payment gateway"}}
end

node_foodies_app -->|"renders"| node_foodies_pages
node_foodies_app -->|"shares state"| node_foodies_store
node_foodies_pages -->|"calls API"| node_foodies_services
node_foodies_store -.->|"persists cart"| node_foodies_services
node_admin_app -->|"renders"| node_admin_pages
node_admin_pages -->|"calls API"| node_admin_services
node_foodies_services -->|"auth"| node_auth_controller
node_foodies_services -->|"customer flows"| node_domain_controllers
node_admin_services -->|"admin flows"| node_domain_controllers
node_boot_app -->|"loads"| node_security_config
node_security_config -->|"enables"| node_jwt_filter
node_jwt_filter -->|"guards"| node_auth_controller
node_auth_controller -->|"delegates"| node_user_service
node_domain_controllers -->|"delegates"| node_food_service
node_domain_controllers -->|"delegates"| node_cart_order_service
node_domain_controllers -->|"delegates"| node_payment_service
node_user_service -->|"persists"| node_repositories
node_food_service -->|"persists"| node_repositories
node_cart_order_service -->|"persists"| node_repositories
node_repositories -->|"maps"| node_entities
node_payment_service -->|"initiates"| node_sslcommerz
node_payment_service -->|"supports"| node_razorpay
node_food_service -.->|"images"| node_aws_config
node_repositories -->|"stores"| node_mongo_db
node_cart_order_service -->|"checkout"| node_payment_service

click node_foodies_app "https://github.com/abdulalimswe/foodies/blob/main/foodies/src/main.jsx"
click node_foodies_pages "https://github.com/abdulalimswe/foodies/blob/main/foodies/src/pages/Home/Home.jsx"
click node_foodies_services "https://github.com/abdulalimswe/foodies/blob/main/foodies/src/service/orderService.js"
click node_foodies_store "https://github.com/abdulalimswe/foodies/blob/main/foodies/src/context/StoreContext.jsx"
click node_admin_app "https://github.com/abdulalimswe/foodies/blob/main/adminpanel/src/main.jsx"
click node_admin_pages "https://github.com/abdulalimswe/foodies/blob/main/adminpanel/src/pages/AddFood/AddFood.jsx"
click node_admin_services "https://github.com/abdulalimswe/foodies/blob/main/adminpanel/src/services/foodService.js"
click node_boot_app "https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/FoodiesapiApplication.java"
click node_security_config "https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/config/SecurityConfig.java"
click node_jwt_filter "https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/filters/JwtAuthenticationFilter.java"
click node_auth_controller "https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/controller/AuthController.java"
click node_domain_controllers "https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/controller/FoodController.java"
click node_user_service "https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/service/impl/UserServiceImpl.java"
click node_food_service "https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/service/impl/FoodServiceImpl.java"
click node_cart_order_service "https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/service/impl/CartServiceImpl.java"
click node_payment_service "https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/service/impl/SSLCommerzPaymentServiceImpl.java"
click node_repositories "https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/repository/FoodRepository.java"
click node_entities "https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/Entity/FoodEntity.java"
click node_aws_config "https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/config/AWSConfig.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_foodies_app,node_foodies_pages,node_foodies_services,node_foodies_store,node_aws_config,node_mongo_db,node_sslcommerz,node_razorpay toneBlue
class node_admin_app,node_admin_pages,node_admin_services toneAmber
class node_boot_app,node_auth_controller,node_domain_controllers toneMint
class node_security_config,node_jwt_filter toneRose
class node_user_service,node_food_service,node_cart_order_service toneIndigo
class node_payment_service,node_repositories,node_entities toneTeal
```

## Components

### Customer App

React/Vite client for browsing, cart, checkout, and payment result flows.

- [Foodies UI](https://github.com/abdulalimswe/foodies/blob/main/foodies/src/main.jsx): react app · Customer-facing frontend for browsing, cart, checkout, and payment outcomes. · `foodies/src/main.jsx`
- [Pages](https://github.com/abdulalimswe/foodies/blob/main/foodies/src/pages/Home/Home.jsx): route views · Customer page-level routes for home, food details, cart, order placement, and payment states. · `foodies/src/pages/Home/Home.jsx`
- [API Services](https://github.com/abdulalimswe/foodies/blob/main/foodies/src/service/orderService.js): client services · Frontend wrappers for backend auth, food, cart, and order requests. · `foodies/src/service/orderService.js`
- [Store Context](https://github.com/abdulalimswe/foodies/blob/main/foodies/src/context/StoreContext.jsx): shared state · Client-side shared state for user and cart data. · `foodies/src/context/StoreContext.jsx`

### Admin App

React/Vite client for catalog and order administration.

- [Admin UI](https://github.com/abdulalimswe/foodies/blob/main/adminpanel/src/main.jsx): react app · Operational frontend for catalog and order maintenance. · `adminpanel/src/main.jsx`
- [Admin Pages](https://github.com/abdulalimswe/foodies/blob/main/adminpanel/src/pages/AddFood/AddFood.jsx): admin views · Admin workflows for adding food, listing food, and reviewing orders. · `adminpanel/src/pages/AddFood/AddFood.jsx`
- [Admin API](https://github.com/abdulalimswe/foodies/blob/main/adminpanel/src/services/foodService.js): client services · Admin frontend service layer for backend catalog operations. · `adminpanel/src/services/foodService.js`

### Backend API

Spring Boot REST monolith exposing auth, catalog, cart, order, and payment endpoints.

- [Startup](https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/FoodiesapiApplication.java): spring boot · Application entry point for the REST backend. · `foodiesapi/src/main/java/swe/utin/foodiesapi/FoodiesapiApplication.java`
- [Auth API](https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/controller/AuthController.java): controller · Login and registration boundary for client authentication. · `foodiesapi/src/main/java/swe/utin/foodiesapi/controller/AuthController.java`
- [Domain APIs](https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/controller/FoodController.java): controllers · Controllers for users, food, cart, orders, and payment flows. · `foodiesapi/src/main/java/swe/utin/foodiesapi/controller/FoodController.java`

### Security/Auth

JWT-based authentication and request protection.

- [Security Config](https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/config/SecurityConfig.java): jwt security · Configures authentication, authorization, and unauthorized responses. · `foodiesapi/src/main/java/swe/utin/foodiesapi/config/SecurityConfig.java`
- [JWT Filter](https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/filters/JwtAuthenticationFilter.java): request filter · Extracts and validates bearer tokens on protected requests. · `foodiesapi/src/main/java/swe/utin/foodiesapi/filters/JwtAuthenticationFilter.java`

### Domain Services

Business logic for users, food, cart, orders, and payments.

- [User Service](https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/service/impl/UserServiceImpl.java): domain service · User management and account-related business logic. · `foodiesapi/src/main/java/swe/utin/foodiesapi/service/impl/UserServiceImpl.java`
- [Food Service](https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/service/impl/FoodServiceImpl.java): catalog service · Food catalog CRUD and related business logic. · `foodiesapi/src/main/java/swe/utin/foodiesapi/service/impl/FoodServiceImpl.java`
- [Cart & Order](https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/service/impl/CartServiceImpl.java): order service · Cart operations, order creation, and lifecycle updates. · `foodiesapi/src/main/java/swe/utin/foodiesapi/service/impl/CartServiceImpl.java`

### Persistence/Integration

MongoDB persistence plus external storage and payment gateway integrations.

- [Payment Service](https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/service/impl/SSLCommerzPaymentServiceImpl.java): gateway service · Payment initiation and validation across supported gateways. · `foodiesapi/src/main/java/swe/utin/foodiesapi/service/impl/SSLCommerzPaymentServiceImpl.java`
- [Repositories](https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/repository/FoodRepository.java): mongo repositories · MongoDB access layer for users, food, cart, and orders. · `foodiesapi/src/main/java/swe/utin/foodiesapi/repository/FoodRepository.java`
- [Documents](https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/Entity/FoodEntity.java): mongo documents · Persistent document models for users, food, cart, and orders. · `foodiesapi/src/main/java/swe/utin/foodiesapi/Entity/FoodEntity.java`

### External Dependencies

Datastore and third-party services used by the backend.

- [AWS S3](https://github.com/abdulalimswe/foodies/blob/main/foodiesapi/src/main/java/swe/utin/foodiesapi/config/AWSConfig.java): storage config · Food image storage integration. · `foodiesapi/src/main/java/swe/utin/foodiesapi/config/AWSConfig.java`
- **MongoDB**: datastore · Primary backend datastore.
- **SSLCommerz**: payment gateway · Primary payment gateway for Bangladesh checkout flows.
- **Razorpay**: payment gateway · International payment gateway option.

## Connections

- Foodies UI → Pages: renders · The React app is composed from route/page views.
- Foodies UI → Store Context: shares state · Pages read and update shared customer state.
- Pages → API Services: calls API · Pages use service modules for backend requests.
- Store Context → API Services: persists cart · Client state feeds cart and checkout requests.
- Admin UI → Admin Pages: renders · The admin app is composed from operational pages.
- Admin Pages → Admin API: calls API · Admin screens use service modules for backend requests.
- API Services → Auth API: auth · Customer login and registration go through the auth boundary.
- API Services → Domain APIs: customer flows · Customer browsing, cart, order, and payment flows hit domain controllers.
- Admin API → Domain APIs: admin flows · Admin maintenance uses protected catalog and order endpoints.
- Startup → Security Config: loads · Backend startup wires the security configuration.
- Security Config → JWT Filter: enables · Security configuration installs JWT request filtering.
- JWT Filter → Auth API: guards · Protected requests are validated before controller access.
- Auth API → User Service: delegates · Auth endpoints use user management and authentication services.
- Domain APIs → Food Service: delegates · Food-related endpoints call the catalog service.
- Domain APIs → Cart & Order: delegates · Cart, order, and user-facing domain endpoints call business services.
- Domain APIs → Payment Service: delegates · Payment endpoints coordinate gateway initiation and validation.
- User Service → Repositories: persists · User operations go through Mongo repositories.
- Food Service → Repositories: persists · Catalog operations go through Mongo repositories.
- Cart & Order → Repositories: persists · Cart and order state is stored through repositories.
- Repositories → Documents: maps · Repositories read and write Mongo document models.
- Payment Service → SSLCommerz: initiates · Primary payment checkout uses SSLCommerz.
- Payment Service → Razorpay: supports · Alternative payment flow uses Razorpay.
- Food Service → AWS S3: images · Catalog items rely on S3-backed image storage.
- Repositories → MongoDB: stores · MongoDB is the primary persistence backend.
- Cart & Order → Payment Service: checkout · Order creation hands off to payment initialization.
