# khalil-r-abbas/api-toko-sembako architecture

> Architecture diagram of the GitHub repository khalil-r-abbas/api-toko-sembako, 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/khalil-r-abbas/api-toko-sembako
- Repository: https://github.com/khalil-r-abbas/api-toko-sembako

## Overview

This is a CodeIgniter app for product browsing, recipe discovery, token-protected APIs, and transaction management. The primary user workflow is selecting available products and requesting matching recipes; a separate API workflow exposes product, sale-item, and transaction resources. The graph includes the supporting models and configured database. Some controller and view behavior is represented only by the source index or route declarations, so edges are limited to documented routes and listed controller dependencies; no unsampled implementation details are assumed.

Main entry points: [`app/Config/Routes.php`](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Config/Routes.php) (Route mapping), [`app/Controllers/Api/Transactions.php`](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/Api/Transactions.php) (Transaction API), [`app/Models/ProductModel.php`](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Models/ProductModel.php) (Product records), [`app/Controllers/Api/Products.php`](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/Api/Products.php) (Product API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_routes["Route mapping<br/>[Routes.php]"]
  node_home["Home page<br/>[Home.php]"]
  node_productpage["Product page<br/>[ProductPage.php]"]
  node_recipecontroller["Recipe search<br/>[BikinMakan.php]"]
end

subgraph group_api["API and access"]
  node_tokenmanager["Token issuance<br/>[TokenManager.php]"]
  node_authfilter["JWT authorization<br/>[AuthFilter.php]"]
  node_filterconfig["Filter configuration<br/>[Filters.php]"]
  node_baseapi["API base<br/>[BaseApi.php]"]
  node_productsapi["Product API<br/>[Products.php]"]
  node_saleitemsapi["Sale-item API<br/>[SaleItems.php]"]
  node_transactionsapi["Transaction API<br/>[Transactions.php]"]
end

subgraph group_domain["Products and recipes"]
  node_recipeservice["Recipe matching<br/>[RecipeService.php]"]
end

subgraph group_data["Persistence"]
  node_productmodel["Product records<br/>[ProductModel.php]"]
  node_saleitemmodel["Sale-item records<br/>[SaleItemModel.php]"]
  node_transactionmodel["Transaction records"]
  node_database[("PostgreSQL database<br/>[Database.php]")]
end

node_visitor(("Visitor / API client"))

node_visitor -->|"sends request"| node_routes
node_routes -->|"routes to"| node_home
node_routes -->|"routes to"| node_productpage
node_routes -->|"routes to"| node_recipecontroller
node_routes -->|"routes to"| node_tokenmanager
node_routes -->|"routes to"| node_productsapi
node_routes -->|"routes to"| node_saleitemsapi
node_routes -->|"routes to"| node_transactionsapi
node_filterconfig -->|"registers filter"| node_authfilter
node_productsapi -->|"extends"| node_baseapi
node_saleitemsapi -->|"extends"| node_baseapi
node_transactionsapi -->|"extends"| node_baseapi
node_recipecontroller -->|"finds recipes"| node_recipeservice
node_recipecontroller -->|"uses products"| node_productmodel
node_productpage -->|"uses products"| node_productmodel
node_productsapi -->|"uses products"| node_productmodel
node_productsapi -->|"uses sale items"| node_saleitemmodel
node_saleitemsapi -->|"uses sale items"| node_saleitemmodel
node_transactionsapi -->|"uses products"| node_productmodel
node_transactionsapi -->|"uses sale items"| node_saleitemmodel
node_transactionsapi -->|"uses transactions"| node_transactionmodel
node_productmodel -.->|"persists records"| node_database
node_saleitemmodel -.->|"persists records"| node_database
node_transactionmodel -.->|"persists records"| node_database

click node_routes "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Config/Routes.php"
click node_home "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/Home.php"
click node_productpage "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/ProductPage.php"
click node_recipecontroller "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/BikinMakan.php"
click node_tokenmanager "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/TokenManager.php"
click node_authfilter "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Filters/AuthFilter.php"
click node_filterconfig "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Config/Filters.php"
click node_baseapi "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/Api/BaseApi.php"
click node_productsapi "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/Api/Products.php"
click node_saleitemsapi "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/Api/SaleItems.php"
click node_transactionsapi "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/Api/Transactions.php"
click node_recipeservice "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Libraries/RecipeService.php"
click node_productmodel "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Models/ProductModel.php"
click node_saleitemmodel "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Models/SaleItemModel.php"
click node_transactionmodel "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Models/TransactionModel.php"
click node_database "https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Config/Database.php"

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_routes,node_home,node_productpage,node_recipecontroller,node_visitor toneBlue
class node_tokenmanager,node_authfilter,node_filterconfig,node_baseapi,node_productsapi,node_saleitemsapi,node_transactionsapi toneAmber
class node_recipeservice toneMint
class node_productmodel,node_saleitemmodel,node_transactionmodel,node_database toneRose
```

## Components

### Web experience

- [Route mapping](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Config/Routes.php): `app/Config/Routes.php`
- [Home page](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/Home.php): `app/Controllers/Home.php`
- [Product page](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/ProductPage.php): `app/Controllers/ProductPage.php`
- [Recipe search](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/BikinMakan.php): `app/Controllers/BikinMakan.php`

### API and access

- [Token issuance](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/TokenManager.php): `app/Controllers/TokenManager.php`
- [JWT authorization](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Filters/AuthFilter.php): `app/Filters/AuthFilter.php`
- [Filter configuration](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Config/Filters.php): `app/Config/Filters.php`
- [API base](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/Api/BaseApi.php): `app/Controllers/Api/BaseApi.php`
- [Product API](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/Api/Products.php): `app/Controllers/Api/Products.php`
- [Sale-item API](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/Api/SaleItems.php): `app/Controllers/Api/SaleItems.php`
- [Transaction API](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Controllers/Api/Transactions.php): `app/Controllers/Api/Transactions.php`

### Products and recipes

- [Recipe matching](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Libraries/RecipeService.php): `app/Libraries/RecipeService.php`

### Persistence

- [Product records](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Models/ProductModel.php): `app/Models/ProductModel.php`
- [Sale-item records](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Models/SaleItemModel.php): `app/Models/SaleItemModel.php`
- [Transaction records](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Models/TransactionModel.php): `app/Models/TransactionModel.php`
- [PostgreSQL database](https://github.com/khalil-r-abbas/api-toko-sembako/blob/main/app/Config/Database.php): `app/Config/Database.php`

### Other components

- **Visitor / API client**

## Connections

- Visitor / API client → Route mapping: sends request (evidence: `app/Config/Routes.php`)
- Route mapping → Home page: routes to (evidence: `app/Config/Routes.php`)
- Route mapping → Product page: routes to (evidence: `app/Config/Routes.php`)
- Route mapping → Recipe search: routes to (evidence: `app/Config/Routes.php`)
- Route mapping → Token issuance: routes to (evidence: `app/Config/Routes.php`)
- Route mapping → Product API: routes to (evidence: `app/Config/Routes.php`)
- Route mapping → Sale-item API: routes to (evidence: `app/Config/Routes.php`)
- Route mapping → Transaction API: routes to (evidence: `app/Config/Routes.php`)
- Filter configuration → JWT authorization: registers filter (evidence: `app/Config/Filters.php`)
- Product API → API base: extends (evidence: `app/Controllers/Api/Products.php`)
- Sale-item API → API base: extends (evidence: `app/Controllers/Api/SaleItems.php`)
- Transaction API → API base: extends (evidence: `app/Controllers/Api/Transactions.php`)
- Recipe search → Recipe matching: finds recipes (evidence: `app/Controllers/BikinMakan.php`)
- Recipe search → Product records: uses products (evidence: `app/Controllers/BikinMakan.php`)
- Product page → Product records: uses products (evidence: `app/Controllers/ProductPage.php`)
- Product API → Product records: uses products (evidence: `app/Controllers/Api/Products.php`)
- Product API → Sale-item records: uses sale items (evidence: `app/Controllers/Api/Products.php`)
- Sale-item API → Sale-item records: uses sale items (evidence: `app/Controllers/Api/SaleItems.php`)
- Transaction API → Product records: uses products (evidence: `app/Controllers/Api/Transactions.php`)
- Transaction API → Sale-item records: uses sale items (evidence: `app/Controllers/Api/Transactions.php`)
- Transaction API → Transaction records: uses transactions (evidence: `app/Controllers/Api/Transactions.php`)
- Product records → PostgreSQL database: persists records
- Sale-item records → PostgreSQL database: persists records
- Transaction records → PostgreSQL database: persists records
