# mcholismalik/crud-api-go-echo architecture

> Architecture diagram of the GitHub repository mcholismalik/crud-api-go-echo, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mcholismalik/crud-api-go-echo
- Repository: https://github.com/mcholismalik/crud-api-go-echo

## Overview

A Go Echo API boilerplate with authentication and sample CRUD endpoints. The documented request path is HTTP routing through middleware and handlers into services and repositories, with database-backed models and shared response, validation, filtering, pagination, and transaction support. Auth source confirms handler-to-service and service-to-user-repository calls; the sample workflow and several wiring details are based on README capabilities and the file tree, so uncertain call edges are omitted.

Main entry points: [`main.go`](https://github.com/mcholismalik/crud-api-go-echo/blob/master/main.go) (Application Startup), [`internal/app/auth/handler.go`](https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/app/auth/handler.go) (Auth Handler), [`internal/app/sample/handler.go`](https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/app/sample/handler.go) (Sample Handler), [`internal/http`](https://github.com/mcholismalik/crud-api-go-echo/tree/master/internal/http) (HTTP Routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_http["HTTP Entry"]
  node_app["Application Startup<br/>[main.go]"]
  node_middleware["Middleware"]
  node_httpserver["HTTP Routes"]
end

subgraph group_auth["Authentication"]
  node_authroutes["Auth Routes<br/>[route.go]"]
  node_authhandler["Auth Handler<br/>[handler.go]"]
  node_authservice["Auth Service<br/>[service.go]"]
  node_authdto["Auth DTOs<br/>[auth.go]"]
end

subgraph group_sample["Sample API"]
  node_sample_routes["Sample Routes<br/>[route.go]"]
  node_sample_handler["Sample Handler<br/>[handler.go]"]
  node_sample_service["Sample Service<br/>[service.go]"]
  node_sample_dto["Sample DTOs<br/>[sample.go]"]
end

subgraph group_data["Persistence"]
  node_factory["Dependency Factory<br/>[factory.go]"]
  node_user_repository["User Repository<br/>[user.go]"]
  node_sample_repository["Sample Repository<br/>[sample.go]"]
  node_models["Domain Models"]
  node_database[("Database<br/>[database.go]")]
  node_migration["Schema Migration<br/>[migration.go]"]
  node_abstraction["Repository Abstraction<br/>[repository.go]"]
end

subgraph group_shared["Shared Services"]
  node_transaction["Transactions<br/>[trxmanager.go]"]
  node_validator["Validation"]
  node_response["API Responses"]
  node_pagination["Pagination Context<br/>[pagination.go]"]
  node_elastic["Elasticsearch Client<br/>[service.go]"]
  node_logging["Log Services<br/>[service.go]"]
end

node_client(("API Client"))

node_client -->|"HTTP requests"| node_httpserver
node_app -->|"initializes"| node_database
node_app -->|"runs migrations"| node_migration
node_app -->|"initializes"| node_elastic
node_app -->|"installs"| node_middleware
node_app -->|"creates"| node_factory
node_app -->|"starts"| node_httpserver
node_httpserver -->|"registers"| node_authroutes
node_httpserver -->|"registers"| node_sample_routes
node_authroutes -->|"dispatches"| node_authhandler
node_sample_routes -->|"dispatches"| node_sample_handler
node_authhandler -->|"calls"| node_authservice
node_authhandler -->|"binds"| node_authdto
node_authhandler -->|"validates"| node_validator
node_authhandler -->|"sends"| node_response
node_authservice -->|"calls"| node_user_repository
node_authservice -->|"runs registration"| node_transaction
node_sample_handler -->|"calls"| node_sample_service
node_sample_handler -->|"binds"| node_sample_dto
node_sample_handler -->|"validates"| node_validator
node_sample_handler -->|"sends"| node_response
node_sample_service -->|"uses"| node_sample_repository
node_sample_service -->|"uses"| node_transaction
node_user_repository -->|"uses"| node_abstraction
node_sample_repository -->|"uses"| node_abstraction
node_user_repository -->|"reads and writes"| node_models
node_sample_repository -->|"reads and writes"| node_models
node_abstraction -->|"queries"| node_database
node_transaction -->|"begins and commits"| node_database
node_migration -->|"updates schema"| node_database
node_logging -.->|"indexes logs"| node_elastic

click node_app "https://github.com/mcholismalik/crud-api-go-echo/blob/master/main.go"
click node_middleware "https://github.com/mcholismalik/crud-api-go-echo/tree/master/internal/middleware"
click node_httpserver "https://github.com/mcholismalik/crud-api-go-echo/tree/master/internal/http"
click node_authroutes "https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/app/auth/route.go"
click node_authhandler "https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/app/auth/handler.go"
click node_authservice "https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/app/auth/service.go"
click node_authdto "https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/dto/auth.go"
click node_sample_routes "https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/app/sample/route.go"
click node_sample_handler "https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/app/sample/handler.go"
click node_sample_service "https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/app/sample/service.go"
click node_sample_dto "https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/dto/sample.go"
click node_factory "https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/factory/factory.go"
click node_user_repository "https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/repository/user.go"
click node_sample_repository "https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/repository/sample.go"
click node_models "https://github.com/mcholismalik/crud-api-go-echo/tree/master/internal/model"
click node_database "https://github.com/mcholismalik/crud-api-go-echo/blob/master/database/database.go"
click node_migration "https://github.com/mcholismalik/crud-api-go-echo/blob/master/database/migration/migration.go"
click node_abstraction "https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/abstraction/repository.go"
click node_transaction "https://github.com/mcholismalik/crud-api-go-echo/blob/master/pkg/util/trxmanager/trxmanager.go"
click node_validator "https://github.com/mcholismalik/crud-api-go-echo/tree/master/pkg/util/validator"
click node_response "https://github.com/mcholismalik/crud-api-go-echo/tree/master/pkg/util/response"
click node_pagination "https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/abstraction/pagination.go"
click node_elastic "https://github.com/mcholismalik/crud-api-go-echo/blob/master/pkg/elasticsearch/service.go"
click node_logging "https://github.com/mcholismalik/crud-api-go-echo/blob/master/pkg/log/service.go"

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_app,node_middleware,node_httpserver,node_client toneBlue
class node_authroutes,node_authhandler,node_authservice,node_authdto toneAmber
class node_sample_routes,node_sample_handler,node_sample_service,node_sample_dto toneMint
class node_factory,node_user_repository,node_sample_repository,node_models,node_database,node_migration,node_abstraction toneRose
class node_transaction,node_validator,node_response,node_pagination,node_elastic,node_logging toneIndigo
```

## Components

### HTTP Entry

- [Application Startup](https://github.com/mcholismalik/crud-api-go-echo/blob/master/main.go): `main.go`
- [Middleware](https://github.com/mcholismalik/crud-api-go-echo/tree/master/internal/middleware): `internal/middleware`
- [HTTP Routes](https://github.com/mcholismalik/crud-api-go-echo/tree/master/internal/http): `internal/http`

### Authentication

- [Auth Routes](https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/app/auth/route.go): `internal/app/auth/route.go`
- [Auth Handler](https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/app/auth/handler.go): `internal/app/auth/handler.go`
- [Auth Service](https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/app/auth/service.go): `internal/app/auth/service.go`
- [Auth DTOs](https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/dto/auth.go): `internal/dto/auth.go`

### Sample API

- [Sample Routes](https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/app/sample/route.go): `internal/app/sample/route.go`
- [Sample Handler](https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/app/sample/handler.go): `internal/app/sample/handler.go`
- [Sample Service](https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/app/sample/service.go): `internal/app/sample/service.go`
- [Sample DTOs](https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/dto/sample.go): `internal/dto/sample.go`

### Persistence

- [Dependency Factory](https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/factory/factory.go): `internal/factory/factory.go`
- [User Repository](https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/repository/user.go): `internal/repository/user.go`
- [Sample Repository](https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/repository/sample.go): `internal/repository/sample.go`
- [Domain Models](https://github.com/mcholismalik/crud-api-go-echo/tree/master/internal/model): `internal/model`
- [Database](https://github.com/mcholismalik/crud-api-go-echo/blob/master/database/database.go): `database/database.go`
- [Schema Migration](https://github.com/mcholismalik/crud-api-go-echo/blob/master/database/migration/migration.go): `database/migration/migration.go`
- [Repository Abstraction](https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/abstraction/repository.go): `internal/abstraction/repository.go`

### Shared Services

- [Transactions](https://github.com/mcholismalik/crud-api-go-echo/blob/master/pkg/util/trxmanager/trxmanager.go): `pkg/util/trxmanager/trxmanager.go`
- [Validation](https://github.com/mcholismalik/crud-api-go-echo/tree/master/pkg/util/validator): `pkg/util/validator`
- [API Responses](https://github.com/mcholismalik/crud-api-go-echo/tree/master/pkg/util/response): `pkg/util/response`
- [Pagination Context](https://github.com/mcholismalik/crud-api-go-echo/blob/master/internal/abstraction/pagination.go): `internal/abstraction/pagination.go`
- [Elasticsearch Client](https://github.com/mcholismalik/crud-api-go-echo/blob/master/pkg/elasticsearch/service.go): `pkg/elasticsearch/service.go`
- [Log Services](https://github.com/mcholismalik/crud-api-go-echo/blob/master/pkg/log/service.go): `pkg/log/service.go`

### Other components

- **API Client**

## Connections

- API Client → HTTP Routes: HTTP requests
- Application Startup → Database: initializes
- Application Startup → Schema Migration: runs migrations
- Application Startup → Elasticsearch Client: initializes
- Application Startup → Middleware: installs
- Application Startup → Dependency Factory: creates
- Application Startup → HTTP Routes: starts
- HTTP Routes → Auth Routes: registers
- HTTP Routes → Sample Routes: registers
- Auth Routes → Auth Handler: dispatches
- Sample Routes → Sample Handler: dispatches
- Auth Handler → Auth Service: calls
- Auth Handler → Auth DTOs: binds
- Auth Handler → Validation: validates
- Auth Handler → API Responses: sends
- Auth Service → User Repository: calls
- Auth Service → Transactions: runs registration
- Sample Handler → Sample Service: calls
- Sample Handler → Sample DTOs: binds
- Sample Handler → Validation: validates
- Sample Handler → API Responses: sends
- Sample Service → Sample Repository: uses
- Sample Service → Transactions: uses
- User Repository → Repository Abstraction: uses
- Sample Repository → Repository Abstraction: uses
- User Repository → Domain Models: reads and writes
- Sample Repository → Domain Models: reads and writes
- Repository Abstraction → Database: queries
- Transactions → Database: begins and commits
- Schema Migration → Database: updates schema
- Log Services → Elasticsearch Client: indexes logs
