Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Requisitos para módulo de cadastro - Primeira funcionalidade #1

Open
filiperochalopes opened this issue Nov 27, 2024 · 0 comments
Open

Comments

@filiperochalopes
Copy link
Contributor

Requisitos Simplificados para o MVP da Adri

Objetivo do MVP

Desenvolver uma API mínima viável que permita à Clinsite integrar a funcionalidade de agendamento de serviços, mantendo o foco nas funcionalidades essenciais e simplificando o escopo do projeto, incluindo a identificação de múltiplos usuários através de tokens exclusivos.

Funcionalidades Essenciais

1. API de Agendamento com Identificação de Usuários

Contexto: A Clinsite possui vários clientes (usuários), e cada um deles precisa integrar-se à Adri. É necessário que cada usuário seja identificado de forma única ao utilizar a API, garantindo que os agendamentos e configurações sejam gerenciados de forma isolada para cada cliente.

Como um usuário da Clinsite, quero integrar a funcionalidade de agendamento da Adri ao meu sistema, com um token de identificação exclusivo, para que meus clientes possam agendar serviços diretamente através do meu site, e meus dados sejam mantidos separados dos de outros usuários.

Funcionalidades:

  • Autenticação por Usuário:

    • Fornecer um token de acesso exclusivo para cada usuário da Clinsite.
    • Utilizar esse token para identificar e autorizar as requisições feitas à API da Adri.
  • Listar Disponibilidade:

    • Fornecer endpoint para obter os horários disponíveis para agendamento, específicos para cada usuário.
  • Criar Agendamento:

    • Permitir que a Clinsite crie agendamentos em nome dos usuários finais, vinculados ao usuário identificado pelo token.
  • Cancelar Agendamento:

    • Permitir o cancelamento de agendamentos existentes, garantindo que somente o usuário que criou possa cancelar.

Endpoints:

  • GET /disponibilidade/
    Obter horários disponíveis para o usuário autenticado.

  • POST /agendamentos/
    Criar um novo agendamento para o usuário autenticado.

  • DELETE /agendamentos/{id}/
    Cancelar um agendamento do usuário autenticado.

Regras de Negócio:

  • Identificação de Usuários:

    • Cada usuário da Clinsite que tiver o módulo de agendamento Adri receberá um token de API exclusivo.

    • O token deve ser enviado em cada requisição, através de um header de autorização:

      Authorization: Bearer {token}
  • Isolamento de Dados:

    • Os agendamentos, disponibilidades e configurações são específicos para cada usuário.
    • Um usuário não pode acessar ou modificar dados de outro usuário.

2. Configuração Básica de Disponibilidade por Usuário

Como administrador da Adri, quero permitir que cada usuário defina seus próprios horários de funcionamento e duração dos serviços, para que possam controlar quando os usuários finais podem agendar.

Funcionalidades:

  • Horários de Funcionamento por Usuário:

    • Cada usuário pode definir seus próprios dias e horários de funcionamento.
  • Duração dos Serviços por Usuário:

    • Cada usuário pode definir a duração padrão dos seus serviços oferecidos.

Endpoints:

  • GET /configuracoes/horarios/
    Obter horários de funcionamento do usuário autenticado.

  • PUT /configuracoes/horarios/
    Definir ou atualizar horários de funcionamento para o usuário autenticado.

