BackendEm desenvolvimento2025

API de Agendamento Multitenant

Sistema de agendamento com isolamento multitenant, autenticação JWT e cache com Redis, pensado para negócios como clínicas e barbearias.

Visão Geral

API RESTful projetada para gerenciar agendamentos em um modelo multitenant, onde cada inquilino possui isolamento completo de dados. A autenticação é feita via JWT com refresh token, e o cache com Redis reduz a latência em consultas frequentes. O sistema foi construído com Spring Boot 3 e segue princípios de Clean Architecture.

Problema Resolvido

Pequenos negócios como clínicas e barbearias enfrentam dificuldade em gerenciar agendamentos de forma eficiente. Sistemas genéricos não atendem necessidades específicas e soluções enterprise são caras demais.

Objetivos

Fornecer uma API escalável para múltiplos inquilinos
Garantir isolamento total de dados entre inquilinos
Reduzir tempo de resposta com cache inteligente
Oferecer documentação clara via Swagger/OpenAPI

Arquitetura

Arquitetura em camadas seguindo Clean Architecture: Controllers → Services → Repositories. O multitenancy é implementado via schema isolation no PostgreSQL, onde cada inquilino possui seu próprio schema. O Redis atua como cache distribuído para consultas de horários disponíveis e dados de perfil.

Fluxo dos Dados

O cliente autentica via JWT → a requisição é interceptada por um filtro que identifica o inquilino → o controller valida os dados → o service aplica as regras de negócio → o repository persiste no schema do inquilino → a resposta é retornada com dados cacheados quando aplicável.

Funcionalidades

Autenticação JWT com refresh token
CRUD completo de agendamentos
Isolamento multitenant por schema
Cache com Redis para consultas frequentes
Validação de disponibilidade em tempo real
Documentação interativa com Swagger
Tratamento global de exceções
Testes automatizados com JUnit e Mockito

Tecnologias

Java 17
Spring Boot 3
PostgreSQL
Redis
Docker

Desafios

Implementar o isolamento multitenant sem comprometer a performance das consultas
Gerenciar conexões concorrentes com cache distribuído
Garantir que a migração de schemas seja automatizada e consistente

Aprendizados

Aprofundamento em estratégias de multitenancy, uso avançado de Spring Security com JWT, e otimização de consultas com Redis. Aprendi a importância de planejar o isolamento de dados desde o início da arquitetura.

Próximos Passos

Adicionar WebSockets para notificações em tempo real
Implementar fila de processamento assíncrono com RabbitMQ
Criar dashboard administrativo para gestão de inquilinos

Gostou do projeto?

Vamos conversar sobre como posso ajudar no seu próximo projeto.