{"id":19653193,"url":"https://github.com/didifive/ess-api","last_synced_at":"2026-04-13T04:03:42.219Z","repository":{"id":225689260,"uuid":"766578008","full_name":"didifive/ess-api","owner":"didifive","description":"API para aplicativo de escola com cadastro e controle de estudantes, cursos, turmas, matérias, matrículas e notas","archived":false,"fork":false,"pushed_at":"2024-04-02T10:53:25.000Z","size":720,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-22T04:03:32.026Z","etag":null,"topics":["ai","copilot","h2-database","java","junit5","mermaid","mockito","mockmvc","postgres","postman","railway","spring-boot","swagger"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/didifive.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-03T16:45:30.000Z","updated_at":"2024-06-06T19:19:09.000Z","dependencies_parsed_at":"2024-03-12T02:25:00.604Z","dependency_job_id":"3048e0eb-2af2-4e4e-b53c-2ef009d33814","html_url":"https://github.com/didifive/ess-api","commit_stats":null,"previous_names":["didifive/ess-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/didifive/ess-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didifive%2Fess-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didifive%2Fess-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didifive%2Fess-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didifive%2Fess-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/didifive","download_url":"https://codeload.github.com/didifive/ess-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didifive%2Fess-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31739050,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T03:27:07.512Z","status":"ssl_error","status_checked_at":"2026-04-13T03:26:53.610Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","copilot","h2-database","java","junit5","mermaid","mockito","mockmvc","postgres","postman","railway","spring-boot","swagger"],"created_at":"2024-11-11T15:13:32.203Z","updated_at":"2026-04-13T04:03:42.177Z","avatar_url":"https://github.com/didifive.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Repository language count](https://img.shields.io/github/languages/count/didifive/ess-api)\n![Repository code size](https://img.shields.io/github/languages/code-size/didifive/ess-api)\n[![GitHub last commit](https://img.shields.io/github/last-commit/didifive/ess-api?color=blue)](https://github.com/didifive/ess-api/commits/master)\n[![Made by Didi](https://img.shields.io/badge/made%20by-Didi-green)](https://www.linkedin.com/in/luis-carlos-zancanela/)\n![Repository license](https://img.shields.io/github/license/didifive/ess-api)\n\n![technology Java](https://img.shields.io/static/v1?color=red\u0026label=Technology\u0026message=Java\u0026style=for-the-badge\u0026logo=data:image/png;base64,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)\n![technology Spring](https://img.shields.io/static/v1?color=6DB33F\u0026label=Technology\u0026message=Spring\u0026style=for-the-badge\u0026logo=spring)\n\n# API Escola Shining Stars (ESS) 🌟\n\nRESTful Desenvolvimento da API para projeto do bootcamp Java AI Powered da DIO.\n\nConstruída com Java 21 e Spring Boot 3.2.3.\n\n---\n\n## 🎯 Objetivo \nEste é um projeto de API criado a partir de desafio de projeto do bootcamp Java AI Powered da DIO.  \nO primeiro desafio foi fazer uma abstração de um JSON que atendesse uma tela de amostra de uma aplicação feita no Figma, sem seguida\ngerar diagrama de classe com a sintaxe mermaid utilizando prompt em uma IA Generativa (por exemplo, ChatGPT) com o JSON criado.\nCom a resposta, aprimorei o diagrama para criar uma API que pode atender uma situação problema real para cadastro e controle\nde estudantes, cursos, turmas, matrículas e notas e atenda à tela da amostra.  \n\n### 🏫 O que é ESS API\nAs sigla ESS foi formada pelo nome Escola Shining Star, nome criado para representar o produto deste projeto.  \nA API foi construída com Java e SpringBoot com objetivo de gerar cadastro e controle para estudantes, cursos, turmas,\nmatrículas e notas que uma instituição que possui serviços compatíveis possa utilizar.  \nEste projeto disponibiliza Endpoints que viabilizam o cadastro e controle. Os endpoints estão documentados com\nswagger e também estão configurados em coleção do postman para serem utilizados com o aplicativo para realizar as chamadas\ne testes.\nAqui foram abordadas as etapas:\n- Amostra com Figma: visual de uma tela de aplicativo, no caso, um aplicativo que mostra notas de um aluno.\n- Diagrama de classes: Utilizando IA para elaorar diagrama de classes através de um JSON extraído conforme amostra.\n- Criação da API **ESS**\n- Criação de conta e de banco de dados Postgres utilizando a plataforma [Railway]\n- Publicação da API no [Railway] utilizando a integração com o GitHub\n  - As variáveis de ambientes comfiguradas para PRD foram configuradas no recurso do Railway\n  - Adicionalmente, como foi utilizado o Java 21 nesse projeto, foi necessário configurar a variável de ambiente \"NIXPACKS_JDK_VERSION\" com o valor \"21\".\n    ![Railway Environment Variables](docs/railwayEnvironmentVariables.PNG?raw=true \"Railway Environment Variables\")\n---\n\n## 🔧 Principais tecnologias utilizadas\n- **Java 21**: Versão LTS mais recente do Java para tirar vantagem das últimas inovações que essa linguagem robusta e amplamente utilizada oferece;\n- **Spring Boot 3**: Versão do Spring Boot, que maximiza a produtividade do desenvolvedor por meio de sua poderosa premissa de autoconfiguração;\n- **Spring Data JPA**: Ferramenta pode simplificar a camada de acesso aos dados, facilitando a integração com bancos de dados SQL;\n\n---\n\n## 🖼️ Amostra com Figma\n\nO projeto iniciou com a montagem de uma amostra da aplicação utilizando o Figma para ser base para a abstração de informações para dar seguimento ao projeto.  \n🔗 [Amostra no Figma](https://www.figma.com/file/w9kOfqdYnPNcMxunBX5LGQ/ESS?type=design\u0026node-id=0-1\u0026mode=design)\n\n---\n\n## 💡 Diagrama de Classes (Domínio da API)\n\nDiagrama de classes com sintaxe [Mermaid], criado a partir da abstração de atributos em JSON com base na amostra do Figma e prompt com Microsoft Copilot. \n\n\u003cdetails\u003e\n  \u003csummary\u003eVer diagrama de classes criado com Microsoft Copilot\u003c/summary\u003e\n\n```mermaid\nclassDiagram\n  class Student {\n    - name: string\n    - guardian: string\n    - photo: string\n    - class: Class\n    - subjects: Subject[]\n    - messages: Message[]\n    - shortcuts: Shortcut[]\n    - news: News[]\n  }\n  class Class {\n    - name: string\n    - frequency: string\n    - period: string\n    - status: string\n  }\n  class Subject {\n    - name: string\n    - grade: Grade\n  }\n  class Grade {\n    - type: string\n    - value: number\n  }\n  class Message {\n    - description: string\n    - dateTime: string\n    - read: boolean\n  }\n  class Shortcut {\n    - icon: string\n    - name: string\n  }\n  class News {\n    - title: string\n    - description: string\n  }\n\n  Student o-- Class\n  Student o-- Subject\n  Subject *-- Grade\n  Student o-- Message\n  Student o-- Shortcut\n  Student o-- News\n``` \n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003ePrompt utilizado no Microsoft Copilot\u003c/summary\u003e\n  Gere um diagrama de classes (usando a sintaxe Mermaid) tendo em vista o seguinte JSON que repretanta um aluno de uma escola. Inclua as relações entre as classes. Traduza os nomes das classes e atributos para o inglês. Mantenha uma estrutura simples e fiel ao modelo que vou passar:\n  {\n    \"nome\": \"Maria\",\n    \"responsavel\": \"João\",\n    \"foto\": \"urlFoto\",\n    \"turma\": {\n      \"nome\": \"1º Ano - A\",\n      \"periodicidade\": \"Anual\",\n      \"periodo\": \"2024\",\n      \"status\": \"Em curso\"\n    },\n    \"materias\": [\n      {\n        \"nome\": \"Português\",\n        \"nota\": {\n          \"tipo\": \"Final\",\n          \"valor\": 10\n        }\n      },\n      {\n        \"nome\": \"Matemática\",\n        \"nota\": {\n          \"tipo\": \"Final\",\n          \"valor\": 10\n        }\n      },\n          {\n        \"nome\": \"Ciências\",\n        \"nota\": {\n          \"tipo\": \"Em curso\",\n          \"valor\": 0\n        }\n      }\n    ],\n    \"mensagens\":[\n      {\n        \"descricao\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit.\",\n        \"dataHora\": \"2024-03-02T13:02:34.000Z\",\n        \"lida\": false\n      },\n      {\n        \"descricao\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit.\",\n        \"dataHora\": \"2024-03-01T08:02:34.000Z\",\n        \"lida\": true\n      }\n    ],\n    \"atalhos\": [\n      {\n        \"icone\": \"urlIcone\",\n        \"nome\": \"Conferir Pagamentos\"\n      },\n      {\n        \"icone\": \"urlIcone2\",\n        \"nome\": \"Falar com a Secretaria\"\n      },\n      {\n        \"icone\": \"urlIcone3\",\n        \"nome\": \"Autorizar Saída\"\n      }\n    ],\n    \"novidades\": [\n      {\n        \"titulo\": \"Confira o calendário escolar\",\n        \"descricao\": \"Veja os feriados, data das provas e das férias.\"\n      },\n      {\n        \"titulo\": \"Ensino Integral\",\n        \"descricao\": \"Veja aqui as atividades programadas para o período da tarde.\"\n      }\n    ]\n  }\n\u003c/details\u003e\n\nCom base no diagrama criado pela IA e a documentação do [Mermaid], o diagrama foi editado para deixar as classes no padrão Java e criar as relações para o JPA:\n\n```mermaid\nclassDiagram\n    class BasicEntity {\n    \u003c\u003cAbstract\u003e\u003e\n        - UUID id\n    }\n    \n    class BasicItem {\n    \u003c\u003cAbstract\u003e\u003e\n        - String icon\n        - String title\n        - String description\n    }\n\n    class Student {\n        - String givenName\n        - String familyName\n        - String guardian\n        - String photo\n    }\n\n    class Course {\n        - String name\n        - Frequency frequency\n        - Set~Message~ messages\n        - Set~News~ news\n        - Set~Shortcut~ shortcuts\n    }\n\n    class Clazz {\n        - String name\n        - Course course\n        - LocalDate initDate\n        - LocalDate recoveryDate\n        - LocalDate endDate\n    }\n\n    class RegistrationId {\n        - Student student\n        - Clazz clazz\n    }\n    \n    class Registration {\n        - RegistrationId id\n        - Set~Subject~ subjects\n        - LocalDate registrationDate\n        + RegistrationStatus status()\n    }\n\n    class Frequency {\n        \u003c\u003cEnumeration\u003e\u003e\n        YEARLY\n        SEMI_ANNUAL\n        QUARTERLY\n        BIMONTHLY\n        MONTHLY\n    }\n\n    class RegistrationStatus {\n        \u003c\u003cEnumeration\u003e\u003e\n        ONGOING\n        APPROVED\n        RECOVERY\n        DISAPPROVED\n    }\n\n    class Message {\n        - LocalDateTime dateTime\n    }\n\n    class GradeId {\n        - Registration registration\n        - Subject subject\n    }\n\n    class Grade {\n        - GradeId id\n        - GradeType type\n        - BigDecimal value\n    }\n\n    class GradeType {\n        \u003c\u003cEnumeration\u003e\u003e\n        FINAL\n        PARTIAL\n        ONGOING\n    }\n\n    class Shortcut {\n        - String link\n    }\n\n    class News\n\n    class Subject\n\n    BasicEntity \u003c|-- BasicItem\n    BasicEntity \u003c|-- Course\n    BasicEntity \u003c|-- Clazz\n    BasicEntity \u003c|-- Student\n    BasicItem \u003c|-- Message\n    BasicItem \u003c|-- News\n    BasicItem \u003c|-- Shortcut\n    BasicItem \u003c|-- Subject\n    Course ..\u003e Frequency\n    Course *-- Message\n    Course *-- News\n    Course *-- Shortcut\n    Clazz --\u003e Course\n    RegistrationId --* Student\n    RegistrationId --* Clazz\n    RegistrationId \u003c|-- Registration\n    Registration --\u003e Subject\n    Registration ..\u003e RegistrationStatus\n    Grade ..\u003e GradeType\n    GradeId \u003c|-- Grade\n    GradeId --* Registration\n    GradeId --* Subject\n``` \n\nO legal desta etapa foi ver que, apesar de no modelo do Figma ter o **Estudante** como base, este não era necessariamente o domínio central, existe uma dependência forte com **Curso**, **Turma** e **Matrícula** para ter a relação do estudante com as matérias e notas.\n\n---\n\n## 📷 Prints do Projeto\n\nLogotipo do produto ESS Escola Shining Star  \n![ESS Logo](docs/ess/logo.png?raw=true \"ESS Logo\")  \n  \nBanner do Spring personalizado  \n![ESS Custom Spring Banner](docs/banner.PNG?raw=true \"ESS Custom Spring Banner\")  \n\nConsole do H2 (banco de dados) mostrando as tabelas criadas e os dados de uma tabela de relação de muitos para muitos que relaciona o Estudante, a Turma e a Matéria matriculada   \n![H2 Console Tables and some Tuples](docs/h2console.PNG?raw=true \"H2 Console Tables and some Tuples\")  \n\nAbaixo print do recurso de Postgres criado no [Railway]   \n![Railway Postgres](docs/railwayPostgres.PNG?raw=true \"Railway Postgres\")  \n\nRetorno de erro com DTO personalizado com tratamento para timestamp, status, mensagem e path utilizando a classe `me.didi.api.ess.dtos.ApiErrorDTO`  \n![A return of ApiErrorDTO](docs/apierrordto.PNG?raw=true \"A return of ApiErrorDTO\")  \n\nSwagger do projeto  \n![Swagger / OpenApi](docs/swagger.PNG?raw=true \"Swagger / OpenApi\")  \n\nRequisição com Swagger na API hospedada no [Railway] \n![Railway Swagger](docs/railwaySwagger.PNG?raw=true \"Railway Swagger\")\n\nRelatório de coverage gerado pelo Jacoco  \n![Jacoco Report](docs/jacoco.PNG?raw=true \"Jacoco Report\")  \n\nRetorno de erro na validação de boby em requests, no exemplo é um POST de nova nota (grade) com o body vazio, portanto retorna os campos e respectivas mensagens:  \n![Binding Result](docs/bindingResult.PNG?raw=true \"Binding Result\")  \n\nQuando utiliza chamada de POST que cria novo recurso, seja um estudante, curso, turma ou mesmo o registro da matrícula, o retorno tem\no header \"Location\" que possui link direto para chamar o recurso específico (_GET para findById_).  \nAbaixo exemplo de retorno de cadastro de um Estudante:  \n![Location Header Student](docs/locationHeaderStudent.PNG?raw=true \"Location Header Student\")  \nAbaixo exemplo de um retorno mais complexo como o Registro de Matrícula:  \n![Location Header Registration](docs/locationHeaderRegistration.PNG?raw=true \"Location Header Registration\")  \n\n---\n\n## ✔️ Testes\n\nOs testes foram feitos utilizando [JUnit 5], Mockito e MockMVC com Hamcrest.\n\n- Para executar os testes pode executar sua IDE ou\n- Utilizando o terminal (PowerShell, Bash ou similiar), basta executar na pasta do projeto o comando abaixo:\n\n    ```shell\n    ./mvnw clean test\n    ```\n\n_Após o teste finalizado com sucesso, é possível verificar relatório de coverage em: target/site/jacoco/index.html_\n\n\n## ⚙ Executando o projeto localmente\n\nAntes de mais nada, é preciso Possuir no mínimo JDK 21 LTS instalado na máquina em que irá executar.\nA execução do projeto pode ser feita utilizando atalhos de sua IDE ou com os comandos abaixo:\n\n```shell\n./mvnw clean package spring-boot:repackage\njava -jar target/ess-0.0.1-SNAPSHOT.jar\n```\n_OBS: caso ocorra erro e estiver utilizando o terminal CMD, no primeiro comando basta remover o \"./\" antes do mvnw_\n\n### OpenApi / Swagger\nPara acessar a documentação do Swagger OpenAPI v3.1, acesso o link com o projeto em execução: http://localhost:8080/swagger-ui/index.html\n\n### Postman\nNeste projeto tem arquivo de coleção do Postman com os Endpoints configurados: [ESS.postman_collection.json]\n\n### 👪 Populate\nPara popular dados automaticamente foram criadas classes que executam ao iniciar a aplicação, assim a aplicação já inicia com dados básicos para gets.   \nAs classes estão no pacote `me.didi.api.ess.utils.populate`.\n\n---\n\n## 🔜 Desafios\nMelhorias e desafios para aprimorar o projeto:\n- Criar recurso para alterar estudantes, curso e turma\n- Criar endpoint para adicionar ou remover matérias na matrícula\n- Configurar paginação para os endpoints que retornam lista (findAll)\n- Criar recurso para poder apagar estudantes, curso, turma, matéria, matrícula, nota, mensagem, notícia e atalho:\n  - Para este caso ter atenção com a consistência de dados\n  - De preferência utilizar soft delete para permitir reverter a deleção\n- Aprimorar documentação OpenApi/Swagger com exemplos e descrições para os endpoints e schemas\n- Observabilidade: implementar logs e métricas\n- Implementar cache\n- Incluir e configurar método de autenticação e autorização (por exemplo, Spring Security)\n- Incluir e configurar versionamento de banco utilizando, por exemplo, flyway\n- Utilizar uma solução de banco de dados diferente do H2 (MySQL, Postgres, etc)\n- Criar testes de Integração\n- Criar front-end/app para consumir a API\n- Criar testes e2e\n\n---\n\n📋 Qualquer dúvida, sugestão ou crítica é só entrar em contato ou abrir uma Issue (https://github.com/didifive).  \n💚 Feito com muita dedicação e aprendizado. #EnjoyThis\n\n[Mermaid]: https://mermaid.js.org/\n[Railway]: https://railway.app/\n[ESS.postman_collection.json]: https://github.com/didifive/ess-api/blob/main/docs/ESS.postman_collection.json","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdidifive%2Fess-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdidifive%2Fess-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdidifive%2Fess-api/lists"}