Skip to content

Latest commit

 

History

History
406 lines (275 loc) · 16.2 KB

README_pt-br.md

File metadata and controls

406 lines (275 loc) · 16.2 KB

kenzie_doc_django


Traduções


Sobre

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

diagrama api kenzie_doc_django

Diagrama API kenzie_doc_django

Descrição

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':

User

Model

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.


Patient

Model

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.

Views e permissions

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.

Endpoints

patient/
patient/<str:register_number>/
Obs: para esta versão 'register_number' é case-sensitive.

Professional

Model

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).

Views e permissions

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.

Endpoints

professional/:
professional/&ltstr:council_number&gt/: -> A API transformará o council_number digitado automaticamente para uppercase.
professional/specialty/&ltstr:specialty&gt/: -> A API capitalizará a especialidade digitada automaticamente.


Admin

Model

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.

Views e permissions

AdminView: class view para cadastro (POST) de administrador e listagem de todos os administradores (GET).
Permissions: apenas administradores podem cadastrar e listar outros administradores.

Endpoints

admin/

Address

Model

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.


Appointments

Model

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.

Views e permissions

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.

Endpoints

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>/

Instalação

0. Primeiramente, é necessário já ter instalado na própria máquina:

  • 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

2. Após feito o clone do repositório, instalar:

O ambiente virtual* e atualizar suas dependências com o seguinte comando:

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.

Ative o seu ambiente virtual com o comando:

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

Instalar suas dependências:

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

3. Abrir a aplicação no IDE:

code .

4. E executá-la:

LINUX:

python manage.py runserver

ou

./manage.py runserver

WINDOWS:

py manage.py runserver

Documentação

Para ter acesso ao descrições detalhes das rotas e seus retornos, conferir documentação completa neste link.


Desenvolvedores da API

Pierre Kalil - Techlead


Leonardo Pereira - Product Owner


André Kuratomi - Scrum Master


Keila Passos - Developer


Kaio Iwakiri - Developer


Referências


Termos de uso

Esse projeto atende a fins exclusivamente didáticos e sem nenhum intuito comercial.