Plataforma de contratação de serviços criativos para projetos independentes.
O ForgeDesk conecta clientes que precisam de serviços criativos com prestadores capazes de executar essas demandas.
A ideia é permitir que um cliente crie uma solicitação com título, descrição, tipo de serviço, orçamento e referência. Depois, um prestador pode visualizar a demanda, aceitá-la e atualizar seu status.
- Sprint 1: Arquitetura e Backend REST — concluída ✅
- Sprint 2: Integração com MOM — concluída ✅
- Sprint 3: App Flutter Cliente — pendente
- Sprint 4: App Flutter Prestador — pendente
- Python 3.13
- Flask
- SQLAlchemy
- PostgreSQL 16
- RabbitMQ
- Docker Compose
- Postman
Nas próximas sprints, o projeto também utilizará Flutter.
Na raiz do projeto:
cd infra
docker compose up -dEm outro terminal:
cd code/Back
py -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python main.pyA API ficará disponível em:
http://localhost:8000
O backend usa um arquivo .env dentro de code/Back.
Exemplo:
DATABASE_URL=postgresql+psycopg://forgedesk_user:forgedesk_pass@localhost:5433/forgedesk_db
FLASK_PORT=8000
RABBITMQ_HOST=localhost
RABBITMQ_PORT=5672
RABBITMQ_USER=forgedesk
RABBITMQ_PASSWORD=forgedesk
RABBITMQ_QUEUE=forgedesk_eventos
AUTH_SECRET=forgedesk-dev-secret
TOKEN_TTL_SECONDS=86400A Sprint 2 adiciona integração com RabbitMQ. O backend publica eventos quando uma solicitação é criada e quando seu status é atualizado. Um consumidor separado processa essas mensagens pela fila forgedesk_eventos.
cd infra
docker compose up -dcd code/Back
.\.venv\Scripts\Activate.ps1
python main.pyEm outro terminal:
cd code/Back
.\.venv\Scripts\Activate.ps1
python consumers/consumer_solicitacoes.pyhttp://localhost:15672
usuário: forgedesk
senha: forgedesk
solicitacao.criadasolicitacao.status_atualizado
Documentação dos eventos:
Docs/eventos-mom.md
Relatório de integração:
Docs/relatorio-integracao-mom.md
A Sprint 3 implementa o app Flutter do cliente, localizado em:
code/Mobile/cliente
Funcionalidades entregues:
- login com token de autenticação;
- listagem de solicitações;
- detalhes de uma solicitação;
- criação de solicitação;
- referência combinando orientação em texto e imagem anexada;
- integração HTTP com a API Flask;
- atualização automática por polling a cada 10 segundos.
Para rodar o app:
cd code/Mobile/cliente
flutter pub get
flutter runPor padrão, o app usa:
Web/Desktop: http://localhost:8000
Android Emulator: http://10.0.2.2:8000
Também é possível sobrescrever a URL da API:
flutter run --dart-define=API_BASE_URL=http://SEU_IP:8000Documentação da arquitetura Flutter Cliente:
Docs/arquitetura-flutter-cliente.md
A Sprint 4 implementa o app Flutter do prestador, localizado em:
code/Mobile/prestador
Funcionalidades entregues:
- listagem de oportunidades pendentes;
- detalhes de uma solicitacao;
- aceite de solicitacao pelo prestador;
- tela de Minhas Solicitacoes;
- inicio e conclusao de servico;
- integracao HTTP com a API Flask;
- atualizacao automatica por polling a cada 10 segundos.
Para rodar o app:
cd code/Mobile/prestador
flutter pub get
flutter runFluxo integrado:
Cliente cria solicitacao -> Backend registra e publica eventos -> Prestador aceita e atualiza status -> Cliente acompanha a evolucao
Por padrao, o app usa:
http://localhost:8000
Esse endereco e adequado para web e desktop. Para emulador Android, use:
http://10.0.2.2:8000
Documentacao da arquitetura Flutter Prestador:
Docs/arquitetura-flutter-prestador.md
GET /health— verifica se a API está funcionandoPOST /auth/login— autentica o usuário e retorna um tokenPOST /solicitacoes— cria uma solicitaçãoGET /solicitacoes— lista as solicitaçõesGET /solicitacoes/{id}— busca uma solicitação por IDPATCH /solicitacoes/{id}/status— atualiza o statusPUT /solicitacoes/{id}— atualiza os dados da solicitaçãoDELETE /solicitacoes/{id}— remove uma solicitação
Com exceção de /health e /auth/login, as rotas exigem:
Authorization: Bearer SEU_TOKENUsuário de demonstração:
cliente@forgedesk.com
123456
Exemplo:
POST http://localhost:8000/auth/login
Content-Type: application/json{
"email": "cliente@forgedesk.com",
"senha": "123456"
}Use o campo token retornado nas demais requisições.
{
"cliente_id": 1,
"titulo": "Capa para PDF de RPG independente",
"descricao": "Preciso de uma capa digital para um suplemento autoral de fantasia.",
"tipo_servico": "Design",
"orcamento": 150.0,
"referencia": "{\"texto\":\"Estilo pintura digital escura\",\"imagem\":\"data:image/jpeg;base64,...\"}"
}O campo referencia aceita um texto simples legado ou um JSON em string com:
texto: orientação textual da referência;imagem: imagem em formatodata:image/...;base64,....
No app Flutter, os dois campos são preenchidos juntos em uma única seção de referências.
O ID da solicitação vai na URL:
PATCH http://localhost:8000/solicitacoes/120/status
Authorization: Bearer SEU_TOKEN
Content-Type: application/json{
"status": "ACEITA",
"prestador_id": 2
}Status válidos:
PENDENTE
ACEITA
EM_ANDAMENTO
CONCLUIDA
CANCELADA
RECUSADA
A entidade principal do sistema é a tabela solicitacoes.
O schema está documentado em:
code/Back/database/schema.sql
Status possíveis:
PENDENTE
ACEITA
EM_ANDAMENTO
CONCLUIDA
CANCELADA
RECUSADA
Tipos de serviço aceitos:
Design
Ilustração
Edição de vídeo
Identidade visual
Modelagem 3D
Social media
Motion graphics
UI/UX
A coleção Postman está em:
code/tests/forgedesk_postman_collection.json
Ela contém exemplos para login, criar, listar, buscar, atualizar e remover solicitações. Para usar:
- Rode o request
Login. - Copie o valor de
tokenda resposta. - Use o token no header das rotas protegidas:
Authorization: Bearer SEU_TOKEN
Também existe uma collection mínima para teste de importação:
code/tests/forgedesk_postman_minimal_collection.json
- Proposta do projeto:
Docs/Documento de Proposta - ForgeDesk.pdf - Arquitetura:
Docs/diagrama-arquitetura.md - Eventos MOM:
Docs/eventos-mom.md - Relatório MOM:
Docs/relatorio-integracao-mom.md - Arquitetura Flutter Prestador:
Docs/arquitetura-flutter-prestador.md - Schema do banco:
code/Back/database/schema.sql - Collection Postman:
code/tests/forgedesk_postman_collection.json
ForgeDesk/
├── code/
│ ├── Back/
│ ├── Mobile/
│ └── tests/
├── Docs/
├── infra/
├── .gitignore
└── README.md