Como atender clínicas, restaurantes e salões com um único sistema de reservas?
Share

In this article
Modele uma entidade genérica de reserva e permita que cada segmento a estenda com um payload tipado: um registro de paciente, um pedido de mesa ou uma seleção de serviço. Os motores de reserva, notificação e faturamento permanecem agnósticos ao segmento, assim, apenas o esquema de extensão muda por segmento e a base de código nunca se divide.
Por que não criar um fluxo de reserva separado para cada segmento?
Clínicas agendam consultas, restaurantes recebem pedidos de mesa e salões vendem horários de serviço, então cada um parece um produto diferente. Dividir por segmento triplica o código de reserva, WhatsApp e faturamento, fazendo com que cada correção precise ser aplicada três vezes. As partes compartilhadas são as mesmas; apenas o objeto principal difere.
Como é uma entidade genérica de reserva?
Uma reserva base com os campos compartilhados (negócio, cliente, horário, status) mais um payload tipado por segmento: um registro de paciente para clínicas, um pedido de mesa e menu para restaurantes, uma seleção de serviço para salões. Os motores operam sobre a base; o código do segmento apenas lê e escreve seu payload.
Como evitar a reserva dupla de um horário?
Dê a cada horário um campo de versão. Se dois clientes tentarem reservar em milissegundos, a gravação que perder recebe um conflito em vez de uma sobrescrição silenciosa e tenta novamente contra o estado atual do horário. As gravações de horário são rápidas e raramente contestadas, então o bloqueio otimista é melhor que um bloqueio mantido durante toda a requisição.
Como evitar que um negócio com limite de taxa atrase o resumo semanal de todos?
Execute a sincronização do Google Business Profile e a geração do resumo como tarefas em uma fila RabbitMQ com um consumidor por negócio, cada um com seu próprio backoff. Um limite de taxa em uma conta atrasa apenas a tarefa dessa conta. Snapshots da última sincronização e contadores de limite por negócio ficam no Redis.
Publicado originalmente em sakshamjain.codes/blog/one-booking-engine-for-clinics-restaurants-salons. Precisa disso implementado? Veja meus serviços em NexoRush ou envie uma mensagem.