Skip to content

Contexts Overview

Bounded Contexts are autonomous business domains in Promenade Platform. Each context has its own domain model, database schema, and communicates via Event Bus.

Available Contexts

Identity Context

Status: Production
Aggregates: User, Contact, Profile
Documentation: Identity Context

Manages user authentication, authorization, and contact information.

Key Features:

  • JWT-based authentication
  • Role-Based Access Control (RBAC)
  • Email, phone, address management
  • User profiles with social links

Shared Context

Status: Production
Aggregates: Country, Currency, Language, Timezone
Documentation: Shared Context

Provides reference data for all contexts (read-only).

Key Features:

  • ISO country codes (250+ countries)
  • Currency codes with symbols
  • Language codes (ISO 639-1)
  • IANA timezone database

Customer Management

Status: Production
Aggregates: Customer, Company, Deal, Interaction, Analytics
Documentation: Customer Management

Complete CRM functionality for managing customers, companies, deals, and sales pipeline.

Key Features:

  • Customer lifecycle management (Lead → Prospect → Customer → Churned)
  • B2B company management with hierarchies
  • Deal pipeline tracking with stages and probability
  • Interaction tracking (calls, emails, meetings, notes)
  • Real-time analytics and reporting (CQRS read models)

Order Management

Status: Planned (Q2 2026)
Aggregates: Order, OrderItem, Fulfillment

Order processing and tracking system.

Planned Features:

  • Order creation and lifecycle
  • Order items with inventory
  • Fulfillment saga (payment → inventory → shipping)
  • Integration with Customer context

Billing

Status: Planned (Q2 2026)
Aggregates: Invoice, Payment, Subscription

Billing and payment processing.

Planned Features:

  • Invoice generation
  • Payment processing
  • Subscription management
  • Integration with Order context

Warehouse

Status: Planned (Q3 2026)
Aggregates: Product, Inventory, Warehouse

Inventory and warehouse management.

Planned Features:

  • Product catalog
  • Inventory tracking
  • Warehouse locations
  • Stock movements

Context Structure

Each context follows the same pattern:

internal/contexts/{context}/
 {aggregate}/
    entity.go              # Domain entity
    entity_test.go         # Tests
    repository.go          # Repository interface
    usecase.go            # Business logic
    usecase_test.go       # Tests
    adapter/
        http/handler/      # HTTP handlers
        repository/postgres/ # PostgreSQL implementation
 router.go                  # Context router
 README.md                  # Context documentation

Context Communication

Rule: Contexts communicate ONLY via Event Bus (no direct dependencies).

go
//  DON'T - Direct import
import "github.com/basilex/promenade/internal/contexts/customer-mgmt/customer"

//  DO - Event Bus
event := bus.NewBaseEvent("user.registered", userID)
eventBus.Publish(ctx, bus.TopicUserRegistered, event)

Context Isolation

Each context is autonomous:

  • Own domain model - Aggregates, entities, value objects
  • Own database schema - Tables prefixed with context name
  • Own migrations - migrations/{context}/
  • Own HTTP routes - Registered via router
  • Own tests - Unit, smoke, integration

Adding New Context

  1. Create directory structure:

    bash
    mkdir -p internal/contexts/new-context/{aggregate}
  2. Create aggregate:

    • Entity with domain logic
    • Repository interface
    • Use case implementation
    • HTTP handlers
  3. Create migrations:

    bash
    make migrate-new CONTEXT=new-context NAME=create_tables
  4. Create router:

    go
    // internal/contexts/new-context/router.go
    func (r *Router) RegisterRoutes(api *gin.RouterGroup) {
        // Register routes
    }
  5. Register in main.go:

    go
    newContextRouter := newcontext.NewRouter(db)
    newContextRouter.RegisterRoutes(api)

Next Steps

Built with Domain-Driven Design and Go