Skip to content

Esta é uma API RESTful construída com Java e Spring Boot para gerenciar o conteúdo de um portfólio pessoal, como projetos, experiências profissionais e formação acadêmica.

License

Notifications You must be signed in to change notification settings

Arthur-Fialho/API-Java-Portfolio

Repository files navigation

API - Portfólio Pessoal

Java Spring Boot Docker AWS

Status: Concluído e implantado na AWS ✅

API RESTful construída com Java e Spring Boot para servir como o back-end de uma aplicação de portfólio pessoal. A API gere projetos, experiências profissionais e formação académica, com um sistema de autenticação seguro baseado em JWT.

Esta API serve o front-end que está no ar em: arthurfialho.com.br


Arquitetura de Deploy (AWS)

A aplicação está totalmente containerizada e implantada na nuvem da AWS, seguindo práticas modernas de DevOps:

  • API (Back-end): A aplicação Spring Boot é executada como um container Docker no AWS App Runner, que gere o build, o deploy e a escalabilidade.
  • Base de Dados: Utiliza uma instância gerida de PostgreSQL no Amazon RDS, garantindo segurança, performance e backups.
  • Envio de E-mails: O formulário de contacto utiliza o AWS SES (Simple Email Service) para um envio de e-mails fiável.

Tecnologias Utilizadas

Categoria Tecnologia
Linguagem & Core Java 21, Spring Boot 3.x
Web & API Spring Web, Spring Security (JWT)
Persistência Spring Data JPA, Hibernate, PostgreSQL
Build & Dependências Maven
Qualidade de Código Lombok, MapStruct (Mapeamento manual)
Containerização Docker, Docker Compose
Cloud & Deploy AWS (App Runner, RDS, SES), Git & GitHub

Como Executar Localmente

Pré-requisitos

  • JDK 21 ou superior
  • Maven 3.6 ou superior
  • Docker e Docker Compose (para a forma mais fácil de executar)

1. Configuração Manual

  1. Clone o repositório:

    git clone https://github.com/Arthur-Fialho/API-Java-Portfolio.git
    cd API-Java-Portfolio
  2. Configure a Base de Dados:

    • Tenha uma instância do PostgreSQL a rodar.
    • Crie uma base de dados chamada portfolio.
    • Copie o ficheiro src/main/resources/application.properties.example para src/main/resources/application.properties.
    • Altere as propriedades em application.properties com as suas credenciais:
      # Credenciais da Base de Dados
      spring.datasource.url=jdbc:postgresql://localhost:5432/portfolio
      spring.datasource.username=<seu-usuario-postgres>
      spring.datasource.password=<sua-senha-postgres>
      
      # Credenciais do Administrador Padrão
      admin.default.username=admin
      admin.default.password=<sua-senha-segura-para-o-admin>
      
      # Segredo do JWT
      api.security.token.secret=<seu-segredo-longo-e-aleatorio-para-jwt>
  3. Execute a Aplicação:

    ./mvnw spring-boot:run

    A API estará disponível em http://localhost:8080.

2. Executando com Docker (Recomendado)

O projeto está pronto para ser executado com um único comando.

  1. Configure as variáveis de ambiente:

    • Na raiz do projeto, crie um ficheiro .env a partir do .env.example.
    • Preencha as variáveis no ficheiro .env com os seus segredos.
  2. Execute o Docker Compose:

    docker-compose up --build

    A API estará disponível em http://localhost:8080.


Documentação dos Endpoints

Clique para expandir a documentação da API

Todos os endpoints que manipulam dados (POST, PUT, DELETE) são protegidos e exigem um token JWT no cabeçalho Authorization: Bearer <seu-token>.

Autenticação

  • POST /auth/login: Realiza o login e retorna um token JWT.

Projetos

  • GET /projects: Lista todos os projetos, ordenados por displayOrder.
  • GET /projects/{id}: Busca um projeto por ID.
  • POST /projects: (Protegido) Cria um novo projeto.
  • PUT /projects/{id}: (Protegido) Atualiza um projeto existente.
  • DELETE /projects/{id}: (Protegido) Deleta um projeto.

Exemplo de corpo para POST ou PUT de Projeto:

{
    "title": "Nome do Projeto",
    "description": "Descrição detalhada do que o projeto faz.",
    "technologies": "Java, React, AWS",
    "repositoryUrl": "[https://github.com/](https://github.com/)...",
    "demoUrl": "[https://meuprojeto.com](https://meuprojeto.com)",
    "displayOrder": 1
}

Experiências

  • GET /experiences: Lista todas as experiências.
  • GET /experiences/{id}: Busca uma experiência por ID.
  • POST /experiences: (Protegido) Cria uma nova experiência.
  • PUT /experiences/{id}: (Protegido) Atualiza uma experiência.
  • DELETE /experiences/{id}: (Protegido) Deleta uma experiência.

Exemplo de corpo para POST ou PUT de Experiência:

{
    "title": "Engenheiro de Software",
    "company": "Tech Corp",
    "startDate": "2022-01-15",
    "endDate": null,
    "description": "Desenvolvimento de microserviços..."
}

Educação

  • GET /educations: Lista todas as formações.
  • GET /educations/{id}: Busca uma formação por ID.
  • POST /educations: (Protegido) Cria uma nova formação.
  • PUT /educations/{id}: (Protegido) Atualiza uma formação.
  • DELETE /educations/{id}: (Protegido) Deleta uma formação.

Exemplo de corpo para POST ou PUT de Educação:

{
    "institution": "Universidade da Tecnologia",
    "course": "Engenharia de Software",
    "startDate": "2018-02-01",
    "endDate": "2021-12-10",
    "description": "Foco em arquitetura de software..."
}

Autor

Arthur Fialho

About

Esta é uma API RESTful construída com Java e Spring Boot para gerenciar o conteúdo de um portfólio pessoal, como projetos, experiências profissionais e formação acadêmica.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published