Git Product home page Git Product logo

cursosufcg-backend's Introduction

Repositório para o Back-end do projeto da disciplina de Projeto de Software

Links Importantes:

Explicação básica da API Rest

Explicação básica sobre o funcionamento da API.

  • A API Rest trata-se de mostrar as informações básicas sobre uma disciplina da UFCG, por enquanto apenas do Curso de Computação.

  • Algumas rotas são privadas, apenas usuário com token poderão fazer requisições. Caso não tenham, terão que se cadastrar e depois realizar o login, essa última irá retornar um token no corpo da resposta.

  • Existe uma rota: /v1/disciplina/admin que é usada para cadastrar todas as disciplinas e juntamente criando os perfis das mesmas. A rota recebe uma lista com os nomes das disciplinas.

  • Um usuário autenticado consegue: Criar comentários, responder comentários, curtir(descurtir) os perfis, fazer listagens dos perfis por quantidade de likes e por comentários. Todas as rotas necessitam que o tokenseja passado no headerda requisição.

  • Um usuário não autenticado: Consegue apenas listar as disicplinas(não consegue ver os perfis).

Rotas:

Rotas da API Rest.

  • Comentários: Responsável por controlar as funcionalidades que um comentário possui

Rota Método Função Parâmetros
/v1/comentario/{id}/{email} POST Cria um comentário no perfil especificado pelo ID id: Id do perfil, email: Email do usuário
/v1/comentario/usuario/{email} GET Retorna todos os comentários de um usuário email: Email do usuário
/v1/comentario/respostas/{id}/{email} GET Retorna as respostas de um comentário id: id do comentário, email: Email do usuário
/v1/comentario/responderComentario/{idComentario}/{email} POST Cria resposta de um comentário id: id do comentário, email: Email do usuário
/v1/comentario/apagarComentario/{idPerfil}/{idComentario}/{email} DELETE Apaga um comentário de um perfi idPerfil: id do perfil, idComentario: id do comentário, email: email do usuário que quer apagar o comentário.
  • Disciplinas: Responsável por controlar as funcionalidades que uma disciplina possui

Rota Método Função Parâmetros
/v1/disciplina/ GET Retorna todas as disciplinas
/v1/disciplina/{id} GET Retorna uma discicplina pelo ID id: id da disciplina
/v1/disciplina/buscar/{query} GET Retorna as disciplinas por substring query: substring a ser procurada
/v1/disciplina/ POST Cria uma disciplina
/v1/disciplina/admin POST Cria várias disciplinas
/v1/disciplina/{id} DELETE Apaga uma disciplina id: id da disciplina a ser deletada
  • Login: Responsável por controlar as funcionalidades de login

Rota Método Função Parâmetros
/v1/login/ POST Realiza um login de um usuário
  • Perfil: Responsável por controlar as funcionalidades que um perfil possui

Rota Método Função Parâmetros
/v1/perfil/ GET Retorna todos os perfis
/v1/perfil/buscar/{query} GET Retorna todos os perfis por substring query: substring a ser procurada
/v1/perfil/curtir/{id}/{email} POST Cria um like no perfil id: id do perfil, email: email do usuário a dar o like
/v1/perfil/ordenarPorComentarios GET Retorna perfis ordenados por quantidade de comentários
/v1/perfil/ordenarPorLikes GET Retorna perfis ordenados por quantidade de like
/v1/perfil/{idDisciplina} POST Cadastra um perfil idDisciplina: id da disciplina
/v1/perfil/{id}/{email} GET Retorna um perfil pelo id id: id do perfil, email: email do usuário
  • Usuário: Responsável por controlar as funcionalidades que uma usuário possui

Rota Método Função Parâmetros
/v1/usuario/ POST Cria um usuário
/v1/usuario/{email} DELETE Apaga um usuário
/v1/usuario/{email} GET Retorna um usuário pelo email

Diretórios:

Explicação básica de cada diretório.

  • ./authentication: Onde os arquivos de Filtragem de token ficam, cada requisição feita irá passar pela classe TokenFilter para ser realizado a verificação do token

  • ./config: Onde encontra apenas um arquivo, responsável pela configuração da documentação da API, Swagger.

  • ./controllers: Onde encontra-se todos os meus controles da aplicação, todas as rotas possiveis estão descritas nos meus controles.

  • ./exceptions: Onde estão as minhas exceções, e padronização das minhas Exceções para o response

  • ./ models: Onde estão os meus modelos, com a anotação Entity, tornando elas uma entidade no meu banco de dados.

  • ./ordenation: Onde estão as classes de ordenação de meus perfis.

  • ./repository: Onde estão os meus DAO(Data Access Object ou Objeto de Acesso a Dados). Onde seu principal objetivo é separar regras de negócio de regras de acesso a banco de dados.

  • ./services: Onde estão meus servições de cada DAO da minha aplicação. Onde irá ocorrer cada verificação ou regra de negócio antes de chamar algum método do meu DAO.

  • ./utils: Onde está minha classe responsável por enviar um email para o usuário após ele se cadastrar.

Testando a API localmente:

