# nahul100/olx-api architecture

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

- Interactive diagram: https://gitdiagram.com/nahul100/olx-api
- Repository: https://github.com/nahul100/olx-api

## Overview

This Go service exposes a small listings API: clients can check health, list recent listings, create a validated listing, or delete one. The API entry point loads configuration, connects to PostgreSQL, registers routes, and wraps them with request-ID middleware; handlers perform listing queries and format JSON responses or shared errors. A separate migration command applies schema changes or seed data. The tree documents only listing persistence, so no additional product capabilities are assumed. Relationships are limited to those visible in excerpts; migration file contents were not sampled.

Main entry points: [`cmd/api/main.go`](https://github.com/nahul100/olx-api/blob/main/cmd/api/main.go) (API Server), [`cmd/migrate/main.go`](https://github.com/nahul100/olx-api/blob/main/cmd/migrate/main.go) (Migration Command), [`internal/handlers/listings.go`](https://github.com/nahul100/olx-api/blob/main/internal/handlers/listings.go) (Listing Handlers), [`internal/middleware/requestid.go`](https://github.com/nahul100/olx-api/blob/main/internal/middleware/requestid.go) (Request IDs)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_api_server["API Server<br/>[main.go]"]
  node_health["Health Check<br/>[handlers.go]"]
  node_error_responses["HTTP Errors<br/>[errors.go]"]
end

subgraph group_listing["Listing Domain"]
  node_listing_handler["Listing Handlers<br/>[listings.go]"]
  node_listing_dto["Create DTO<br/>[dto.go]"]
end

subgraph group_platform["Runtime Platform"]
  node_request_id["Request IDs<br/>[requestid.go]"]
  node_config["Configuration<br/>[config.go]"]
  node_db_connector["DB Connector<br/>[db.go]"]
  node_postgres[("PostgreSQL")]
end

subgraph group_schema["Database Setup"]
  node_migration_command["Migration Command<br/>[main.go]"]
  node_migration_files["Schema Migrations"]
  node_seed_data["Listing Seed<br/>[listings.sql]"]
end

node_client(("API Client"))

node_client -->|"sends requests"| node_api_server
node_api_server -->|"loads settings"| node_config
node_api_server -->|"opens database"| node_db_connector
node_db_connector -->|"pings"| node_postgres
node_api_server -->|"registers routes"| node_listing_handler
node_api_server -->|"registers health"| node_health
node_api_server -->|"wraps routes"| node_request_id
node_request_id -->|"dispatches requests"| node_api_server
node_listing_handler -->|"queries listings"| node_postgres
node_listing_handler -->|"validates input"| node_listing_dto
node_listing_handler -->|"writes errors"| node_error_responses
node_listing_handler -->|"reads request ID"| node_request_id
node_migration_command -->|"loads settings"| node_config
node_migration_command -->|"connects for seed"| node_db_connector
node_migration_command -->|"applies migrations"| node_postgres
node_migration_command -->|"loads migration files"| node_migration_files
node_migration_command -->|"executes seed"| node_seed_data

click node_api_server "https://github.com/nahul100/olx-api/blob/main/cmd/api/main.go"
click node_health "https://github.com/nahul100/olx-api/blob/main/internal/handlers/handlers.go"
click node_request_id "https://github.com/nahul100/olx-api/blob/main/internal/middleware/requestid.go"
click node_listing_handler "https://github.com/nahul100/olx-api/blob/main/internal/handlers/listings.go"
click node_listing_dto "https://github.com/nahul100/olx-api/blob/main/internal/handlers/dto.go"
click node_error_responses "https://github.com/nahul100/olx-api/blob/main/internal/httpx/errors.go"
click node_config "https://github.com/nahul100/olx-api/blob/main/internal/config/config.go"
click node_db_connector "https://github.com/nahul100/olx-api/blob/main/internal/db/db.go"
click node_migration_command "https://github.com/nahul100/olx-api/blob/main/cmd/migrate/main.go"
click node_migration_files "https://github.com/nahul100/olx-api/tree/main/internal/migrations"
click node_seed_data "https://github.com/nahul100/olx-api/blob/main/internal/seeds/listings.sql"

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_api_server,node_health,node_error_responses,node_client toneBlue
class node_listing_handler,node_listing_dto toneAmber
class node_request_id,node_config,node_db_connector,node_postgres toneMint
class node_migration_command,node_migration_files,node_seed_data toneRose
```

## Components

### HTTP API

- [API Server](https://github.com/nahul100/olx-api/blob/main/cmd/api/main.go): `cmd/api/main.go`
- [Health Check](https://github.com/nahul100/olx-api/blob/main/internal/handlers/handlers.go): `internal/handlers/handlers.go`
- [HTTP Errors](https://github.com/nahul100/olx-api/blob/main/internal/httpx/errors.go): `internal/httpx/errors.go`

### Listing Domain

- [Listing Handlers](https://github.com/nahul100/olx-api/blob/main/internal/handlers/listings.go): `internal/handlers/listings.go`
- [Create DTO](https://github.com/nahul100/olx-api/blob/main/internal/handlers/dto.go): `internal/handlers/dto.go`

### Runtime Platform

- [Request IDs](https://github.com/nahul100/olx-api/blob/main/internal/middleware/requestid.go): `internal/middleware/requestid.go`
- [Configuration](https://github.com/nahul100/olx-api/blob/main/internal/config/config.go): `internal/config/config.go`
- [DB Connector](https://github.com/nahul100/olx-api/blob/main/internal/db/db.go): `internal/db/db.go`
- **PostgreSQL**

### Database Setup

- [Migration Command](https://github.com/nahul100/olx-api/blob/main/cmd/migrate/main.go): `cmd/migrate/main.go`
- [Schema Migrations](https://github.com/nahul100/olx-api/tree/main/internal/migrations): `internal/migrations`
- [Listing Seed](https://github.com/nahul100/olx-api/blob/main/internal/seeds/listings.sql): `internal/seeds/listings.sql`

### Other components

- **API Client**

## Connections

- API Client → API Server: sends requests
- API Server → Configuration: loads settings (evidence: `cmd/api/main.go`)
- API Server → DB Connector: opens database (evidence: `cmd/api/main.go`)
- DB Connector → PostgreSQL: pings (evidence: `internal/db/db.go`)
- API Server → Listing Handlers: registers routes (evidence: `cmd/api/main.go`)
- API Server → Health Check: registers health (evidence: `cmd/api/main.go`)
- API Server → Request IDs: wraps routes (evidence: `cmd/api/main.go`)
- Request IDs → API Server: dispatches requests (evidence: `internal/middleware/requestid.go`)
- Listing Handlers → PostgreSQL: queries listings (evidence: `internal/handlers/listings.go`)
- Listing Handlers → Create DTO: validates input (evidence: `internal/handlers/listings.go`)
- Listing Handlers → HTTP Errors: writes errors (evidence: `internal/handlers/listings.go`)
- Listing Handlers → Request IDs: reads request ID (evidence: `internal/handlers/listings.go`)
- Migration Command → Configuration: loads settings (evidence: `cmd/migrate/main.go`)
- Migration Command → DB Connector: connects for seed (evidence: `cmd/migrate/main.go`)
- Migration Command → PostgreSQL: applies migrations (evidence: `cmd/migrate/main.go`)
- Migration Command → Schema Migrations: loads migration files (evidence: `cmd/migrate/main.go`)
- Migration Command → Listing Seed: executes seed (evidence: `cmd/migrate/main.go`)
