Skip to content
This repository was archived by the owner on Jul 17, 2026. It is now read-only.

Repository files navigation

Stacker API

Documentacao tecnica oficial do projeto Stacker, uma API REST para gestao de usuarios, habilidades e projetos no contexto de marketplace freelancer.

1. Visao Geral

O Stacker foi estruturado em arquitetura em camadas com separacao clara de responsabilidades entre API, aplicacao, dominio e infraestrutura.

Objetivos principais do sistema:

  • Cadastro e autenticacao de usuarios.
  • Gestao de habilidades.
  • Gestao completa do ciclo de vida de projetos (criacao, atualizacao, inicio, conclusao e cancelamento logico).
  • Registro de comentarios em projetos.

Guia para QA e Front-end

Para validacao funcional, testes de contrato e integracao de telas/servicos cliente, consulte o guia dedicado:

  • docs/API-Docs.md

Esse material complementar detalha payloads, respostas esperadas, cenarios de erro (400, 401, 404) e checklist de regressao.

2. Arquitetura e Organizacao da Solucao

A solution esta organizada em quatro camadas principais:

  • Stacker.API: camada de entrada HTTP (controllers, DI, middleware, autenticacao e OpenAPI).
  • Stacker.Application: casos de uso via CQRS com MediatR, handlers, validadores e view models.
  • Stacker.Core: entidades de dominio, contratos (Repositories e Services) e enums.
  • Stacker.Infrastructure: persistencia com Entity Framework Core, implementacoes de repositorios e servico de autenticacao JWT.

Padroes e abordagens adotadas

  • CQRS (Command Query Responsibility Segregation) com MediatR.
  • Repository Pattern para desacoplar acesso a dados da camada de aplicacao.
  • Validacao em pipeline com FluentValidation + IPipelineBehavior (ValidationBehavior).
  • Injecao de Dependencia nativa do ASP.NET Core.
  • Tratamento centralizado de erro de validacao via middleware customizado em Program.cs.
  • Estrategia hibrida de dados para performance: Dapper para leituras/escritas mais custosas e EF Core para operacoes leves e mapeamento.

3. Stack Tecnica

Runtime e framework

  • .NET 10 (net10.0)
  • ASP.NET Core Web API

Persistencia e banco

  • Entity Framework Core 10
  • Npgsql.EntityFrameworkCore.PostgreSQL 10
  • Banco alvo: PostgreSQL (via DefaultConnection)

Mensageria interna e validacao

  • MediatR.Extensions.Microsoft.DependencyInjection 11.1.0
  • FluentValidation 12.1.1

Autenticacao e seguranca

  • Microsoft.AspNetCore.Authentication.JwtBearer 10.0.5
  • Tokens JWT assinados com HMAC-SHA256
  • Hash de senha com SHA-256 (implementado em AuthService)

Documentacao e exploracao da API

  • Microsoft.AspNetCore.OpenApi 10.0.3
  • Scalar.AspNetCore 2.13.9

Bibliotecas adicionais presentes

  • Dapper 2.1.72 (referenciada na camada Stacker.Infrastructure)

4. Features Implementadas

Usuarios

  • Criar usuario (POST /api/users)
  • Registrar usuario (POST /api/users/register)
  • Login com emissao de JWT (POST /api/users/login)
  • Listar usuarios ativos (GET /api/users)
  • Buscar usuario por id (GET /api/users/{id})
  • Atualizar usuario (PUT /api/users/{id})
  • Excluir usuario com soft delete (DELETE /api/users/{id} -> Active = false)

Habilidades

  • Criar habilidade
  • Listar habilidades
  • Buscar habilidade por id
  • Atualizar habilidade
  • Excluir habilidade (remoção fisica)

Projetos

  • Criar projeto
  • Listar projetos
  • Buscar projeto por id
  • Atualizar projeto
  • Excluir projeto com cancelamento logico (Status = Cancelled)
  • Iniciar projeto (POST /api/projects/{id}/start)
  • Finalizar projeto (POST /api/projects/{id}/finish)
  • Criar comentario em projeto (POST /api/projects/{id}/comments)

Regras de estado de projeto

Status em ProjectStatusEnum:

  • Created
  • InProgress
  • Suspended
  • Cancelled
  • Finished

Transicoes de negocio implementadas na entidade Project:

  • Start() apenas quando status atual for Created.
  • Finish() apenas quando status atual for InProgress.
  • Cancel() quando status atual for Created ou InProgress.

5. Endpoints HTTP

Base URL local configurada em launchSettings.json:

  • HTTP: http://localhost:5172
  • HTTPS: https://localhost:7184

Todos os exemplos abaixo usam http://localhost:5172 para facilitar testes locais.

