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

Updating to java 21 #25

Merged
merged 20 commits into from
Oct 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"java.configuration.updateBuildConfiguration": "automatic"
}
136 changes: 96 additions & 40 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,72 +1,128 @@
# Ambiente de Estudo ao Pensamento Computacional 1.0
# 📚 ComPensar

## Iniciando
**Ambiente de Estudo ao Pensamento Computacional 1.1**

Essas instruções vão ajudar você a utilizar o projeto e rodar em sua máquina local para desenvolvimento e testes.
**ComPensar** é uma plataforma voltada para auxiliar o ensino de **Pensamento Computacional (PC)** no contexto da educação básica, com foco na resolução de problemas matemáticos. O sistema oferece ferramentas que permitem a criação, avaliação e publicação de questões alinhadas com as competências do PC, promovendo o desenvolvimento do raciocínio lógico e da capacidade de abstração dos alunos.

### Pré-Requisitos
O Pensamento Computacional é uma habilidade fundamental na educação moderna, pois facilita a aplicação de técnicas e conceitos computacionais para resolver problemas de diversas áreas, incluindo a matemática. Através do ComPensar, educadores podem avaliar o progresso dos alunos em competências essenciais como a decomposição de problemas, reconhecimento de padrões, abstração e criação de algoritmos.

É necessário que você execute os comandos contidos no seguinte arquivo para utilizar um banco de dados MongoDB. Pode ser utilizado ainda uma interface MongoDB, como o Robo3T, para melhor interação com os dados.
## ⚙️ Tecnologias utilizadas

