O que você vai construir
Um SaaS (Software as a Service) é software usado a partir da nuvem por assinatura: muitas pessoas e muitas empresas compartilham a mesma aplicação e o mesmo banco de dados. Isso levanta o desafio central deste capstone: que cada cliente veja apenas o que é seu.
Multi-tenancy
Cada conta de cliente é um tenant (inquilino). Em um modelo
multi-tenant, uma única instância da sua aplicação serve todos os tenants,
e os dados convivem nas mesmas tabelas. A peça chave é uma coluna como
tenant_id que rotula cada linha com o dono ao qual ela pertence.
// Uma linha da tabela "projetos"
{ id: 3, tenant_id: 1, nome: "App mobile da Acme" }
Por que isolar por tenant
Se uma consulta esquecer de filtrar por tenant_id, um cliente poderia ver ou
modificar os dados de outro. É a falha de segurança mais grave (e mais comum)
de um SaaS. Por isso, toda leitura e escrita deve ser delimitada ao tenant da
requisição:
SELECT * FROM projetos WHERE tenant_id = :tenantAtual;
Não é opcional nem uma otimização: é a fronteira de segurança do seu produto.
As camadas que você vai tocar
O capstone integra toda a stack que você aprendeu no DevPath. Você vai construir, em ordem:
- Dados (SQL): a consulta que retorna apenas os projetos de um tenant.
- Backend (JS): um handler que encadeia o pipeline de uma requisição.
- Operação (JS): um checklist de produção e a configuração por ambiente.
- UI (React): um painel que mostra as métricas do SaaS.
Cada peça é pequena; juntas, são uma aplicação pronta para ser lançada.