- Traduções
- Sobre
- Diagrama
- Descrição
- Instalação
- Documentação
- Desenvolvedores da API
- Referências
- Termos de uso
A API kenzie_doc_django se propõe a cadastrar médicos e pacientes na plataforma possibilitando o agendamento de consultas de maneira simples e intuitiva, além de fazer a gestão de consultas agendadas e da lista de espera.
A aplicação também possibilita ao paciente fazer uma busca pelo profissional mais adequado para sua necessidade e agendar a consulta de forma confortável, prática e rápida.
kenzie_doc também faz o envio de emails tanto para o paciente quanto para o profissional quando a consulta é agendada, alterada, finalizada ou mesmo cancelada. O mesmo para mensagens de whatsapp.
Esta aplicação utiliza a linguagem Python, seu framework Django e o banco de dados SQLite3. Para o envio de emails é usada a funçaõ nativa de Django sendmail e para o envio de menssagens whatsapp a lib PyWhatKit.
Diagrama API kenzie_doc_django
A seguir uma breve descrição de cada tabela exibida acima, suas permissões (permissions) e seus endpoints:
Por causa do contexto desta API trabalhar com 3 diferentes tipos de usuário que logam nela e executam operações diferentes decidiu-se por utilizar User models personalizadas. As user models usadas são 'User', 'Patient', 'Professional' e 'Admin':
A User model poderia ser descrita como o metausuário da API. Para esta API ela foi desenvolvida para ser a model que possui os campos que todas as models relacionadas tem em comum. As user models possuem relacionamento OneToOne com ela.
Esta model também tem relacionamento OneToMany com a model Address que será tratada mais para frente.
User não possui suas próprias views e endpoints.
A model patient possui relacionamento OneToOne com a model User e se define como tendo os campos 'is_admin' e 'is_prof' em User como False. Seu campo específico é a 'register_number', uma string com 6 letras (case-sensitive), 1 hyphen e 1 número. Este campo é gerado após o cadastro do novo usuário. PatientsView: class view para cadastro do paciente (POST) e listagem de todos os pacientes cadastrados (GET).
Permissions: qualquer usuário pode se cadastrar como paciente, mas apenas administradores podem listar todos os pacientes.
PatientByIdView: class view para listagem (GET), atualização de dados (PATCH) e deleção (DELETE) de um paciente pelo id (register_number).
Permissions: qualquer administrador e o próprio paciente podem listar dados do paciente e atualizar alguns deles, mas apenas os administradores podem deletar o usuário.
patient/<str:register_number>/
Obs: para esta versão 'register_number' é case-sensitive.
A model professional tem relacionamento OneToOne com a model User e pode ser definida na model User como tendo apenas o campo 'is_prof' como True. Seus campos específicos são:
1. 'council_number', uma string com 4 dígitos, 1 hyphen e 2 letras geradas pelo CEP do profissional (ver mais adiante) e
2. 'specialty' (especialidade). ProfessionalsView: class view para cadastro do profissional (POST) e listagem de todos eles (GET).
Permissions: apenas admins podem cadastrar e listar profissionais.
ProfessionalByIdView: class view para listagem (GET), atualização (PATCH) e deleção (DELETE) de dados de um profissional por 'council_number'.
Permissions: qualquer administrador logado ou o próprio profissional podem listar e atualizar alguns campos dos próprios dados, mas apenas administradores podem deletá-los.
Obs: se o usuário permitido atualizar o CEP do profissional para um estado diferente o final da council_number será automaticamente atualizado para o estado correspondente.
ProfessionalBySpecialtyView: class view para listar todos os profissionais registrados na especialidade procurada.
Permissions: qualquer usuário logado pode fazer esta busca.
professional/:
professional/<str:council_number>/: -> A API transformará o council_number digitado automaticamente para uppercase.
professional/specialty/<str:specialty>/: -> A API capitalizará a especialidade digitada automaticamente.
A model do administrador (secretária) tem relacionamento OneToOne com a model User e pode ser definida na model User como tendo apenas o campo 'is_admin' como True. Nesta versão ela não possui campo específico. AdminView: class view para cadastro (POST) de administrador e listagem de todos os administradores (GET).
Permissions: apenas administradores podem cadastrar e listar outros administradores. admin/
A model address possui relacionamento OneToMany com a model User. Ela tem apenas dois campos de preenchimento obrigatório: house_number e post_code (CEP).
Esta model utiliza a biblioteca brasiliera brazilcep que fornece todos os campos opcionais 'street', 'city', 'state' se o CEP for fornecido. Esta lib é utilizada tanto para registro do endereço do usuário quanto para o council_number do profissional:
Ex: se o administrador digitar '9876' para o council_number e digitar '20031-170' para o CEP a response será '9876-RJ'.
Assim como User, address não possui suas próprias views e endpoints.
A model appointment (consulta) possui relacionamento ManyToOne tanto para Patients quanto para Professionals. Ambos podem ter várias consultas, mas cada uma tem apenas um paciente com um profissional.
CreateAppointment: class view para agendamento de consulta (POST).
Permissions: Apenas administradores podem agendar uma consulta.
SpecificAppointmentView: class view para listagem, atualização e deleção de uma consulta por ID.
Permissions: Apenas administradores podem operar nesta view.
SpecificPatientView: class view para listagem das consultas de um paciente pelo seu register_number (GET).
Permissions: Apenas o próprio paciente ou administradores podem listar essas consultas.
SpecificProfessionalView: class view para listagem das consultas de um profissional pelo seu council_number (GET).
Permissions: Apenas o próprio profissional ou administradores podem listar essas consultas.
NotFinishedAppointmentsView: class view para a fila de espera do dia.
Permissions: Apenas administradores podem listar a fila de espera.
ProfessionalAppointmentsTodayView: class view para as consultas do profissional não finalizadas do dia.
Permissions: Apenas administradores podem listar as consultas em aberto do dia.
NotFinishedAppointmentsView: class view para a fila de espera do dia por profissional. É retornada uma mensagem como esta: .
"msg": "There are 2 patients waiting for their appointments with Dr. Jefferson today. The average waiting time is ca 2 hours and 0 minutes"
Permissions: Apenas administradores podem retornar a duração da fila de espera.
FinishAppointmentView: class view para finalizar uma consulta pelo seu ID (PATCH).
Permissions: Apenas administradores podem finalizar uma consulta.
Obs: Todas as operações nestas views com POST, PATCH e DELETE possuem notificações configuradas para serem enviadas para os emails e números de whatsapp do paciente e do profissional automaticamente.
appointments/appointments/professional/<str:council_number>/
appointments/<str:appointment_id>/
appointment_finish/<str:appointment_id>/
appointments/patient/<str:register_number>/
appointments/open_24/<str:council_number>/
appointments/open/<str:council_number>/
-
O versionador de codigo Git.
-
A linguagem de programação Python.
-
Um editor de código, conhecido também como IDE. Por exemplo, o Visual Studio Code (VSCode).
-
Uma ferramenta cliente de API REST. Por exemplo, o Insomnia ou o Postman.
-
E versionar o diretório escolhido para receber o clone da aplicação:
git init
1. Fazer o clone do reposítório kenzie_doc_django na sua máquina pelo terminal do computador ou pelo do IDE:
git clone https://github.com/AndreKuratomi/kenzie_doc_django.git
WINDOWS:
Obs: Caso apareca algum erro semelhante a este:
unable to access 'https://github.com/AndreKuratomi/kenzie_doc_django.git': SSL certificate problem: self-signed certificate in certificate chain
Configure o git para desabilitar a certificação SSL:
git config --global http.sslVerify "false"
Entrar na pasta criada:
cd kenzie_doc_django
LINUX:
python3 -m venv venv --upgrade-deps
WINDOWS:
py -m venv venv --upgrade-deps
Caso seja retornado algum erro semelhante a este basta seguir as instruções:
The virtual environment was not created successfully because ensurepip is not
available. On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.
apt install python3.10-venv
You may need to use sudo with that command. After installing the python3-venv
package, recreate your virtual environment.
*É interessante seguir esta prática porque diferentes projetos exigem diferentes dependências. Um ambiente virtual nada mais é do que um ambiente separado da sua máquina. Caso contrário, a máquina do usuário pode se encher de dependências que serão utilizadas apenas em um único projeto.
LINUX:
source/venv/bin/activate
WINDOWS:
No sistema operacional Windows é necessário antes configurar o Execution Policy do PowerShell:
Get-ExecutionPolicy # para verificar o tipo de política de execução
Set-ExecutionPolicy RemoteSigned # para alterar o tipo de política se o comando acima mostrar 'Restricted'
Obs: Eventualmente, pode ser necessário abrir o PowerShell como administrador.
.\venv\Scripts\activate
pip install -r requirements.txt
WINDOWS:
Caso seja retornado algum erro semelhante a este:
ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: 'C:\\Users\\andre.kuratomi\\OneDrive - Company\\Área de Trabalho\\kenzie_doc_django\\kenzie_doc_django\\env\\Lib\\site-packages\\jedi\\third_party\\django-stubs\\django-stubs\\contrib\\contenttypes\\management\\commands\\remove_stale_contenttypes.pyi'
HINT: This error might have occurred since this system does not have Windows Long Path support enabled. You can find information on how to enable this at https://pip.pypa.io/warnings/enable-long-paths
Rode no cmd como adminstrador o seguinte comando:
reg.exe add HKLM\SYSTEM\CurrentControlSet\Control\FileSystem /v LongPathsEnabled /t REG_DWORD /d 1 /f
code .
LINUX:
python manage.py runserver
ou
./manage.py runserver
WINDOWS:
py manage.py runserver
Para ter acesso ao descrições detalhes das rotas e seus retornos, conferir documentação completa neste link.
- Django
- Django Rest Framework
- Generic views
- Git
- Insomnia-documenter
- Insomnia-documenter (quick tutorial)
- Python
- PyWhatKit
- sendmail
- SQLite3
- Visual Studio Code (VSCode)
Esse projeto atende a fins exclusivamente didáticos e sem nenhum intuito comercial.