Skip to content

Sprint 2: Consolida as 3 semanas de sprint#41

Merged
pedro-fs-garcia merged 103 commits into
mainfrom
develop
May 3, 2026
Merged

Sprint 2: Consolida as 3 semanas de sprint#41
pedro-fs-garcia merged 103 commits into
mainfrom
develop

Conversation

@pedro-fs-garcia
Copy link
Copy Markdown
Contributor

Resumo

Release consolidando ~3 semanas de evolução da develop. Principais eixos:

  • domínios de empresas/produtos
  • barramento de eventos in-process
  • ciclo de vida completo de tickets, chat em tempo real orientado a eventos
  • outbox de e-mails
  • stack de observabilidade.

Novidades por domínio

Companies & Products

  • CRUD completo de empresas e produtos, com endpoints de vínculo company-user
  • Migrations e seeds iniciais; remoção de seeds conflitantes
  • Permissões semeadas para os novos domínios
  • company_id incluso no payload do JWT (feat(auth): include company_id in JWT token payload #40)
  • Correção de bugs de runtime e ampliação da cobertura de testes

Tickets

  • Contratos finais da API definidos
  • Endpoints: histórico, comentários (CRUD), atribuição, fila com filtros/ordenação,
    escalonamento, transferência e fechamento
  • Publicação de eventos ticket.created, ticket.assignee e ticket.closed
    via EventDispatcher, com listeners dedicados
  • Busca textual full-text com escopo por papel (corrige bug de pesquisa, fix: ticket text search #38)
  • Paginação compartilhada e update idempotente
  • Cobertura e2e abrangente (fila, atribuição, escalonamento, transferência,
    fechamento, busca, take)

Live Chat / Chatbot

  • Ciclo de vida da conversa orientado a eventos via ConversationListener
  • Busca textual em conversas com escopo por papel
  • FSM iniciada na criação do atendimento (alinha com README)
  • Refactor do chatbot: exceções de domínio, tipagem do TriageState,
    padronização do router e remoção de código morto
  • Melhorias no fluxo de triagem e WebSocket (fix(chat): improve triage ticket and websocket flow #33)
  • Documentação do módulo de atendimento URA

Event Dispatcher

  • Barramento de eventos assíncrono in-process para comunicação inter-domínio
  • Logging estruturado, métricas Prometheus e suporte a DI do FastAPI
  • Decorator @event_handler com testes unitários

Notifications

  • Padrão Outbox de e-mails com worker assíncrono
  • Templates de e-mail com layout atualizado
  • README do módulo

Auth & Users

Infra & Observabilidade

  • Stack completa: Prometheus, Grafana, Loki e Alertmanager
  • Métricas de domínio (auth/chat/ticket/email), HTTP, PostgreSQL e MongoDB
  • Logging assíncrono estruturado com contexto de request/usuário
  • Pipeline CI/CD para ambiente de staging
  • Reorganização de arquivos de deploy e guia de deployment
  • Ajustes no docker-compose (acesso a logs, fallbacks de URL do frontend)

Testes

  • Suíte e2e expandida em tickets, companies, products, live_chat e chatbot
  • Testes de integração para repositórios novos e listeners
  • Testes unitários para event dispatcher, outbox e schemas

pedro-fs-garcia and others added 30 commits April 13, 2026 08:01
- Adds a GitHub Actions workflow to automate the deployment of the staging environment whenever changes are pushed to the develop branch.
- Updates the Makefile to include commands for deploying to staging.
- Creates a new Docker Compose file for the staging environment and modifies the existing one to accommodate the new setup.
infra(docker-compose): fixes access to logs directory
…ponses

- add chatbot domain README with architecture, FSM flow, routes, schemas, metrics, and known issues
- introduce Attendance document model and register it in Beanie initialization
- add chatbot dependency wiring (repository/service providers)
- add centralized swagger metadata for chatbot endpoints
- refactor router to use injected service deps and response factory envelopes
- change service `process_message` return type from wrapped DTO to `TriageData`
- update chatbot schemas to reuse shared models and add search/evaluation/attendance response DTOs
- adjust integration tests to validate the new service response contract
attendance contracts: establishes and consolidates api contracts for chatbot domain
…itial schema migration

- add Alembic migration for companies, products and company_products tables
- link users to companies via nullable users.company_id foreign key
- register new models in Alembic/seed/test metadata bootstrap
- add company and product routers to API router
- create initial domain scaffolding for companies/products:
  entities, models, schemas, repositories, services, dependencies and swagger docs
- add module READMEs and shared PaginatedItems generic schema
…ions

- Scaffold user management endpoints (add, remove, list) on the company
- router, register all company and product permissions in the seed, and
- assign read access to agent and client roles.
Feat/company products - defines domain contracts
…in communication

Implement EventDispatcher core module to decouple domain emitters from
consumers, avoiding circular dependencies and growing coupling between
domains (chatbot, ticket, live_chat).

- EventDispatcher class with subscribe/publish using asyncio fire-and-forget tasks
- @event_handler decorator with payload type validation and structured error logging
- Typed Pydantic schemas for domain events
- EVENT_PAYLOAD_MAP for compile-time wiring validation at startup
- Custom exceptions: EventSchemaError, InvalidHandlerError
- Singleton access via get_event_dispatcher (lru_cache)
- Integration in app lifespan (main.py) with listener registration hook
- Unit tests for dispatcher logic and decorator behavior
- Module README and architectural docs (docs/event_dispatcher.md)
feat(event-dispatcher): add async in-process event bus
…nd FastAPI DI support

- Injects logger into EventDispatcher for subscribe/publish
- Adds Prometheus counters and histogram via @event_handler decorator
- Exposes EventDispatcherDep for FastAPI route injection
- Updates documentation.
feat(event-dispatcher): add structured logging, Prometheus metrics, and FastAPI DI support
…tionListener

Automate conversation management in response to ticket events (created,
assignee updated, escalated, status updated, closed). Conversations are
chained via parent_id/children_ids and indexed with sequential_index.

- Add ConversationListener with handlers for all ticket lifecycle events
- Add append_conversation_to_ticket, end_conversation, and lookup methods
- Add client_id to TicketAssigneeUpdated and TicketEscalated event schemas
- Add Prometheus metrics for listener-created/closed conversations
- Add integration tests for listener and new repository methods
feat(live-chat): add event-driven conversation lifecycle via ConversationListener
…cleanup

Refactor/chatbot typing and cleanup
Make company_id and company_name optional.
Rename pagination field from limit to page_size across the ticket domain to match the documented README
contract and the existing public tests.
feat(ticket): define ticket API contracts
pedro-fs-garcia and others added 29 commits May 1, 2026 18:32
Adds text search through tickets
…coping

Adds case-insensitive substring search over message content, deduplicated
by ticket and ranked by match count. Scope is enforced by role: clients
see only their own conversations, agents see only assigned ones, admins
see all.
feat(live_chat): implement conversation text search
feat(users): Add endpoint to deactivate user
sec(auth): hide sensitive user data from response payloads
fix(chat): improve triage ticket and websocket flow
style: atualiza layout dos templates de e-mail
style: atualiza layout dos templates de e-mail
style: atualiza layout dos templates de e-mail
…e testes

- Substitui `entity.__dict__` por `jsonable_encoder` nos endpoints de CRUD
  de companies e products para evitar `TypeError` ao serializar UUID e
  datetime via `JSONResponse`
- Adiciona `selectinload(User.roles)` em `get_company_users_paginated`
  para evitar `MissingGreenlet` no lazy load do relacionamento em sessão
  async
- Captura `IntegrityError` em `add_products` e `add_companies` e levanta
  `ValueError`, que os routers já traduzem em 404 (em vez de retornar 500
  quando o id referenciado não existe)
- Ajusta `products_id_seq` no seed depois de inserir produtos com `id`
  fixo, evitando 409 na primeira chamada de POST /products
- Remove a migration vazia `ebe6c4a057ea` — as tabelas já são criadas
  pela migration `337ea87962d5`
- Adiciona testes de integração para `CompanyRepository` e
  `ProductRepository` cobrindo CRUD, soft delete, paginação,
  validações de DTO e relacionamentos M2M
- Adiciona testes e2e para `/api/companies` e `/api/products` cobrindo
  CRUD, conflitos, autenticação e os relacionamentos com users e
  companies
feat(auth): include company_id in JWT token payload
@pedro-fs-garcia pedro-fs-garcia merged commit 4ad094a into main May 3, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants