Giter Site home page Giter Site logo

edson-mendes / aluraflix-api Goto Github PK

View Code? Open in Web Editor NEW
2.0 1.0 1.0 311 KB

API de uma plataforma de compartilhamento de vídeos. Challenge BackEnd 5ª edição da Alura.

Home Page: http://aluraflixapi-env.eba-79ddpr8r.us-east-1.elasticbeanstalk.com/swagger-ui/index.html

Java 99.93% Dockerfile 0.07%
java springboot alurachallengebackend5

aluraflix-api's Introduction

Alura Flix API

Badge Concluído Badge Java Badge Spring Badge JUnit5 Badge Postgresql

📖 Resumo do projeto

Alura Flix é uma plataforma de compartilhamento de vídeos. Projeto proposto pela Alura no Challenge Backend 5ª edição.

💡 Funcionalidades

  • Autenticação
    Todos os recursos, exceto POST /auth/signup e GET /videos/free, requerem clientes autenticados, o qual deve ser feita em todas as requisições via basic auth, enviando o header Authorization: Basic username:password

    • Sign Up: Cadastro de usuário através de um POST /auth/signup com os dados do usuário no corpo da requisição. Segue abaixo um exemplo do corpo da requisição.

      {
        "name" : "Lorem Ipsum",
        "email" : "[email protected]",
        "password" : "123456"
      }
  • Vídeos

    • Cadastrar: Cadastro de vídeo através de um POST /videos com as informações de title, description e url do vídeo no corpo da requisição. Segue abaixo um exemplo do corpo da requisição.

      {
        "title": "vídeo xpto",
        "description": "descrição do vídeo xpto",
        "url": "http://www.xpto.com/duwehdiwehdhweuhd9487jh82"  
      }
    • Buscar: Busca paginada de vídeos através de um GET /videos. Opcional buscar por título com parâmetro search (e.g. /videos?search=xpto). Segue abaixo um exemplo do corpo da resposta.

      {
        "content": [
          {
              "id": 100,
              "title": "vídeo xpto",
              "description": "descrição do vídeo xpto",
              "url": "http://www.xpto.com/duwehdiwehdhweuhd9487jh82"
          }
        ],
        "pageable": {
          "sort": {
            "empty": false,
            "unsorted": false,
            "sorted": true
          },
          "offset": 0,
          "pageNumber": 0,
          "pageSize": 10,
          "paged": true,
          "unpaged": false
        },
        "last": true,
        "totalPages": 1,
        "totalElements": 1,
        "size": 10,
        "number": 0,
        "sort": {
          "empty": false,
          "unsorted": false,
          "sorted": true
        },
        "first": true,
        "numberOfElements": 1,
        "empty": false
      }
    • Buscar por id: Busca vídeo por id através de um GET /videos/{ID}, onde {ID} é o identificador do vídeo. Segue abaixo um exemplo do corpo da resposta.

      {
        "id": 100,
        "title": "vídeo xpto",
        "description": "descrição do vídeo xpto",
        "url": "http://www.xpto.com/duwehdiwehdhweuhd9487jh82"
      }
    • Buscar amostra: Buscar últimos 5 vídeos adicionados através de um GET /videos/free, essa requisição não requer autenticação. Segue abaixo um exemplo do corpo da resposta.

      [
        {
          "id": 12,
          "title": "Vídeo Comum 12",
          "description": "Vídeo comum 12",
          "url": "http://www.funnyvideos.com/d39167ge6gd6gf",
          "categoryId": 1
        },
        {
          "id": 11,
          "title": "Vídeo Comum 11",
          "description": "Vídeo Comum 11",
          "url": "http://www.xpto.com/f546h56h56h",
          "categoryId": 1
        },
        {
          "id": 10,
          "title": "Vídeo Comum 10",
          "description": "Vídeo comum 10",
          "url": "http://www.funnyvideos.com/n7j756unbgf",
          "categoryId": 1
        },
        {
          "id": 9,
          "title": "Vídeo Comum 9",
          "description": "Vídeo comum 9",
          "url": "http://www.funnyvideos.com/b3t24f3f",
          "categoryId": 1
        },
        {
          "id": 8,
          "title": "Vídeo Comum 8",
          "description": "Vídeo comum 8",
          "url": "http://www.funnyvideos.com/tts6gf",
          "categoryId": 1
        }
     ]
    • Atualizar: Atualizar vídeo através de um PUT /videos/{ID}, onde {ID} é o identificador do vídeo, os novos dados do vídeo devem ser enviados no corpo da requisição. Segue abaixo um exemplo do corpo da requisição.

      {
        "title": "vídeo xpto atualizado",
        "description": "descrição do vídeo xpto atualizado",
        "url": "http://www.xpto.com/duwehdiwehdhweuhd9487jh82"  
      }
    • Deletar: Deletar vídeo através de um DELETE /videos/{ID}, onde {ID} é o identificador do vídeo.

  • Categorias

    • Cadastrar: Cadastro de categoria através de um POST /categories com as informações de title e color da categoria no corpo da requisição. Segue abaixo um exemplo do corpo da requisição.

      {
        "title": "Comédia xpto",
        "color": "f0aff0" 
      }
    • Buscar: Busca paginada de categorias através de um GET /categories. Segue abaixo um exemplo do corpo da resposta.

      {
        "content": [
          {
              "id": 55,
              "title": "Comédia xpto",
              "color": "f0aff0"
          }
        ],
        "pageable": {
          "sort": {
            "empty": false,
            "unsorted": false,
            "sorted": true
          },
          "offset": 0,
          "pageNumber": 0,
          "pageSize": 10,
          "paged": true,
          "unpaged": false
        },
        "last": true,
        "totalPages": 1,
        "totalElements": 1,
        "size": 10,
        "number": 0,
        "sort": {
          "empty": false,
          "unsorted": false,
          "sorted": true
        },
        "first": true,
        "numberOfElements": 1,
        "empty": false
      }
    • Buscar vídeos por categoria: Busca de vídeos por categoria através de um GET /categories/{ID}/videos, onde {ID} é o identificador da categoria. Segue abaixo um exemplo do corpo da resposta.

      {
        "content": [
          {
              "id": 100,
              "title": "vídeo xpto",
              "description": "descrição do vídeo xpto",
              "url": "http://www.xpto.com/duwehdiwehdhweuhd9487jh82",
              "categoryId" : 55
          }
        ],
        "pageable": {
          "sort": {
            "empty": false,
            "unsorted": false,
            "sorted": true
          },
          "offset": 0,
          "pageNumber": 0,
          "pageSize": 10,
          "paged": true,
          "unpaged": false
        },
        "last": true,
        "totalPages": 1,
        "totalElements": 1,
        "size": 10,
        "number": 0,
        "sort": {
          "empty": false,
          "unsorted": false,
          "sorted": true
        },
        "first": true,
        "numberOfElements": 1,
        "empty": false
      }
    • Buscar por id: Busca categoria por id através de um GET /categories/{ID}, onde {ID} é o identificador da categoria. Segue abaixo um exemplo do corpo da resposta.

      {
        "id": 55,
        "title": "Comédia xpto",
        "color": "f0aff0"  
      }
    • Atualizar: Atualizar categoria através de um PUT /categories/{ID}, onde {ID} é o identificador da categoria, os novos dados da categoria devem ser enviados no corpo da requisição. Segue abaixo um exemplo do corpo da requisição.

      {
        "title": "Comédia XPTO",
        "color": "0f0ab4" 
      }
    • Deletar: Deletar categoria através de um DELETE /categories/{ID}, onde {ID} é o identificador da categoria.

  • Usuários

    • Alterar senha: Alterar senha do usuário através de um PUT /users/password. Segue abaixo um exemplo do corpo da requisição.

      {
        "oldPassword": "123456",
        "newPassword": "12345678", 
        "confirmPassword": "12345678" 
      }
    • Buscar Busca paginada de usuários através de um GET /users. Apenas administradores podem realizar essa busca.

    • Buscar por id: Busca usuário por id através de um GET /users/{ID}, onde {ID} é o identificador do usuário. Apenas administradores podem realizar essa busca.

    • Deletar: Deletar usuário através de um DELETE /users/{ID}, onde {ID} é o identificador do usuário. Apenas administradores podem excluir usuários.