Caso vá usar a URL do heroku, as disicplinas e perfis já estão criadas.

  • Antes de tudo devemos criar um usuário pela rota: /v1/usuario/, passando no body da requisição:

    {
        "email": "string",
        "primeiroNome": "string",
        "senha": "string",
        "ultimoNome": "string"
    }
  • Após a criação, devemos realizar o login, para termos o nosso token, pela rota: /v1/login/, passando no body da requisição:

  {
      "email": "string",
      "senha": "string",
  }
  • Após isso devemos cadastrar nossas disciplinas: encontra-se no arquivo. Pode ser cadastradas pela rota: /v1/disciplina/admin. Passando no corpo da requisição o contéudo do arquivo acima, passando o token na requisição(no header).

  • Depois disso, poderá ser realizado todas as demais funcionalidades do sistema: Criar outros usuários, cadastrar disciplinas, ver perfis e suas informações, comentar, responder, curtir e etc.

cursosufcg-backend's People

Contributors

igorsilveira7 avatar richecr avatar

Stargazers

 avatar

Watchers

 avatar  avatar

cursosufcg-backend's Issues

Criar a tabela Usuario no banco.

  • Implementar o model Usuario com os seus respectivos atributos(colunas).

    • Primeiro nome.
    • Último nome
    • E-mail(Identificador único)
    • Senha

QUESTION: Repensar sobre a implementação de likes

Razão da mudança:

Já que a entidade Curtida não possui campo nenhum. Por que não tira-lá e deixar a relação entre Perfil e Usuario ?


  • Atualmente a implementação de likes é feita da seguinte forma:

Existe uma classe Curtida que tem três atributos: id, perfil e usuario. Na qual id é o identificador, perfil é o perfil que recebe esse like e o usuario é o usuário que deu like no perfil.

Na classe Perfil tem um atributo de coleção(List) de Curtida. Com o relacionamento de 1 perfil pode possuir várias Curtidas.

Na classe Usuario tem um atributo de coleção(List) de Curtida. Com o relacionamento de 1 usuário pode dar várias Curtidas.

  • Vantagens:

    • A ideia de um like fica explicita.
  • Desvantagens:

    • A criação de uma entidade, repository e service.
    • Um pequeno aumento na complexidade das consultas.

  • Nova implementação:

Na classe Perfil terá um atributo de coleção(List) de Usuario, com o relacionamento de muitos perfis podem 'possuir' vários Usuario``(A ideia de curtir está implícita). Toda vez que um usuário curtir um perfil, ele(o usuário) será salvo dentro dessa coleção.

Na classe Usuarioterá um atributo de coleção(List) de Perfil, com o relacionamento de muitos usuários podem 'possuir' vários Perfil``. Toda vez que um usuário curtir um perfil, ele(o perfil) será salvo dentro dessa coleção.

OBS: Não precisa ser uma coleção de Usuario, pode salvar apenas o identificador(email). E também vale para coleção de Perfil, basta salvar apenas o identificador(id).

OBS: A classe dominadora é Perfil.

  • Vantagens:

    • Diminuição na complexidade das consultas.
    • Evita a criação de entidade, repository e service.
  • Desvantagens:

    • A ideia de um like fica implícita.

Perfil de uma disicplina

  • Implementar o que irá representar um Perfil de uma disciplina

    • - Disciplina referente.
    • - Likes dos usuários.
    • - Retirar like.
    • - Comentários dos usuários.
    • - Notas dadas por usuários à uma disciplina.
    • - Média de uma disciplina.
    • - Apagar comentário.
  • Garantir:

    • - Não duplicação de likes do mesmo usuário.
    • - Não duplicação de notas do mesmo usuário.
    • - Perfil ter o mesmo ID que a Disciplina referente.

Criar o UsuarioRepository

  • Implementar a classe UsuarioRepository. Onde vai conter os métodos necessários para a realizações dos métodos do UsuarioService e do UsuarioController.

    • - findByEmail
      • Retorna um usuário com o mesmo email (Usando Query).

Criar o UsuarioController

  • Implementar o UsuarioController com a rota padrão /v1/usuarios. Juntamente com os métodos GET, POST, PATCH, PUT e DELETE necessários.

    • - Criar Usuário (POST) (Rota: /usuario).
    • -Deletar um usuário (DELETE) (Rota: /usuario/{email}).
    • - Enviar email ao cadastrar um novo usuário.
  • Necessários:

    • - Tratamentos de exceções.
    • - Não deixar cadastrar dois usuários com mesmo e-mail.

Autenticação

  • Essa parte está implementada, mas não sendo utilizada para facilitar no desenvolvimento para testes, ao concluir o projeto, lembrar de configurar corretamente.

Autenticação de usuários

  • Implementar a parte de autenticar um usuário, caso ele já esteja cadastrado no sistema.

    • - Na criação de um usuário, deve retorna um token.

    • - Rota de login

      • usuário irá fazer login com e-mail e senha.

GET Perfil: Deve vim um atributo que diga se aquele usuário deu Like nesse perfil.

  • Implementar a funcionalidade na rota GET Perfil deve retornar um atributo usuarioAutenticado(quem chamou a rota) deu like ou não naquela disciplina.

  • Implementação:
    • Criar um atributo usuarioAutenticado na class Perfil, e ao usuário chamar a rota GET Perfil, na qual recebe o email do usuário autenticado, eu irei verificar se o usuário deu like e então setar no meu novo atributo: true ou false.

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.