Coder Social home page Coder Social logo

enyus / dio-api-angular-blog Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 1.0 57.69 MB

Último desafio do bootcamp Santander Full Stack Java + Angular pela DIO.

Home Page: https://dio-api-angular-blog-production.up.railway.app

License: MIT License

Java 100.00%
angular dio-bootcamp java maven railway santander-bootcamp

dio-api-angular-blog's Introduction

Lab DIO: API para o Angular Blog

Último desafio do bootcamp Santander Full Stack Java + Angular pela DIO.

Sobre o Desafio

O desafio é bem direto: criar uma API e publicacá-la (é sugerido o serviço Railway).

Como o bootcamp também envolve conhecimentos de Front End com Angular, minha intenção inicial é criar uma API que possa ser usada para manipular no backend os artigos do blog que foi também um desafio neste mesmo bootcamp (Veja Aqui o repositório do Front End do Angular Blog).

🔝 Voltar ao Topo 🔝

Início Modesto

Primeira coisa que decidi fazer foi fazer com que a chamada para o endpoint "/" retornasse algo melhor que um erro 500, então fiz uma classe MainController com um método home que retorna um link (descobri que é possível retornar código html mesmo na mensagem de resposta do controller) para este repositório:

// MainController.java
// Importações
@RestController
public class MainController {
    
    @GetMapping("/")
    public ResponseEntity<Object> home(){
        return ResponseEntity.ok("<a href='https://github.com/Enyus/dio-api-angular-blog'>Angular Blog API</a>");
    }
}

"localhost:8080/"

🔝 Voltar ao Topo 🔝

Modelagem de dados

O banco de dados provavelmente vai contar com apenas duas tabelas, Posts e Tag, que podem ser representadas pelo seguinte diagrama:

Diagrama de Classes com Mermaid

Diagrama criado com mermaid, conforme sugestão do expert do desafio

🔝 Voltar ao Topo 🔝

Para Rodar o Projeto

  • Garanta que você tem o JDK e o Maven instalados (Para um guia mais descritivo, pelo menos usando Windows e o VSCode, veja esse repositório);
  • No diretório principal (angular.blog.api), rode o comando mvn install para instalar todas as dependências do arquivo pom.xml;
    • É recomendável usar o comando mvn clean antes do comando de instalação;
  • Execute o comando para incializar a API mvn spring-boot:run e o aplicativo começará a rodar na porta 8080, rota http://localhost:8080/;
  • Para entrar no console do banco de dados em memória H2, acesse a rota http://localhost:8080/h2-console/ com os dados de application.yaml:
    • JDBC URL: jdbc:h2:mem:angularblogapi
    • User Name: enyus
    • Password: "" (deixar vazio)
    • Clicar em Connect.
  • Para rodar o swagger UI, basta acessar a url http://localhost:8080/swagger-ui.html.

🔝 Voltar ao Topo 🔝

Deploy no Railway

Depois de suar muito para conseguir fazer o deploy no Railway, finalmente consegui e tudo graças ao vídeo e post no medium do Gustavo Alberto Souza Costa.

Minha dificuldade veio principalmente do fato que a explicação do especialista da DIO não apenas era em outra IDE (tive sérios problemas em usar variáveis de ambiente em java com o VSCode, não consegui pra falar a verdade), mas também usava o graddle como gerenciador de pacotes.

Alterações:

  • Criei uma branch específica para o deploy;

  • No arquivo da classe principal (Application.java), foi adicionada a propriedade PORT que descreveria a porta usada pelo Railway para subir a aplicação;

// Importações
public class Application {
	public String PORT = System.getenv("PORT");

	public static void main(String[] args) {
    // (...)
  • Como o Railway usa docker, o Gustavo indicou a criação de um arquivo chamado Dockerfile que indica ao Docker os passos a seguir para subir a API;
FROM openjdk:17 #indica que estou usando o java na versão 17
ADD ./docker-spring-boot.jar docker-spring-boot.jar #nome final do arquivo de inicialização, definido no arquivo pom.xml
ENTRYPOINT  ["java", "-jar", "docker-spring-boot.jar"] # aqui imagino que sejam os comandos para iniciar o aplicativo "buildado"
  • Como mencionado no item anterior, o nome final do arquivo de build deve ser declarado no arquivo pom.xml, em <build>:
<!-- pom.xml -->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
    <finalName>docker-spring-boot</finalName>
</build>
<!-- pom.xml -->
  • No arquivo de propriedades, que no meu caso eu uso o application.yaml, foi adicionada a propriedade informando a porta:
spring:
    # (...)
    server:
        port: ${PORT:8080}
  • Realizando o procedimento padrão quando o arquivo pom.xml é alterado, rodou-se os comando mvn clean e mvn install no terminal, o que gera a pasta target. Dentro dela, o arquivo final (anteriormente denominado) docker-spring-boot.jar foi criado. Este arquivo foi copiado para a raiz do projeto.

  • Com um push para o GitHub, que eu já havia sincronizado com o railway e configurado as variáveis de ambiente no site, o deploy subiu e funcionou!

Deploy online

Links do Deploy

🔝 Voltar ao Topo 🔝

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.