🛠️ Deploy

Realizei o deploy da aplicação na AWS, você pode Testar/Brincar através do Swagger UI. Pode criar um usuário ou usar o username [email protected] com password 12345678.
Se possível, me avise caso encontre algum bug ou tenha alguma sugestão.

🐳 Criar container docker da aplicação

Execute este aquivo docker-compose.yml. Que irá subir um container postgres e um container da aplicação Aluraflix.

  docker-compose -f docker-compose.yml up

Após subir os containers, acesse http://localhost:22222/swagger-ui.html.

🧰 Tecnologias

  • Intellij
  • Java 17
  • Maven
  • Spring Boot, Spring MVC, Spring Data JPA, Spring Security
  • Docker
  • PostgreSQL
  • Flyway
  • Lombok
  • OpenAPI/Swagger
  • Mockito
  • JUnit5
  • Testcontainers
  • Testes de unidade
  • Testes de integração
  • AWS

⚙️ Atualizações futuras

  • HATEOAS para ajudar os clientes a consumirem a API sem a necessidade de conhecimento prévio.
  • Configurar CORS.
  • Atualizar imagem docker do projeto.
  • Acesso a recursos apenas autenticado.
  • Devolver mensagem "amigável" em caso de 409 (Conflict).
  • Realizar deploy da aplicação em algum serviço cloud.
  • Criar funcionalidades de atualizar e deletar usuário.
  • Adicionar OAuth2 (Apenas para estudar)

aluraflix-api's People

Contributors

edson-mendes avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Forkers

pedro-andradee

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.