RecursoMetodoRotaDescricaoCodigos principais
UsersGET/api/usersLista usuarios ativos200
UsersGET/api/users/{id}Detalhe de usuario200, 404
UsersPOST/api/usersCria usuario201, 400
UsersPUT/api/users/{id}Atualiza usuario204, 400, 404
UsersDELETE/api/users/{id}Soft delete de usuario204, 404
UsersPOST/api/users/loginAutentica e retorna token200, 400, 401
UsersPOST/api/users/registerCadastro de usuario (alias de criacao)201, 400
SkillsGET/api/skillsLista habilidades200
SkillsGET/api/skills/{id}Detalhe de habilidade200, 404
SkillsPOST/api/skillsCria habilidade201, 400
SkillsPUT/api/skills/{id}Atualiza habilidade204, 400, 404
SkillsDELETE/api/skills/{id}Exclui habilidade204, 404
ProjectsGET/api/projectsLista projetos200
ProjectsGET/api/projects/{id}Detalhe de projeto200, 404
ProjectsPOST/api/projectsCria projeto201, 400, 404
ProjectsPUT/api/projects/{id}Atualiza projeto204, 400, 404
ProjectsDELETE/api/projects/{id}Cancela projeto204, 404
ProjectsPOST/api/projects/{id}/commentsCria comentario no projeto204, 400, 404
ProjectsPOST/api/projects/{id}/startInicia projeto204, 404
ProjectsPOST/api/projects/{id}/finishFinaliza projeto204, 404

6. Exemplos de Uso da API

6.1 Criar usuario

curl -X POST "http://localhost:5172/api/users/register" \
-H "Content-Type: application/json" \
-d '{ "fullName": "Maria Silva", "email": "maria.silva@empresa.com", "birthDate": "1995-04-10T00:00:00", "password": "SenhaForte@123", "role": "Freelancer" }'

6.2 Login

curl -X POST "http://localhost:5172/api/users/login" \
-H "Content-Type: application/json" \
-d '{ "email": "maria.silva@empresa.com", "password": "SenhaForte@123" }'

Exemplo de resposta de sucesso (200):

{
"email": "maria.silva@empresa.com",
"token": "<jwt-token>"
}

6.3 Criar habilidade

curl -X POST "http://localhost:5172/api/skills" \
-H "Content-Type: application/json" \
-d '{ "description": "ASP.NET Core" }'

6.4 Criar projeto

curl -X POST "http://localhost:5172/api/projects" \
-H "Content-Type: application/json" \
-d '{ "title": "API de Marketplace Freelancer", "description": "Implementacao de backend para gestao de projetos e contratacoes.", "idClient": 1, "idFreelancer": 2, "totalCost": 12500.00 }'

6.5 Iniciar e finalizar projeto

curl -X POST "http://localhost:5172/api/projects/1/start"
curl -X POST "http://localhost:5172/api/projects/1/finish"

6.6 Comentar em projeto

curl -X POST "http://localhost:5172/api/projects/1/comments" \
-H "Content-Type: application/json" \
-d '{ "content": "Entrega parcial validada. Prosseguir para a proxima etapa.", "idUser": 1 }'

7. Validacoes de Entrada

Validacoes sao aplicadas por comando via FluentValidation e executadas automaticamente no pipeline do MediatR.

Principais regras:

  • Usuario: nome obrigatorio e max. 100, email valido, idade minima 18 anos, senha forte, role obrigatoria.
  • Projeto: titulo obrigatorio e max. 50, descricao obrigatoria e max. 500, cliente/freelancer validos, custo > 0.
  • Skill: descricao obrigatoria e max. 100.
  • Comentario: conteudo obrigatorio e max. 500, projeto e usuario validos.

Formato de erro de validacao (400) retornado pela API:

{
"title": "Falha na validacao",
"status": 400,
"detail": "Um ou mais campos estao invalidos.",
"errors": {
"Email": ["Informe um e-mail valido."]
}
}

8. Configuracao de Ambiente

Arquivo: Stacker.API/appsettings.Development.json

Campos obrigatorios:

{
"ConnectionStrings": {
"DefaultConnection": "Host=...;Port=5432;Database=...;Username=...;Password=..."
},
"Jwt": {
"Key": "sua-chave-secreta-com-tamanho-adequado",
"Issuer": "stacker-api",
"Audience": "stacker-clients"
}
}

9. Como Executar

Pre-requisitos

  • SDK .NET 10
  • PostgreSQL disponivel

Execucao local

dotnet restore
dotnet run --project Stacker.API

Com o profile padrao de desenvolvimento, a API fica disponivel em:

  • http://localhost:5172
  • https://localhost:7184

10. Documentacao OpenAPI

Em ambiente de desenvolvimento, a aplicacao expõe especificacao OpenAPI e interface de referencia via Scalar.

  • OpenAPI: endpoint mapeado por app.MapOpenApi()
  • API Reference: endpoint mapeado por app.MapScalarApiReference()

11. Observacoes Tecnicas

  • A API gera JWT no login; a configuracao de autenticacao JWT esta registrada globalmente em Program.cs.
  • Exclusao de usuarios e projetos e logica (soft/cancelamento), preservando historico operacional.
  • Estrutura pronta para evolucao com testes, versionamento de API e observabilidade.

About

Uma API e e-commerce de desenvolvedores, com gestao de usuarios, habilidades e projetos no contexto de marketplace freelancer.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages