Este projeto é uma API desenvolvida em Java cujo objetivo é prover funcionalidades para um sistema de uma biblioteca virtual de materiais acessíveis. Ele foi construído para ser escalável, fácil de utilizar e de manter.
Você pode acessar o sistema web desenvolvido através do seguinte link: Acervo Inclusivo
- Java 24: Linguagem de programação utilizada para o desenvolvimento da API.
- Maven 3.6.3: Gerenciador de dependências utilizado para facilitar o gerenciamento do projeto.
- MySQL: Sistema de gerenciamento de banco de dados utilizado para armazenar os dados da aplicação.
- Docker: Utilizado para criar um ambiente isolado e consistente para o banco de dados MySQL.
- Next.js: Framework utilizado para o desenvolvimento do front-end, proporcionando uma experiência de usuário dinâmica e responsiva.
Certifique-se de ter os seguintes requisitos instalados para executar o projeto:
- Java SDK 24 ou superior para compilar e executar o código
- Maven 3.6.3 ou superior para gerenciamento de dependências
Para o funcionamento correto do projeto, é necessário adicionar as credenciais do Firebase. Para isso, crie na raiz projeto um arquivo .env com as seguintes variáveis de ambiente:
FIREBASE_TYPE=service_account
FIREBASE_PROJECT_ID=api-bibliotech
FIREBASE_PRIVATE_KEY_ID=c7947f8ec182fcf8c7aea7381b7e2f10ea50ff4e
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCdLqaZN7k78FsX\nkYwfCQRRs3rBMzBqMXMCSgfiR6UilTcQbNqkhWfPIf9Kcvrkkuy78zZDBYy0ASqf\nPgDd0fMdpztVuOAgfdMnz+MCRjpavVwe4lZZQIbTDl911KzXT40Yvu91Y+GGX+1l\n0eLtfRpgktyqAGcbK+KMrCjzeqmCN1Z54pw8djptCK1/q3zCvoaabh7ry76xegUH\nFdwdrxJMvJHiqdCrM20jakzXUYlqt/rZEMkjk4LtbszAN5pJA3zIGCAxM0b6UHoU\nfsQ+3Vj+j1Bfxuc4LP15sX3ek+OD3h84St3wmnc836p2WbpczDut225HWQmq1Tkm\nAVfMqNbtAgMBAAECggEAA0UDZ6gCVSYaivq21rVuDtIEMW0iam8VZJyMHe+eFoJS\nlyegg7AXuPYM1KxgHi2VOZKlVA8TPnJQw+e7BmI1463FHPMfzGU5pXgcUYGK+LS8\nLBNKtwgR1eWUZEPUhZUMyxE7s24stIodytKrHQQPbqdXajzgaC8JQyJYprnsOT5r\nlqr4l2Spi4Enp0FVslUhjphPTgsYdDo+H6Q1wCncnNv6QCRxJXi0bAIrWvzv4aFo\n1WnEasmJ7/0xnitgzIj8aT6Ol1+ad5Z/B4YvJo8PE9iSG1hMqxB5pdXvsBfrBFi+\nYZWRPNG+86ZAG++I069/S/P42v4YMQYtPmz9qcSZeQKBgQDQ2/4VOvjnP24h+KC+\naA5CCCFgOEPimeDZhWHrqnZM/eb9DVrAbgVsFZM17rgwA1FsQPUJqZ8pfumD7TPp\nuhJB2e45DcH8vScxr0FqH++8Ms2srKf0neK6d9ckHuTxwABlMpI3u20hY/G0VNiN\n6/brGSscMGZLtUIVAryFuX61eQKBgQDAqLnl6ROc2mBxQRf913VG1FTutVVYfK83\nQ9vFMGVFbkWHSkOB3bfcBSNPNwnzqGn9qAEdN/SuxoVbuPW0nLDsZG2he5Je0ARo\nXL/IrnOemQa08ef4fyDEnY8jPPbMiJ4SOG7t9qWz2qzwUk1XlyC24woGUwyfO+Dt\nqRHR4qqUFQKBgBPWoZbAqD3G354ocJRFa/1HqmvqTEBs31ep/LgW0+/SOiuVJiab\nDLbMgdQgnawp1IUU0nGdg/m8DVAzqrerrepFWgRfUyq/iMaGYA9Fg078AF9Dcxyg\nFpYhpfTPXm28EA2MtSjIC8CdLqszV/J7FFQWaurdigns6J74SJHnIar5AoGACpd8\nGOK2fFIZKUDN49u7i9hSjwkTFxlLvLsTUwT1HFsSoXx4t6QL3qG9rjY1atrgcNyS\nqxuPbShm3oMNpw9SPrzKti0IAARpqZ8nwA2vN5HsJ3iBK0057PVIkERiwR3lqtTF\nbHm55GhqR5AOxnj9iHB09aINOJffJtG7tBFFFX0CgYB2cKIPJ/6L9tH/fYiDEuQg\nh6pRjLccBXstJXxIjDVB317pbfg/RvVgUku522tqItU+CbwIgz7PNUnNhzyU/zKk\ny3KF+4yF0BoNyHCrFn2EQcPbAaxLDsNOidLbyLWQyEuw1FtVNqPmp/M3nPNVyW1A\npY/SXdOHJOWBxu1Y36bE0w==\n-----END PRIVATE KEY-----"
FIREBASE_CLIENT_EMAIL=firebase-adminsdk-fbsvc@api-bibliotech.iam.gserviceaccount.com
FIREBASE_CLIENT_ID=102964200623220324609
FIREBASE_AUTH_URI=https://accounts.google.com/o/oauth2/auth
FIREBASE_TOKEN_URI=https://oauth2.googleapis.com/token
FIREBASE_AUTH_PROVIDER_CERT_URL=https://www.googleapis.com/oauth2/v1/certs
FIREBASE_CLIENT_CERT_URL=https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-fbsvc%40api-bibliotech.iam.gserviceaccount.com
FIREBASE_UNIVERSE_DOMAIN=googleapis.com
FIREBASE_STORAGE_BUCKET=api-bibliotech.firebasestorage.appCopie e cole as credenciais no arquivo .env criado na raiz do projeto. Essas credenciais são necessárias para a integração com o Firebase, utilizado para o armazenamento de arquivos.
É necessário também adicionar ao .env as variáveis do banco de dados, aidione também este código ao arquivo .env:
DB_USER=avnadmin
DB_PASSWORD=AVNS_IE6kQ6tSruZplEe08q5Para facilitar os testes, foram criados alguns usuários de exemplo. Você pode utilizar as seguintes credenciais:
-
Vinculo: Aluno
-
matricula: 2024005
-
senha: minhasenha
-
Vinculo: Bibliotecário
-
SIAP: 852
-
senha: minhasenha
Abaixo está a estrutura de organização do projeto:
api-bibliotec
├── src
│ ├── controller/ -> Controladores REST
│ ├── dao/ -> Acesso e manipulação do banco de dados
│ ├── db/ -> Configuração do banco de dados
│ ├── dto/ -> Objetos de Transferência de Dados
│ ├── exception/ -> Exceções personalizadas
│ ├── entity/ -> Modelos de dados
│ ├── service/ -> Lógica de negócios
│ ├── type/ -> Tipos de dados
│ ├── util/ -> Utilitários
│ └── Server.java -> Classe principal do projeto
├── pom.xml -> Arquivo de configuração do Maven
├── docker-compose.yml -> Arquivo de configuração do Docker
└── README.md -> Documentação do projeto
Siga as etapas abaixo para executar o projeto localmente:
-
Clone o repositório:
git clone git@github.com:emerss001/api-bibliotech.git cd api-bibliotech -
Configure as dependências do projeto:
mvn clean install
-
Execute o arquivo principal(Server.java):
-
se estiver usando IntelliJ IDEA:
clique com o botão direito emServer.javae escolha RunServer.main(). -
Se estiver usando Eclipse:
clique com o botão direito emServer.javae escolhaRun As > Java Application. -
Se estiver usando Terminal:
mvn clean compile exec:java
- O aplicativo estará disponível no endereço:
Utilize aplicativos para testes como Postam ou Insomnia, ou até mesmo o navegador, para interagir com a API.
http://localhost:8888
Siga as etapas abaixo para executar o projeto localmente:
Acesse o repositório do frontend: https://github.com/emerss001/bibliotech
- Clone o repositório:
git clone https://github.com/emerss001/bibliotech.git cd bibliotech - Instale as dependências do projeto:
npm install
- Inicie o servidor:
npm run dev
- Acesse o aplicativo no navegador:
http://localhost:3000
A seguir estão os principais endpoints da API:
POST /cadastro
{
"nome": "Emerson Neves",
"email": "fdfdf@gmail.com",
"senha": "minhasenha",
"vinculo": "PROFESSOR", // (ou "ALUNO" ou "BIBLIOTECARIO")
"matricula": "202501GT078", // (Quando for aluno)
"siap": "123456789", // (Quando for professor)
"codigo": "852", // (Quando for bibliotecário)
"idNecessidade": 1 // (quando for aluno)
} POST /login
{
"vinculo": "BIBLIOTECARIO", // (vinculo do usuário)
"email": "fdfdf@gmail.com",
"senha": "minhasenha",
} GET /protegida/materials
- Toda rota que possuir o prefixo
/protegidarequer autenticação. Nesse caso, token gerado no login deve ser passado no campoAuthorizationdo cabeçalho da requisição.