A aplicação é uma API no padrão REST que gerencia e automatiza um banco de dados de uma escola. Para isso, foi utilizado o banco de dados relacional SQLite, o padrão MVC e o padrão DAO na construção do projeto.
Para o desenvolvimento da API foi utilizado JavaScript com NodeJS e o framework Express, além do banco de dados relacional SQLite com hospedagem na Heroku.
"dependencies": {
"cors": "^2.8.5",
"dotenv": "^16.0.0",
"express": "^4.18.1",
"heroku": "^7.60.2",
"moment": "^2.29.3",
"path": "^0.12.7",
"sqlite3": "^5.0.6"
}
Todas dependências necessárias estão neste arquivo. Para fazer um clone do projeto basta copiar o código abaixo usando "Ctrl + c" e em seguida colar no terminal com as telas "Ctrl + Shift + v".
git clone https://github.com/hadmoraes/EscolaAPI
Em seguida, entre na pasta EscolaAPI utilizando o seguinte comando no terminal:
cd EscolaAPI
E, por fim, instale todas as dependências necessárias:
npm i
"devDependencies": {
"jest": "^28.0.2"
}
Essas são as dependências necessárias apenas para o ambiente de desenvolvimento da aplicação, caso deseje instalar utilize os comandos abaixo em seu terminal logo após o comando das dependências obrigatórias.
npm i jest --save-dev
Para inicializar a aplicação basta abrir o terminal dentro da pasta do projeto e executar o código abaixo:
npm start
Para rodar os testes das validações da aplicação, basta abrir o terminal dentro da pasta do projeto e executar o código abaixo:
npm run test
A versão NodeJs utilizada para desenvolvimento é a 16.14.2, logo é necessário intalação de versão igual ou superior para a perfeita execução da mesma.
Para construir a API foi necessária a modelagem e construção de um banco de dados. Para isso, utilizamos o site DBDiagram para modelagem de cada entidade e seus respectivos atributos, ilustrados na imagem abaixo.
As entidades que escolhemos foram Docentes, Alunos, Cursos, Turmas e Boletins, em que cada uma contém uma chave primária única. No caso dos Docentes e Alunos, as chaves primárias são seus respectivos CPFs. Já para Cursos, que se refere à série, o nome do curso já especifica unicamente essa entidade, como por exemplo, sexto ano do ensino fundamental. De forma semelhante, a entidade Turmas também tem como nome um código que já especifica unicamente aquela turma, por exemplo, 601 para a primeira turma do sexto ano, 802 para a segunda turma do oitavo ano, etc. Por fim, a entidade Boletins é identificada através do seu id.
Cada entidade representa uma rota em nossa API. Sendo assim, as rotas disponíveis são:
- "/alunos"
- "/docentes"
- "/cursos"
- "/turmas"
- "/boletins"
Acesse as rotas através do link abaixo alterando o nome da rota para a desejada:
https://api--escola.herokuapp.com + /nome da rota
Estamos utilizando a hospedagem da Heroku, portanto, é possível utilizar o link abaixo em todas as rotas e métodos HTTP:
https://api--escola.herokuapp.com
Utilizar o método HTTP Get no caminho: url da api + /alunos
Utilizar o método HTTP Get no caminho: url da api + /alunos/cpf
Utilizar o método HTTP Post no caminho: url da api + /alunos
No corpo da requisição é necessário inserir dados para todos os atributos dessa entidade. Nesse caso são os seguintes campos cpf, nome, email, telefone, data_nascimento.
Especificações dos campos:
- cpf : colocar todos os 11 dígitos juntos sem quaisquer separação e entre aspas duplas
- nome : deve conter no mínimo 3 caracteres e ser inserido entre aspas duplas
- email : deve ser inserido um email válido entre aspas duplas
- telefone : deve ser inserido 11 dígitos, DDD seguido do número, sem quaiquer tipo de separação e entre aspas duplas
- data_nascimento : deve seguir o padrão DD/MM/AAAA entre aspas duplas
Na imagem abaixo temos um exemplo de requisição Post na rota alunos utilizando Insomnia:
Utilizar o método HTTP Put no caminho: url da api + /alunos/cpf
Insira novamente todos os campos presentes na entidade Alunos, da mesma forma que o método anterior para adicionar um aluno, com as modificações desejadas no corpo da requisição.
Na imagem abaixo temos um exemplo de requisição Put na rota alunos utilizando Insomnia:
Utilizar o método HTTP Delete no caminho: url da api + /alunos/cpf
Utilizar o método HTTP Get no caminho: url da api + /docentes
Utilizar o método HTTP Get no caminho: url da api + /docentes/cpf
Utilizar o método HTTP Post no caminho: url da api + /docentes
No corpo da requisição é necessário inserir dados para todos os atributos dessa entidade. Nesse caso são os seguintes campos cpf, nome, email, telefone, salario, disciplinas.
Especificações dos campos:
- cpf : colocar todos os 11 digitos juntos sem quaisquer separação e entre aspas duplas
- nome : deve conter no mínimo 3 caracteres e ser inserido entre aspas duplas
- email : deve ser inserido um email válido entre aspas duplas
- telefone : deve ser inserido 11 dígitos, DDD seguido do número, sem quaiquer tipo de separação e entre aspas duplas
- salario : deve ser inserido sem aspas duplas e os centavos separados por ponto, por exemplo, 1500.65
- disciplinas : todas as disciplinas devem ser inseridas separadas por / e entre aspas duplas, por exemplo, "português/literatura/inglês"
Na imagem abaixo temos um exemplo de requisição Post na rota docentes utilizando Insomnia:
Utilizar o método HTTP Put no caminho: url da api + /docentes/cpf
Insira novamente todos os campos presentes na entidade Docentes, da mesma forma que o método anterior para adicionar um docente, com as modificações desejadas no corpo da requisição.
Na imagem abaixo temos um exemplo de requisição Put na rota docentes utilizando Insomnia:
Utilizar o método HTTP Delete no caminho: url da api+ /docentes/cpf
Utilizar o método HTTP Get no caminho: url da api + /cursos
Utilizar o método HTTP Get no caminho: url da api + /cursos/nome
Utilizar o método HTTP Post no caminho: url da api + /cursos
No corpo da requisição é necessário inserir dados para todos os atributos dessa entidade. Nesse caso são os seguintes campos nome, carga_horaria, preco.
Especificações dos campos:
- nome : se refere as séries presentes nas escola e deve conter no mínimo 3 caracteres e ser inserido entre aspas duplas, por exemplo, "nono ano do ensino fundamental"
- carga_horaria : deve ser inserida um número inteiro com a carga horária total em horas de 1 ano letivo para aquela série sem aspas, por exemplo, 900
- preco : deve ser inserido o valor da mensalidade sem aspas duplas e os centavos separados por ponto, por exemplo, 530.25
Na imagem abaixo temos um exemplo de requisição Post na rota cursos utilizando Insomnia:
Utilizar o método HTTP Put no caminho: url da api + /cursos/nome
Insira novamente todos os campos presentes na entidade Cursos, da mesma forma que o método anterior para adicionar um curso, com as modificações desejadas no corpo da requisição.
Na imagem abaixo temos um exemplo de requisição Put na rota cursos utilizando Insomnia:
Utilizar o método HTTP Delete no caminho: url da api + /cursos/nome
Utilizar o método HTTP Get no caminho: url da api + /turmas
Utilizar o método HTTP Get no caminho: url da api + /turmas/nome
Utilizar o método HTTP Post no caminho: url da api + /turmas
No corpo da requisição é necessário inserir dados para todos os atributos dessa entidade. Nesse caso são os seguintes campos nome, curso_nome, data_inicio, data_final, turno.
Especificações dos campos:
- nome : deve conter no mínimo 3 caracteres e ser inserido entre aspas duplas, exemplo, "901"
- curso_nome : se refere ao atributo nome da entidade Cursos e deve conter no mínimo 3 caracteres e ser inserido entre aspas duplas, por exemplo, "nono ano do ensino fundamental"
- data_inicio : deve seguir o padrão DD/MM/AAAA com aspas duplas
- data_final : deve seguir o padrão DD/MM/AAAA com aspas duplas
- turno : deve ser inserido com aspas duplas e só são aceitos manhã ou tarde, por exemplo, "manhã"
OBS: todos os campos que fazem referência a um atributo presente em outras entidades devem já existir previamente.
Na imagem abaixo temos um exemplo de requisição Post na rota turmas utilizando Insomnia:
Utilizar o método HTTP Put no caminho: url da api + /turmas/nome
Insira novamente todos os campos presentes na entidade Turmas, da mesma forma que o método anterior para adicionar uma turma, com as modificações desejadas no corpo da requisição.
Na imagem abaixo temos um exemplo de requisição Put na rota turmas utilizando Insomnia:
Utilizar o método HTTP Delete no caminho: url da api + /turmas/nome
Utilizar o método HTTP Get no caminho: url da api + /boletins
Utilizar o método HTTP Get no caminho: url da api + /boletins/id
Utilizar o método HTTP Post no caminho: url da api + /boletins
No corpo da requisição é necessário inserir dados para todos os atributos dessa entidade. Nesse caso são os seguintes campos id, docente_cpf, aluno_cpf, turma_nome, disciplina, nota.
Especificações dos campos:
- id : número inteiro que identifica o boletim unicamente. Não é permitido repetição de id, por isso confira antes na rota GET se o id já existe previamente.
- docente_cpf : colocar todos os 11 digitos juntos sem quaisquer separação e entre aspas duplas
- aluno_cpf : colocar todos os 11 digitos juntos sem quaisquer separação e entre aspas duplas
- turma_nome : deve conter no mínimo 3 caracteres e ser inserido entre aspas duplas, exemplo, "901"
- disciplina : deve conter no mínimo 3 caracteres e ser inserido entre aspas duplas, exemplo, "matemática"
- nota : deve ser inserido o valor da nota sem aspas duplas e a casa decimal separada por ponto, por exemplo, 8.5
OBS: todos os campos que fazem referência a um atributo presente em outras entidades devem já existir previamente.
Na imagem abaixo temos um exemplo de requisição Post na rota boletins utilizando Insomnia:
Utilizar o método HTTP Put no caminho: url da api + /boletins/id
Insira novamente todos os campos presentes na entidade Turmas, da mesma forma que o método anterior para adicionar uma turma, com as modificações desejadas no corpo da requisição.
Na imagem abaixo temos um exemplo de requisição Put na rota boletins utilizando Insomnia:
Utilizar o método HTTP Delete no caminho: url da api + /boletins/id