Skip to content

silvalnk/axum-clean-architecture-api-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rust Clean Architecture

API backend em Rust usando axum, seguindo uma organização de camadas inspirada em Clean Architecture.

Stack

  • Rust
  • Axum
  • Tokio
  • SQLx + PostgreSQL
  • Argon2 para hash de senha
  • Tracing + tower-http (trace e CORS)
  • Docker + Docker Compose

Estrutura do projeto

src/
  domain/                 # Entidades e regras centrais do domínio
  app/                    # Casos de uso e contratos (traits)
  adapter/
    http/                 # Rotas HTTP, estado e mapeamento de erros
    persistence/          # Implementação de persistência no PostgreSQL
    crypto/               # Implementação de hash (Argon2)
  infra/                  # Configuração, DB, setup e montagem da aplicação
  main.rs                 # Bootstrap do servidor

Fluxo principal de dependências:

HTTP Route -> UseCase -> Traits -> Adapters (Persistence/Crypto) -> Infra (DB/Config)

Pré-requisitos

  • Rust toolchain instalado (recomendado >= 1.88)
  • PostgreSQL rodando localmente ou Docker
  • (Opcional) sqlx-cli para aplicar migrations manualmente

Configuração de ambiente

  1. Crie seu arquivo de ambiente:
cp .env.example .env
  1. Ajuste as variáveis conforme seu ambiente:
  • DATABASE_URL: conexão do PostgreSQL
  • JWT_SECRET: segredo JWT (obrigatório)
  • REFRESH_TOKEN_TTL_DAYS: TTL do refresh token em dias
  • ACCESS_TOKEN_TTL_SECS: TTL do access token em segundos (opcional; padrão 30)
  • RUST_LOG: nível de logs

Observação: o arquivo .env.example não inclui ACCESS_TOKEN_TTL_SECS, mas o código já suporta essa variável.

Exemplos de DATABASE_URL:

  • Rodando API localmente com Postgres no host: postgres://user:password@localhost:5433/app
  • Rodando API dentro do Docker Compose: postgres://user:password@postgres:5432/app

Banco de dados e migration

Existe uma migration para criação da tabela users em migrations/20250819195936_create_users.sql.

Se quiser aplicar com SQLx CLI:

sqlx database create
sqlx migrate run

Rodando localmente

  1. Garanta que o PostgreSQL está ativo.
  2. Execute:
cargo run

Servidor sobe em:

  • http://127.0.0.1:3001

Rodando com Docker

docker compose up --build

Serviços:

  • PostgreSQL: localhost:5433
  • API: localhost:3001

Endpoint disponível

Cadastro de usuário

  • Método: POST
  • Rota: /api/user/register
  • Body JSON:
{
  "username": "John Doe",
  "email": "[email protected]",
  "password": "your-password"
}
  • Resposta de sucesso (201):
{
  "success": true
}

Qualidade e testes

Rodar testes:

cargo test

Checar lint (se clippy estiver instalado):

cargo clippy -- -D warnings

Observações técnicas

  • O hash de senha é feito com Argon2 no adapter de crypto.
  • Erros de aplicação são centralizados em AppError.
  • O app usa TraceLayer com request_id por requisição.
  • CORS está liberado para http://localhost:5173.

About

⚡ Backend built with Rust/Axum featuring Clean Architecture, SOLID, TDD, Design Patterns, PostgreSQL + SQLx, structured tracing/logging, versioned migrations and centralized error handling 🦀📦

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors