# matheusmendesl/habit-tracker architecture

> Architecture diagram of the GitHub repository matheusmendesl/habit-tracker, 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/matheusmendesl/habit-tracker
- Repository: https://github.com/matheusmendesl/habit-tracker

## Overview

This is a microservice backend for habit and routine tracking, with user accounts, social features, and activity statistics. A client reaches the Go gateway, which exposes versioned API routes; service implementations provide the domain operations and persistence. Authentication is a separate Node service handling signup, login, and token lifecycle. The tree also includes an Angular frontend, but its sampled routes are empty. Relationships for unsampled service internals and gateway clients are omitted where call ownership could not be verified.

Main entry points: [`backend/gateway/internal/routes/routes.go`](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/gateway/internal/routes/routes.go) (Gateway routes), [`backend/services/auth-service/src/internal/service/auth_service.js`](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/auth-service/src/internal/service/auth_service.js) (Auth operations), [`backend/services/habit-service/internal/repository`](https://github.com/matheusmendesl/habit-tracker/tree/main/backend/services/habit-service/internal/repository) (Tracking repositories), [`backend/services/habit-service/handler`](https://github.com/matheusmendesl/habit-tracker/tree/main/backend/services/habit-service/handler) (Tracking handlers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gateway["API gateway"]
  node_gateway_routes["Gateway routes<br/>[routes.go]"]
  node_gateway_user["User handler<br/>[user_handler.go]"]
  node_gateway_habit["Habit handlers<br/>[habit_handler.go]"]
  node_gateway_routine["Routine handler<br/>[routine_handler.go]"]
  node_gateway_social["Social handler<br/>[social_handler.go]"]
  node_gateway_stats["Stats handler<br/>[stats_handler.go]"]
  node_gateway_clients["Service clients"]
end

subgraph group_identity["Identity"]
  node_auth_routes["Auth routes<br/>[auth_router.js]"]
  node_auth_controller["Auth controller"]
  node_auth_service["Auth operations<br/>[auth_service.js]"]
  node_auth_repository["User repository<br/>[user_repository.js]"]
  node_auth_db[("User database<br/>[database.js]")]
  node_refresh_store[("Refresh-token store<br/>[redis.js]")]
end

subgraph group_tracking["Habit tracking"]
  node_habit_service["Habit service<br/>[habit_service.go]"]
  node_routine_service["Routine service<br/>[routine_service.go]"]
  node_tracking_handler["Tracking handlers"]
  node_tracking_repository["Tracking repositories"]
  node_tracking_db[("Tracking database")]
end

subgraph group_community["Social and stats"]
  node_social_service["Social service<br/>[social_service.go]"]
  node_social_handler["Social handler<br/>[social_handler.go]"]
  node_social_db[("Social database")]
  node_stats_service["Stats service<br/>[stats_service.go]"]
  node_stats_handler["Stats handler<br/>[stats_handler.go]"]
  node_stats_db[("Stats database")]
end

subgraph group_accounts["User service"]
  node_user_service["User service<br/>[user_service.go]"]
  node_user_handler["User handler<br/>[user_handler.go]"]
  node_user_db[("User database")]
end

node_client(("API client"))

node_client -->|"sends requests"| node_gateway_routes
node_gateway_routes -->|"dispatches user"| node_gateway_user
node_gateway_routes -->|"dispatches habits"| node_gateway_habit
node_gateway_routes -->|"dispatches routines"| node_gateway_routine
node_gateway_routes -->|"dispatches social"| node_gateway_social
node_gateway_routes -->|"dispatches stats"| node_gateway_stats
node_auth_routes -->|"dispatches auth"| node_auth_controller
node_auth_controller -->|"calls operations"| node_auth_service
node_auth_service -->|"queries users"| node_auth_repository
node_auth_repository -->|"reads and writes"| node_auth_db
node_auth_service -->|"stores tokens"| node_refresh_store
node_tracking_handler -->|"handles habits"| node_habit_service
node_tracking_handler -->|"handles routines"| node_routine_service
node_habit_service -->|"uses repository"| node_tracking_repository
node_routine_service -->|"uses repository"| node_tracking_repository
node_tracking_repository -->|"reads and writes"| node_tracking_db
node_social_handler -->|"handles requests"| node_social_service
node_social_service -->|"persists data"| node_social_db
node_stats_handler -->|"handles requests"| node_stats_service
node_stats_service -->|"reads and updates"| node_stats_db
node_user_handler -->|"handles requests"| node_user_service
node_user_service -->|"reads and writes"| node_user_db

click node_gateway_routes "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/gateway/internal/routes/routes.go"
click node_gateway_user "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/gateway/internal/handlers/user/user_handler.go"
click node_gateway_habit "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/gateway/internal/handlers/habit/habit_handler.go"
click node_gateway_routine "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/gateway/internal/handlers/habit/routine_handler.go"
click node_gateway_social "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/gateway/internal/handlers/social/social_handler.go"
click node_gateway_stats "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/gateway/internal/handlers/stats/stats_handler.go"
click node_gateway_clients "https://github.com/matheusmendesl/habit-tracker/tree/main/backend/gateway/internal/clients"
click node_auth_routes "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/auth-service/src/routers/auth_router.js"
click node_auth_controller "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/auth-service/src/controllers/auth_controllers.js"
click node_auth_service "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/auth-service/src/internal/service/auth_service.js"
click node_auth_repository "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/auth-service/src/internal/repository/user_repository.js"
click node_auth_db "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/auth-service/src/config/database.js"
click node_refresh_store "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/auth-service/src/config/redis.js"
click node_habit_service "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/habit-service/internal/service/habit_service.go"
click node_routine_service "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/habit-service/internal/service/routine_service.go"
click node_tracking_handler "https://github.com/matheusmendesl/habit-tracker/tree/main/backend/services/habit-service/handler"
click node_tracking_repository "https://github.com/matheusmendesl/habit-tracker/tree/main/backend/services/habit-service/internal/repository"
click node_tracking_db "https://github.com/matheusmendesl/habit-tracker/tree/main/backend/services/habit-service/db"
click node_social_service "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/social-service/internal/service/social_service.go"
click node_social_handler "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/social-service/handler/social_handler.go"
click node_social_db "https://github.com/matheusmendesl/habit-tracker/tree/main/backend/services/social-service/db"
click node_stats_service "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/stats-service/internal/service/stats_service.go"
click node_stats_handler "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/stats-service/handler/stats_handler.go"
click node_stats_db "https://github.com/matheusmendesl/habit-tracker/tree/main/backend/services/stats-service/db"
click node_user_service "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/user-service/internal/service/user_service.go"
click node_user_handler "https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/user-service/handler/user_handler.go"
click node_user_db "https://github.com/matheusmendesl/habit-tracker/tree/main/backend/services/user-service/db"

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_gateway_routes,node_gateway_user,node_gateway_habit,node_gateway_routine,node_gateway_social,node_gateway_stats,node_gateway_clients,node_client toneBlue
class node_auth_routes,node_auth_controller,node_auth_service,node_auth_repository,node_auth_db,node_refresh_store toneAmber
class node_habit_service,node_routine_service,node_tracking_handler,node_tracking_repository,node_tracking_db toneMint
class node_social_service,node_social_handler,node_social_db,node_stats_service,node_stats_handler,node_stats_db toneRose
class node_user_service,node_user_handler,node_user_db toneIndigo
```

## Components

### API gateway

- [Gateway routes](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/gateway/internal/routes/routes.go): `backend/gateway/internal/routes/routes.go`
- [User handler](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/gateway/internal/handlers/user/user_handler.go): `backend/gateway/internal/handlers/user/user_handler.go`
- [Habit handlers](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/gateway/internal/handlers/habit/habit_handler.go): `backend/gateway/internal/handlers/habit/habit_handler.go`
- [Routine handler](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/gateway/internal/handlers/habit/routine_handler.go): `backend/gateway/internal/handlers/habit/routine_handler.go`
- [Social handler](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/gateway/internal/handlers/social/social_handler.go): `backend/gateway/internal/handlers/social/social_handler.go`
- [Stats handler](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/gateway/internal/handlers/stats/stats_handler.go): `backend/gateway/internal/handlers/stats/stats_handler.go`
- [Service clients](https://github.com/matheusmendesl/habit-tracker/tree/main/backend/gateway/internal/clients): `backend/gateway/internal/clients`

### Identity

- [Auth routes](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/auth-service/src/routers/auth_router.js): `backend/services/auth-service/src/routers/auth_router.js`
- [Auth controller](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/auth-service/src/controllers/auth_controllers.js): `backend/services/auth-service/src/controllers/auth_controllers.js`
- [Auth operations](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/auth-service/src/internal/service/auth_service.js): `backend/services/auth-service/src/internal/service/auth_service.js`
- [User repository](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/auth-service/src/internal/repository/user_repository.js): `backend/services/auth-service/src/internal/repository/user_repository.js`
- [User database](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/auth-service/src/config/database.js): `backend/services/auth-service/src/config/database.js`
- [Refresh-token store](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/auth-service/src/config/redis.js): `backend/services/auth-service/src/config/redis.js`

### Habit tracking

- [Habit service](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/habit-service/internal/service/habit_service.go): `backend/services/habit-service/internal/service/habit_service.go`
- [Routine service](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/habit-service/internal/service/routine_service.go): `backend/services/habit-service/internal/service/routine_service.go`
- [Tracking handlers](https://github.com/matheusmendesl/habit-tracker/tree/main/backend/services/habit-service/handler): `backend/services/habit-service/handler`
- [Tracking repositories](https://github.com/matheusmendesl/habit-tracker/tree/main/backend/services/habit-service/internal/repository): `backend/services/habit-service/internal/repository`
- [Tracking database](https://github.com/matheusmendesl/habit-tracker/tree/main/backend/services/habit-service/db): `backend/services/habit-service/db`

### Social and stats

- [Social service](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/social-service/internal/service/social_service.go): `backend/services/social-service/internal/service/social_service.go`
- [Social handler](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/social-service/handler/social_handler.go): `backend/services/social-service/handler/social_handler.go`
- [Social database](https://github.com/matheusmendesl/habit-tracker/tree/main/backend/services/social-service/db): `backend/services/social-service/db`
- [Stats service](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/stats-service/internal/service/stats_service.go): `backend/services/stats-service/internal/service/stats_service.go`
- [Stats handler](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/stats-service/handler/stats_handler.go): `backend/services/stats-service/handler/stats_handler.go`
- [Stats database](https://github.com/matheusmendesl/habit-tracker/tree/main/backend/services/stats-service/db): `backend/services/stats-service/db`

### User service

- [User service](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/user-service/internal/service/user_service.go): `backend/services/user-service/internal/service/user_service.go`
- [User handler](https://github.com/matheusmendesl/habit-tracker/blob/main/backend/services/user-service/handler/user_handler.go): `backend/services/user-service/handler/user_handler.go`
- [User database](https://github.com/matheusmendesl/habit-tracker/tree/main/backend/services/user-service/db): `backend/services/user-service/db`

### Other components

- **API client**

## Connections

- API client → Gateway routes: sends requests
- Gateway routes → User handler: dispatches user
- Gateway routes → Habit handlers: dispatches habits
- Gateway routes → Routine handler: dispatches routines
- Gateway routes → Social handler: dispatches social
- Gateway routes → Stats handler: dispatches stats
- Auth routes → Auth controller: dispatches auth
- Auth controller → Auth operations: calls operations
- Auth operations → User repository: queries users
- User repository → User database: reads and writes
- Auth operations → Refresh-token store: stores tokens
- Tracking handlers → Habit service: handles habits
- Tracking handlers → Routine service: handles routines
- Habit service → Tracking repositories: uses repository
- Routine service → Tracking repositories: uses repository
- Tracking repositories → Tracking database: reads and writes
- Social handler → Social service: handles requests
- Social service → Social database: persists data
- Stats handler → Stats service: handles requests
- Stats service → Stats database: reads and updates
- User handler → User service: handles requests
- User service → User database: reads and writes
