Skip to content
CAI
Software that uses CAICheck a score

mehdihadeli/go-food-delivery-microservices

56.3

Adequate · 21 September 2026

25.8k

lines of production code

Go

primary language

3

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a Go-based microservices architecture providing product catalog management and order processing capabilities. It exposes HTTP and gRPC interfaces for creating, reading, updating, and deleting products, as well as managing orders, while leveraging CQRS patterns and event-driven messaging for internal logic. The codebase includes comprehensive infrastructure for local development, testing, and Kubernetes deployment, along with distributed tracing and API documentation.

How it got here

2022 — Initial project scaffolding and cleanup

5 changes.

The period focused on establishing the foundational Go microservices architecture, including module setup, developer tooling, and system documentation. Concurrently, internal utility packages and the standalone catalogs service were removed to streamline the codebase and define the core dependency graph.

2023 — microservice infrastructure and tooling setup

6 changes.

This period focused on establishing the foundational infrastructure for microservice development, including a new internal package with CQRS, dependency injection, and database client libraries. It also introduced comprehensive development tooling, such as Skaffold for Kubernetes, automation scripts for builds and migrations, and commit linting to enforce code quality standards.

2024 — Catalog and Order Service Implementation

5 changes.

This period focused on implementing core microservices for product and order management, including the initial scaffolding and full CRUD capabilities of the Catalog Read Service alongside the v1 API endpoints for the Orders service. The work also established comprehensive observability via OpenTelemetry and gRPC stats handlers, while ensuring reliability through the addition of integration and end-to-end test suites for both services.

Features

Add third-party protocol buffer definitions for GORM and validation

This change adds third-party protocol buffer definitions to the project, specifically including the \protoc-gen-gorm\ options and types (for ORM code generation configuration) and the \protoc-gen-validate\ schema (for message and field validation rules). These files are placed in \third\_party/proto\ to support code generation tools, while empty \.gitkeep\ files are added to \deployments/kustomize\ and \third\_party/openapi\ to preserve directory structure.

_deployments/kustomize, third\party · high confidence

Add v1 API endpoints for creating and retrieving orders

This change introduces the v1 implementation for the Orders feature, exposing HTTP endpoints to create new orders (POST /api/v1/orders) and retrieve them by ID or as a list (GET /api/v1/orders/{id} and GET /api/v1/orders). The implementation includes the necessary command and query handlers, DTOs, and endpoint wiring to support these operations, along with domain and integration events for order creation.

_internal/services/orderservice/internal/orders/features/creating\_order, internal/services/orderservice/internal/orders/features/getting\_order\_by\_id, internal/services/orderservice/internal/orders/features/getting\orders · high confidence

Added Skaffold configuration for Kubernetes development

A new Skaffold configuration file (skaffold.yaml) has been added to the deployments/kubernetes directory to support local Kubernetes development workflows. Additionally, the .env file in this directory was renamed to .gitkeep to preserve the directory structure in version control.

deployments/kubernetes · high confidence

Added system architecture diagram

A new Excalidraw file has been added to the assets directory, providing a visual representation of the system architecture. This diagram includes elements such as arrows and text labels (e.g., 'Save Write Model') to illustrate component relationships and data flow, aiding users in understanding the high-level design of the system.

assets · high confidence

Automated devcontainer setup for fonts and tool permissions

The devcontainer environment now automatically installs the MesloLGM Nerd Font and configures script permissions during initialization. A new post-create script orchestrates this by running setup-fonts.sh to download and cache the font, and setup-devcontainers.sh to ensure install-tools.sh is executable, streamlining the initial container setup process.

.devcontainer/scripts · high confidence

Catalog Read Service product management and gRPC observability

The Catalog Read Service now exposes full CRUD capabilities for products via HTTP endpoints (GET by ID, GET all, search, POST, PUT, DELETE) and integrates OpenTelemetry for distributed tracing and metrics. The service implements gRPC stats handlers to automatically record RPC duration, request/response sizes, and success/failure counts, while also wiring OpenTelemetry tracing into the product command and query handlers to provide end-to-end visibility into product lifecycle operations.

(repo-wide) · high confidence

Enforce commit message linting and code formatting on commit

The repository now automatically validates commit messages against conventional commit standards using commitlint and formats code via \make format\ before every commit. This ensures consistent commit history and code style without manual intervention.

.husky · high confidence

Initial project scaffolding and developer tooling setup

The repository has been initialized with a comprehensive set of configuration files and build scripts to support the Go microservices architecture. This includes a Makefile and Taskfile for managing service builds, tests, and infrastructure, alongside specific targets for database migrations using Go-Migrate, Goose, and Atlas. Developer experience is enhanced with configurations for golangci-lint, staticcheck, revive, and mockery, as well as Buf for Protobuf code generation. The setup also enforces coding standards through EditorConfig, commitlint, and Husky pre-commit hooks, while providing a .dockerignore and .gitignore to streamline the development and containerization workflows.

(repo-wide) · high confidence

Initial scaffolding for the Catalog Read Service

The \catalogreadservice\ module is introduced with its foundational configuration and infrastructure files. This includes development tooling (\.air.toml\), containerization setup (\.dockerignore\, \Dockerfile\, \Makefile\), and code quality standards (\.golangci.yml\, \arch-go.yml\). The service is configured to expose HTTP endpoints on port \:7001\ and gRPC on port \:6004\, with default connections to local MongoDB, Redis, and RabbitMQ instances. Additionally, the commit adds the initial Swagger API documentation (\docs/\) and the Go configuration structures (\config/\) required to bootstrap the service.

internal/services · high confidence

New development and build automation scripts