```
aepc/backend/src/main/resources/import.sql
```
| Tecnologia | Versão |
| --------------------------------- | ------- |
| [Node.js](https://nodejs.org/en/) | v22.2.0 |
| [Java](https://www.java.com/) | v21 |
| Spring Boot | v3.3.3 |
| MongoDB | v7.0.2 |

### Executar
Para executar o projeto execute como JavaApplication a seguinte classe:
## 🚀 Como levantar o projeto?

```
aepc/backend/src/main/java/springboot/AepcApplication.java
```
- **Clone o repositório:**

## Testando a Aplicação
```bash
git clone https://github.com/ufcg-lsd/compensar-legacy.git
```

### Segurança
### Frontend

A segurança nos endpoints está implemetada utilizando HTTP Basic e busca dos usuários no banco de dados utilizando o serviço que implementa UserDetailsService, do Spring Security. Cada usuário possui uma determinada permissão.
1. **Instale as dependências:**

Usuários para testes pré-defindos com um tipo de permissão se encontram também no seguinte arquivo:
```bash
cd frontend
npm install
```

```
aepc/backend/src/main/resources/import.sql
```
2. **Execute a aplicação:**

Obs.: Há endpoints específicos para criação de um usuário, e de adição de uma permissão a um usuário (Mais a frente)
```bash
npm start
```

### Backend

Para login e acesso aos endpoints, é utilizado o email e senha de três digitos. No mesmo arquivo se encontram a inserção de alguns usuários exemplo.
1. **Instale as dependências:**

```bash
cd backend
mvn clean install # Se os testes falharem e você queira rodar assim mesmo, adicione a flag -DskipTests
```

### API REST
Para obter uma visualização interativa da API com os endpoints acesse, localmente, o seguinte endereço:
2. **Execute a aplicação:**

```
http://localhost:8080/swagger-ui.html
```
```bash
mvn spring-boot:run
```

É possível realizar requisições para testar os endpoints utilizando a interação citada acima, se preferir, existem outras ferramentas (Ex.: Postman).
## 🛠️ Arquitetura

### Endpoint Base
Abaixo está o diagrama da arquitetura geral da aplicação:

```
http://localhost:8080/api/...
```
![Diagrama de Arquitetura](./docs/images/architecture-diagram.png)

### Testes de Unidade
### Diagrama de Caso de Uso

Para execução dos testes de unidade execute como JunitTest o seguinte pacote:
O diagrama de caso de uso ilustra as interações entre os usuários e o sistema:

![Diagrama de Caso de Uso](./docs/images/use-case-diagram.png)

### 📚 Documentação Adicional

Para mais detalhes sobre a aplicação, como a listagem completa dos requisitos funcionais e não funcionais, acesse a pasta [**/docs**](./docs). Você pode explorar os seguintes conteúdos:

- [Listagem de Requisitos](./docs/requirements.md)


<!-- ## 🧪 Como testar

1. **Testes unitários:**

```bash
npm test
```

2. **Cobertura de testes:**

```bash
npm run coverage
```

3. **Testes end-to-end:**
```bash
npm run e2e
``` -->

## 🏗️ Estrutura de pastas

```plaintext
├── frontend # Diretório contendo o projeto AngularJS (Está pra ser reescrito em Next.JS em outro repositório)
├── backend # Diretório contendo o projeto Spring
```
aepc/backend/src/test/java/springboot/aepcinitializr
```

## Construído Com
<!-- ## 📄 Licença

Este projeto está sob a licença [MIT](LICENSE).

### Dicas Adicionais:

* [SpringBoot](https://spring.io/projects/spring-boot) - O Framework Web usado
* [Maven](https://maven.apache.org/) - Gerenciamento de dependências
* [Swagger](https://swagger.io/) - Construção de API
1. **Badges**: Você pode adicionar badges no topo para status do build, cobertura de testes, últimas versões, etc.
2. **Screenshots**: Inclua capturas de tela para ilustrar o funcionamento da aplicação.
3. **Guia de Contribuição**: Se você espera contribuições externas, inclua uma seção explicando como as pessoas podem contribuir. -->

## Variáveis que possivelmente precisarão de modificação
- URI do mongodb:
`spring.data.mongodb.uri` em `backend/src/main/resources/application-<dev_or_prod>.properties`

> P: "Mas eu substituo pelo quê?"
>
> R: Se por algum motivo não conseguir acesso ao BD, colocar o uri do (novo) banco de dados que queira apontar.


- Google Sign-In Client ID:
- backend: `CLIENT_ID` na classe `GoogleIdVerifier`
- frontend: frontend > index.html em dois lugares
- `<meta name="google-signin-client_id" content="<aqui>" data-callback="onSignIn" />`
- `<div id="g_id_onload" data-client_id="<aqui>" />`

> P: "Mas eu substituo pelo quê?"
>
> R: Se por algum motivo a autenticação não funcionar, talvez as credenciais estejam vencidas ou inacessíveis por algum motivo. Nesse caso, criar novas usando o Google Cloud e substituir.
116 changes: 39 additions & 77 deletions backend/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,17 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<version>3.3.3</version>
<relativePath />
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<java.version>21</java.version>
</properties>

<dependencies>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
Expand All @@ -35,48 +34,14 @@
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<!-- Security oauth dependency -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.3.4.Final</version>
</dependency>
<!-- Springboot Starter security dependency -->

<!-- Hibernate OGM MongoDB dependency -->
<dependency>
<groupId>org.hibernate.ogm</groupId>
<artifactId>hibernate-ogm-mongodb</artifactId>
<version>5.3.1.Final</version>
</dependency>
<!-- Starter-Web dependency -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Security dependency -->

<!-- MongoDB dependency -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>3.3.0</version>
</dependency>
<!-- Spring Security confing dependency -->

<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- Devtools dependency -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
Expand All @@ -94,64 +59,63 @@
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.30.2</version>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
</dependency>
<!-- Hibernate Validator -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<!-- Hibernate OGM MongoDB -->
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
<groupId>org.hibernate.ogm</groupId>
<artifactId>hibernate-ogm-mongodb</artifactId>
<version>5.4.1.Final</version>
<exclusions>
<exclusion>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.6.0</version>
</dependency>

<!-- Google API Client -->
<dependency>
<groupId>net.htmlparser.jericho</groupId>
<artifactId>jericho-html</artifactId>
<version>3.1</version>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.33.0</version>
</dependency>
<!-- Jericho HTML Parser -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
<groupId>net.htmlparser.jericho</groupId>
<artifactId>jericho-html</artifactId>
<version>3.4</version>
</dependency>

<!-- JJWT (JSON Web Token) -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-bean-validators</artifactId>
<version>2.9.2</version>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.2.0.RELEASE</version>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-core</artifactId>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>


</dependencies>

<build>
Expand All @@ -162,6 +126,4 @@
</plugin>
</plugins>
</build>


</project>
Loading