# adri-2/micro-service-store architecture

> Architecture diagram of the GitHub repository adri-2/micro-service-store, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/adri-2/micro-service-store
- Repository: https://github.com/adri-2/micro-service-store

## Overview

This is a distributed storefront platform: clients obtain JWTs from account-service, then use authenticated catalog and order APIs. Order creation stores a draft, asynchronously enriches it with account and product data, and supports stock confirmation or release; accounting emits an event consumed by billing. The README documents per-service PostgreSQL stores and Redis caching. Some paths—especially product persistence and billing internals—are supported only by the README or source index, so those links are limited to documented relationships.

Main entry points: [`services/order_service/app/views.py`](https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/views.py) (Order API), [`services/account_service/app/views.py`](https://github.com/adri-2/micro-service-store/blob/develop/services/account_service/app/views.py) (Account API), [`services/product_service/app/views.py`](https://github.com/adri-2/micro-service-store/blob/develop/services/product_service/app/views.py) (Catalog API), [`services/order_service/app/services/order_service.py`](https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/services/order_service.py) (Order processing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity service"]
  node_account_api["Account API<br/>[views.py]"]
  node_account_serializers["Account serializers<br/>[serializers.py]"]
  node_account_models["User model<br/>[models.py]"]
  node_account_db[("Account PostgreSQL")]
end

subgraph group_catalog["Product catalog"]
  node_product_api["Catalog API<br/>[views.py]"]
  node_product_serializers["Product serializers<br/>[serializers.py]"]
  node_product_models["Catalog models<br/>[models.py]"]
  node_product_db[("Catalog PostgreSQL")]
end

subgraph group_orders["Order management"]
  node_order_api["Order API<br/>[views.py]"]
  node_order_serializers["Order serializers<br/>[serializers.py]"]
  node_order_models["Order records<br/>[models.py]"]
  node_order_processing["Order processing<br/>[order_service.py]"]
  node_catalog_client["Catalog client<br/>[product_service.py]"]
  node_account_client["Account client<br/>[user_service.py]"]
  node_order_tasks["Async order task<br/>[tasks.py]"]
  node_order_events["Event publisher<br/>[publisher.py]"]
  node_order_db[("Orders PostgreSQL")]
end

subgraph group_billing["Billing events"]
  node_rabbitmq["RabbitMQ"]
  node_billing_consumer["Billing consumer<br/>[rabbitmq.py]"]
  node_billing_logic["Invoice logic<br/>[billing.py]"]
  node_billing_api["Billing API<br/>[main.py]"]
  node_billing_models["Invoice model<br/>[models.py]"]
  node_billing_db[("Billing PostgreSQL")]
end

node_client(("Client"))
node_redis[("Redis cache")]

node_client -->|"requests login"| node_account_api
node_account_api -->|"serializes auth"| node_account_serializers
node_account_serializers -->|"uses user model"| node_account_models
node_account_api -->|"reads user"| node_account_models
node_account_api -->|"persists accounts"| node_account_db
node_client -->|"requests catalog"| node_product_api
node_product_api -->|"serializes products"| node_product_serializers
node_product_api -->|"accesses catalog"| node_product_models
node_product_api -->|"stores catalog"| node_product_db
node_client -->|"submits orders"| node_order_api
node_order_api -->|"selects serializer"| node_order_serializers
node_order_api -->|"queries orders"| node_order_models
node_order_api -->|"queues processing"| node_order_tasks
node_order_api -->|"publishes accounting"| node_order_events
node_order_models -->|"stores orders"| node_order_db
node_order_tasks -->|"runs processing"| node_order_processing
node_order_processing -->|"updates order"| node_order_models
node_order_processing -->|"fetches users"| node_account_client
node_order_processing -->|"fetches products"| node_catalog_client
node_account_client -->|"requests account data"| node_account_api
node_catalog_client -->|"requests catalog data"| node_product_api
node_order_api -->|"caches responses"| node_redis
node_catalog_client -->|"caches product data"| node_redis
node_order_events -->|"publishes event"| node_rabbitmq
node_rabbitmq -->|"delivers orders"| node_billing_consumer
node_billing_consumer -->|"processes billing"| node_billing_logic
node_billing_logic -->|"creates invoices"| node_billing_models
node_billing_api -->|"starts consumer"| node_billing_consumer
node_billing_api -->|"lists invoices"| node_billing_models
node_billing_logic -->|"uses billing store"| node_billing_db

click node_account_api "https://github.com/adri-2/micro-service-store/blob/develop/services/account_service/app/views.py"
click node_account_serializers "https://github.com/adri-2/micro-service-store/blob/develop/services/account_service/app/serializers.py"
click node_account_models "https://github.com/adri-2/micro-service-store/blob/develop/services/account_service/app/models.py"
click node_product_api "https://github.com/adri-2/micro-service-store/blob/develop/services/product_service/app/views.py"
click node_product_serializers "https://github.com/adri-2/micro-service-store/blob/develop/services/product_service/app/serializers.py"
click node_product_models "https://github.com/adri-2/micro-service-store/blob/develop/services/product_service/app/models.py"
click node_order_api "https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/views.py"
click node_order_serializers "https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/serializers.py"
click node_order_models "https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/models.py"
click node_order_processing "https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/services/order_service.py"
click node_catalog_client "https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/services/product_service.py"
click node_account_client "https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/services/user_service.py"
click node_order_tasks "https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/tasks.py"
click node_order_events "https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/messaging/publisher.py"
click node_billing_consumer "https://github.com/adri-2/micro-service-store/blob/develop/services/billing_service/app/rabbitmq.py"
click node_billing_logic "https://github.com/adri-2/micro-service-store/blob/develop/services/billing_service/app/billing.py"
click node_billing_api "https://github.com/adri-2/micro-service-store/blob/develop/services/billing_service/app/main.py"
click node_billing_models "https://github.com/adri-2/micro-service-store/blob/develop/services/billing_service/app/models.py"

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_account_api,node_account_serializers,node_account_models,node_account_db,node_client toneBlue
class node_product_api,node_product_serializers,node_product_models,node_product_db,node_redis toneAmber
class node_order_api,node_order_serializers,node_order_models,node_order_processing,node_catalog_client,node_account_client,node_order_tasks,node_order_events,node_order_db toneMint
class node_rabbitmq,node_billing_consumer,node_billing_logic,node_billing_api,node_billing_models,node_billing_db toneRose
```

## Components

### Identity service

- [Account API](https://github.com/adri-2/micro-service-store/blob/develop/services/account_service/app/views.py): `services/account_service/app/views.py`
- [Account serializers](https://github.com/adri-2/micro-service-store/blob/develop/services/account_service/app/serializers.py): `services/account_service/app/serializers.py`
- [User model](https://github.com/adri-2/micro-service-store/blob/develop/services/account_service/app/models.py): `services/account_service/app/models.py`
- **Account PostgreSQL**

### Product catalog

- [Catalog API](https://github.com/adri-2/micro-service-store/blob/develop/services/product_service/app/views.py): `services/product_service/app/views.py`
- [Product serializers](https://github.com/adri-2/micro-service-store/blob/develop/services/product_service/app/serializers.py): `services/product_service/app/serializers.py`
- [Catalog models](https://github.com/adri-2/micro-service-store/blob/develop/services/product_service/app/models.py): `services/product_service/app/models.py`
- **Catalog PostgreSQL**

### Order management

- [Order API](https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/views.py): `services/order_service/app/views.py`
- [Order serializers](https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/serializers.py): `services/order_service/app/serializers.py`
- [Order records](https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/models.py): `services/order_service/app/models.py`
- [Order processing](https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/services/order_service.py): `services/order_service/app/services/order_service.py`
- [Catalog client](https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/services/product_service.py): `services/order_service/app/services/product_service.py`
- [Account client](https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/services/user_service.py): `services/order_service/app/services/user_service.py`
- [Async order task](https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/tasks.py): `services/order_service/app/tasks.py`
- [Event publisher](https://github.com/adri-2/micro-service-store/blob/develop/services/order_service/app/messaging/publisher.py): `services/order_service/app/messaging/publisher.py`
- **Orders PostgreSQL**

### Billing events

- **RabbitMQ**
- [Billing consumer](https://github.com/adri-2/micro-service-store/blob/develop/services/billing_service/app/rabbitmq.py): `services/billing_service/app/rabbitmq.py`
- [Invoice logic](https://github.com/adri-2/micro-service-store/blob/develop/services/billing_service/app/billing.py): `services/billing_service/app/billing.py`
- [Billing API](https://github.com/adri-2/micro-service-store/blob/develop/services/billing_service/app/main.py): `services/billing_service/app/main.py`
- [Invoice model](https://github.com/adri-2/micro-service-store/blob/develop/services/billing_service/app/models.py): `services/billing_service/app/models.py`
- **Billing PostgreSQL**

### Other components

- **Client**
- **Redis cache**

## Connections

- Client → Account API: requests login
- Account API → Account serializers: serializes auth (evidence: `services/account_service/app/views.py`)
- Account serializers → User model: uses user model (evidence: `services/account_service/app/serializers.py`)
- Account API → User model: reads user (evidence: `services/account_service/app/views.py`)
- Account API → Account PostgreSQL: persists accounts
- Client → Catalog API: requests catalog
- Catalog API → Product serializers: serializes products (evidence: `services/product_service/app/views.py`)
- Catalog API → Catalog models: accesses catalog (evidence: `services/product_service/app/views.py`)
- Catalog API → Catalog PostgreSQL: stores catalog
- Client → Order API: submits orders
- Order API → Order serializers: selects serializer (evidence: `services/order_service/app/views.py`)
- Order API → Order records: queries orders (evidence: `services/order_service/app/views.py`)
- Order API → Async order task: queues processing (evidence: `services/order_service/app/views.py`)
- Order API → Event publisher: publishes accounting (evidence: `services/order_service/app/views.py`)
- Order records → Orders PostgreSQL: stores orders
- Async order task → Order processing: runs processing (evidence: `services/order_service/app/tasks.py`)
- Order processing → Order records: updates order (evidence: `services/order_service/app/services/order_service.py`)
- Order processing → Account client: fetches users (evidence: `services/order_service/app/services/order_service.py`)
- Order processing → Catalog client: fetches products (evidence: `services/order_service/app/services/order_service.py`)
- Account client → Account API: requests account data (evidence: `services/order_service/app/services/user_service.py`)
- Catalog client → Catalog API: requests catalog data (evidence: `services/order_service/app/services/product_service.py`)
- Order API → Redis cache: caches responses (evidence: `services/order_service/app/views.py`)
- Catalog client → Redis cache: caches product data (evidence: `services/order_service/app/services/product_service.py`)
- Event publisher → RabbitMQ: publishes event
- RabbitMQ → Billing consumer: delivers orders
- Billing consumer → Invoice logic: processes billing (evidence: `services/billing_service/app/rabbitmq.py`)
- Invoice logic → Invoice model: creates invoices (evidence: `services/billing_service/app/billing.py`)
- Billing API → Billing consumer: starts consumer (evidence: `services/billing_service/app/main.py`)
- Billing API → Invoice model: lists invoices (evidence: `services/billing_service/app/main.py`)
- Invoice logic → Billing PostgreSQL: uses billing store (evidence: `services/billing_service/app/billing.py`)