The repository now includes a comprehensive set of shell scripts to streamline local development workflows. These scripts automate common tasks such as installing Go tooling and dependencies (install-tools.sh, install-dependencies.sh), building and running services (build.sh, run.sh), and managing database migrations via both the legacy go-migrate and the new goose and atlas tools (go-migrate.sh, goose-migrate.sh, atlas-migrate.sh). Additional scripts handle code formatting (format.sh), linting (lint.sh), OpenAPI documentation generation (openapi.sh), Protocol Buffer compilation (proto.sh), and load testing with k6 (test.sh, k6-generator.sh).

scripts · high confidence

New internal package providing foundational microservice infrastructure

The internal/pkg package introduces a comprehensive set of libraries for building microservices, including a Bun-based PostgreSQL database client with automatic database creation, a Viper-driven configuration system with environment-specific loading, and Uber fx modules for dependency injection. It also provides a CQRS framework with command and query handlers, a generic repository pattern, domain-driven design primitives (aggregates, entities, domain events), and a messaging bus abstraction for event publishing and consumption, alongside corresponding unit tests and mock implementations.

internal/pkg · high confidence

Removals

Removal of catalogs service entry point and configuration

The standalone catalogs service has been removed from the application. The main entry point (\services/catalogs/cmd/main.go\) and its associated JSON configuration file (\services/catalogs/configs/config.json\) have been deleted, meaning the service is no longer initialized or accessible at its previous configuration (localhost:4000).

services · high confidence

Removal of internal utility packages

The internal utility packages for aggregate roots, HTTP error handling, panic suppression, and graceful shutdown have been removed from the codebase. This eliminates the \aggregate\ package (including \Root\ and \ErrNotFound\), the \httperr\ package (including \Handler\ and \ProblemDetails\), the \must\ package (\NotFail\), and the \shutdown\ package (\Gracefully\), meaning any code relying on these specific internal helpers must be updated to use alternative implementations.

pkg · high confidence

API

Generated Swagger documentation for Catalog and Order services

New Swagger 2.0 specification files (docs.go, swagger.json, and swagger.yaml) have been added for the Catalog Read-Service, Catalog Write-Service, and Order Service. These generated files expose the API surface for product management (including listing, searching, creating, updating, and deleting products) and order management (including listing and creating orders), providing structured documentation for consumers of these microservices.

api · high confidence

Test coverage

Added integration and end-to-end tests for catalog services

Added comprehensive test suites for the \catalogreadservice\ and \catalogwriteservice\ product features. The \catalogreadservice\ now includes integration tests for creating, reading, updating, and deleting products, as well as event handling for \ProductCreated\, \ProductUpdated\, and \ProductDeleted\ events. The \catalogwriteservice\ adds end-to-end tests for its HTTP endpoints (create, read, update, delete, search) and integration tests for its command handlers and event publishing logic.

(repo-wide) · high confidence

Dependencies

Initial Go module setup for internal packages and services

The internal package library and the catalog read and write services are now defined as distinct Go modules (Go 1.22). This establishes the dependency graph for the application, introducing core libraries for HTTP handling (Echo v4), database access (GORM, pgx, SQLite), messaging (RabbitMQ), caching (Redis), and distributed tracing (OpenTelemetry).

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 56.

Lenses

  • Code Health 91
  • Architecture 88
  • Maturity 60
  • Readiness 62
  • Security 44
  • Domain Modelling 69
  • Event-Driven 91
  • Event Sourcing 100

Changes since last survey

  • 276 commits — 255 feature/other, 21 fixes

By area

  • services/catalogs — 72 commits
  • (root) — 60 commits
  • (repo) — 32 commits
  • internal/services — 20 commits
  • .github/workflows — 18 commits
  • services/orders — 12 commits
  • pkg/rabbitmq — 9 commits
  • internal/pkg — 7 commits
  • .devcontainer/devcontainer.json — 4 commits
  • pkg/http — 4 commits
  • .devcontainer/scripts — 3 commits
  • deployments/docker-compose — 3 commits
  • scripts/format.sh — 3 commits
  • .github/pr-labeler.yml — 2 commits
  • assets/system-architecture-diagram.png — 2 commits
  • assets/system-architecture-raw.excalidraw — 2 commits
  • pkg/test — 2 commits
  • .devcontainer/Dockerfile — 1 commit
  • .github/multi-labeler.yml — 1 commit
  • .github/release-drafter.yml — 1 commit

Notable commits

  • fix: bug fix
  • fix: bug fix make file
  • fix: build: :bug: fix air configurations
  • fix: build: 💚 some fix in the proto generation script (#109)
  • fix: fix: :bug: bug fix
  • fix: fix: :bug: bug fix
  • fix: fix: :bug: bug fix
  • fix: fix: :bug: fix custom domain errors bug (#71)
  • fix: fix: :bug: fix missing imports
  • fix: fix: :bug: fix testcontainer bug (#86)
  • fix: fix: :bug: some bug fixes
  • fix: fix: :bug: some bug fixes
  • fix: fix: :bug: some bug fixes
  • fix: fix: :bug: test infrastructure bug fix
  • fix: fix: 🐛 fix error in running make install-tools (#108)
  • fix: fix: 🐛 fix errors related upgrade otel version
  • fix: fix: 🐛fix problem in the migration for catalogswriteservice (#106)
  • fix: fix: 🐛some bug fixes
  • fix: refactoring read_service and kafka consumers bug fix
  • fix: sending metadata in producer bug fix
  • …and 256 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

mehdihadeli/go-food-delivery-microservices was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 4a59535f2f5432b3a1a4d28fe0a1767a66dd16f9 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-fa71c66cabd8.