{
    "dias_funcionamento": ["TER", "QUA", "QUI", "SEX"],
    "horario_funcionamento": ["6:30", "18:00"],
    "horario_almoco": ["12:00", 13:00"],
    "intervalo_servico_min": 10
}
  • GET /configuracoes/duracao_servico/
    Obter duração padrão dos serviços do usuário autenticado.

  • POST /configuracoes/duracao_servico/
    Definir duração padrão dos serviços para o usuário autenticado.

Regras de Negócio:

  • Personalização Individual:

    • As configurações de horários e serviços são específicas para cada usuário identificado pelo token.
  • Validação de Dados:

    • Garantir que os horários de funcionamento e duração dos serviços estejam dentro de limites razoáveis.

3. Documentação da API com Autenticação

Como parceiro integrador (Clinsite), quero ter acesso a documentação clara, incluindo como utilizar os tokens de autenticação, para facilitar a integração e o uso da API.

Funcionalidades:

  • Documentação Interativa:
    • Disponibilizar documentação automática dos endpoints (Swagger ou Redoc), incluindo informações sobre autenticação.

Requisitos:

  • Documentação acessível via endpoint (/docs).
  • Exemplos de requisições e respostas, incluindo cabeçalhos de autorização com o token.

Requisitos Técnicos

Tecnologia

  • Linguagem e Framework:

    • Python com FastAPI para construção da API.
  • Ambiente:

    • Utilizar Docker e docker-compose para containerização.
    • Banco de dados SQLite para simplificar o armazenamento (pode ser substituído por PostgreSQL no futuro).

Segurança

  • Autenticação por Token para Cada Usuário:

    • Implementar autenticação via API Keys ou tokens estáticos por usuário.
    • Os tokens serão gerados pela Adri e fornecidos à Clinsite para distribuição aos usuários.
  • Isolamento de Dados:

    • Garantir que cada usuário só possa acessar e modificar seus próprios dados.

Simplicidade e Foco

  • Código Limpo e Simples:
    • Priorizar a clareza e simplicidade no código
    • Utilizar princípios SOLID
    • Evitar funcionalidades complexas ou não essenciais.

Fluxo Básico de Uso

  1. Usuário Recebe Token de Acesso:

    • Cada usuário da Clinsite recebe um token exclusivo fornecido pela Adri.
  2. Clinsite Consulta Disponibilidade:

    • Faz uma requisição GET /disponibilidade/ com o token no header de autorização, para obter os horários disponíveis do usuário autenticado.
  3. Usuário Final Seleciona Horário:

    • O usuário final escolhe um horário para agendar pela interface Clinsite
  4. Clinsite Cria Agendamento:

    • Faz uma requisição POST /agendamentos/ com o token e as informações necessárias (horário, dados do usuário final).
  5. Confirmação do Agendamento:

    • A API confirma o agendamento e retorna os detalhes.

Considerações Finais

Este MVP atualizado foca nas funcionalidades essenciais para permitir que a Clinsite integre o agendamento de serviços através da Adri, garantindo a identificação e isolamento de dados de cada usuário através de tokens exclusivos. A inclusão de autenticação por usuário é fundamental para atender ao cenário em que a Clinsite possui vários usuários integrando-se à Adri.


Próximos Passos

  1. Gerenciamento de Tokens de Usuário:

    • Implementar um mecanismo simples para gerar e gerenciar tokens de acesso para cada usuário da Clinsite.
    • Fornecer um meio seguro para a Clinsite distribuir os tokens aos usuários.
  2. Desenvolvimento dos Endpoints com Autenticação:

    • Implementar os endpoints listados, garantindo que todos exijam o token de autenticação e que os dados sejam isolados por usuário.
  3. Documentação e Testes:

    • Atualizar a documentação para incluir informações sobre como utilizar os tokens de autenticação.
    • Realizar testes para verificar a segurança e o correto isolamento dos dados entre usuários.
  4. Feedback com a Clinsite:

    • Compartilhar o MVP com a equipe da Clinsite para testes e feedback, especialmente sobre o fluxo de autenticação e integração multiusuário.

Nota: Ao adicionar a autenticação por usuário, estamos garantindo que cada cliente da Clinsite tenha acesso exclusivo aos seus dados, o que é essencial em um cenário multiusuário. Mantemos a simplicidade do MVP, mas com a funcionalidade necessária para suportar múltiplos usuários de forma segura e eficaz.

Roadmap

  • A Adri pretende ter funcionalidade de LLM para agendamento, através de chat
  • A Adri pretende integrar métodos de pagamento com interface própria para integração e pagamento via Stripe com divisão de recursos e transferência apenas quando o serviço concluir
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

No branches or pull requests

1 participant