Skip to content

felipe-dr/dinamiques-web-next

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dinamiques


Dinamiques: conhecimento ao alcance de todos

Repo size Last commit on GitHub Status


Docker CI/CD: GitHub Actions CommitLint LintStaged Husky

Next.js React.js Typescript.org ReactHookForm ReactMarkDown ReactColorFul ClassVarianceAuthority UIWReactMdEditor Tailwind CLSX RadixUI Tanstack DateFns Zod Heroicons JWT.io Eslint.org Prettier.io Vitest TestingLibrary JSdom PostCSS GoogleLighthouse GoogleRichResultsTest

Índice

  1. Sobre
  2. Funcionalidades
  3. Arquitetura
  4. CI/CD
  5. Como executar
  6. Tecnologias
  7. Autor

Sobre

Blog desenvolvido em NextJS que disponibiliza o acesso e leitura de artigos acadêmicos.

Funcionalidades

IMPORTANTE !

  • Nessa primeira versão não foi implementado o conceito de roles para restringir acessos e definir permissões, porém posteriormente será implementado.
  • Os itens abaixo sem a marcação de checado são recursos que estão mapeados para serem implementados posteriormente.
  • Usuário poderá se autenticar quando estiver com o status ativo

  • Usuário autenticado como administrador poderá gerenciar:

    Todas as funcionalidades abaixo estão implementadas na API e serão integradas futuramente na interface.

    • Usuários
      • Criar
        • Com restrição de email e username únicos
      • Consultar todos
        • Com paginação e limite de itens
        • Ordenar por padrão em ordem decrescente de criação
        • Adicionar filtro para ordenação
      • Consultar por id
      • Consultar por email
      • Editar
        • Com restrição de email e username únicos
      • Deletar
        • Do tipo soft delete para se manter histórico
        • Não é possível deletar ( desativar ) um usuário já desativado
    • Docentes
      • Criar
        • Com restrição de nome único
      • Consultar todos
        • Com paginação e limite de itens
        • Ordenar por padrão em ordem decrescente de criação
        • Adicionar filtro para ordenação
      • Consultar por id
      • Consultar por nome
      • Editar
        • Com restrição de nome único
      • Deletar
        • É feita automaticamente a desativação do seu usuário correspondente
  • Usuário autenticado como docente poderá gerenciar:

    • Categorias
      • Criar
        • Com restrição de nome único
      • Consultar todas
        • Com paginação e limite de itens
        • Ordenar por padrão em ordem decrescente de criação
        • Ordenar por nome, ativo e criado em
      • Visualizar detalhes
      • Filtrar por nome
      • Adicionar ou remover a exibição de colunas da tabela
      • Editar
        • Com restrição de nome único
      • Deletar
        • Com restrição de somente se não estiver associada em artigo(s)
    • Artigos
      • Criar
        • Com restrição de título e slug únicos
      • Consultar todos
        • Com paginação e limite de itens
        • Ordenar por padrão em ordem decrescente de data da última publicação
        • Ordernar por categoria, docente, título, data da última publicação, publicado e criado em
      • Visualizar detalhes do artigo concatenando com dados do docente e categoria
      • Filtrar por título
      • Adicionar ou remover a exibição de colunas da tabela
      • Editar
        • Com restrição de título e slug únicos
      • Deletar
  • Usuário visitante não estritamente autenticado poderá acessar:

    • Página inicial
      • Consultar artigos
        • Com paginação e limite de itens
      • Filtrar artigos por categoria ativa
      • Filtrar artigos por título ou conteúdo na barra de pesquisa
    • Página de detalhes do artigo
      • Visualizar detalhes do artigo
      • Visualizar e acessar artigos ativos recomendados de mesma categoria
      • Compartilhar artigo nas principais redes sociais
      • Publicar um comentário no artigo
    • Favoritar artigo para leitura quando houver sido implementado o conceito de roles e autenticação de visitante
    • Alternar entre tema claro e escuro
    • Alterar idioma
    • Alterar tamanho da fonte

Arquitetura

O projeto foi desenvolvido seguindo diversas boas práticas e princípios arquiteturais para que se mantenha robusto e escalável para novas implementações. Futuramente poderá ser ainda mais aprimorado e aplicado DDD como foi feito na API.

  • Clean code
  • DRY ( Dont Repeat Yourself )

A estrutura de pastas é semântica e os arquivos estão devidamente categorizados de acordo com suas finalidades.

Estrutura de pastas do projeto Dinamiques

CI/CD

Embora esteja sendo utilizado o husky com o lintstaged para já validar o arquivo tanto em sua estrutura de código, quanto na validação dos testes após cada push. Há ainda um workflow configurado com o github actions responsável por efetuar os fluxos abaixo, assim como executar os devidos scripts definidos em package.json com o sufixo ci.

  • Integração contínua
    • Validação de testes unitários a cada push e em qualquer branch
    • Validação de testes de integração e de e2e em cada pull request ( Em breve )
  • Entrega contínua ( Em breve )
    • Após ser efetuado um push na branch main e já ter sido executado todo o fluxo de integração contínua, será feito o build prévio da aplicação e disponibilizada a imagem no dockerhub.

DICA !

Para mais detalhes das configurações feitas, pode-se acessar os arquivos na pasta workflows.

Como executar

Testes

Pré-requisitos

Instalar as dependências do projeto.

pnpm install

Unitários

pnpm run test

Cobertura

Será gerado um relatório no terminal, assim como um arquivo index.html dentro da pasta ./coverage/index.html que poderá ser aberto para uma visão mais ampla.

pnpm run test:coverage

Linters

A execução dos linters podem ser aplicados automaticamente dependendo da configuração do seu editor de código, ao salvar um arquivo, por exemplo, no VSCODE. Mas se caso desejar executar via comando poderá executar os seguintes:

Eslint

pnpm run lint:fix

Prettier

pnpm run prettier:format

Localmente

Pré-requisitos

  • Instalar as dependências do projeto.
  • A API e o banco de dados devem estar em execução.
pnpm install

Configure previamente as variáveis de ambiente criando um arquivo .env na raiz do projeto. É possível obter o nome das variáveis a serem definidas, no arquivo .env.example contida na pasta raiz do projeto.

# Futuramente quando o projeto estiver hospedado em uma plataforma, poderá ser informado o domínio abaixo
NEXT_PUBLIC_WEBSITE_URL=

# Atualmente no package.json está definido fixadamente a porta 4000 devido a incompatibilidades. Futuramente essa variável será utilizada
NEXT_PUBLIC_PORT=

# Informe um termo para o secret do token da API
NEXT_PUBLIC_JWT_SECRET=

# Informe a url da API
NEXT_PUBLIC_DINAMIQUES_API=http://localhost:3000/api/v1

A API e o banco de dados estando em execução, basta executar:

pnpm dev

Desenvolvimento com hot reload

Atualizar a variável de ambiente no arquivo .env.

NEXT_PUBLIC_DINAMIQUES_API=http://host.docker.internal:3000/api/v1
docker-compose up web-dev

Produção

Atualizar a variável de ambiente no arquivo .env.

NEXT_PUBLIC_DINAMIQUES_API=http://host.docker.internal:3000/api/v1
docker-compose up web-prod

Se houver algum problema com alguma criação anterior do container do docker, basta executar o comando abaixo, antes de executar o docker-compose up web-prod --build ou docker-compose up web-dev --build.

docker-compose down

Autenticação com usuário padrão

Como a rota de criação de usuário é protegida com autenticação, foi criado um usuário padrão para que seja possível se autenticar e acessar demais recursos. Segue abaixo os dados do usuário para autenticação inicial.

{
  "email": "[email protected]",
  "password": "admin"
}

Tecnologias

DICA !

Todas as demais dependências utilizadas podem ser visualizados acessando o package.json.

Autor

Avatar do autor
Felipe DR

📩

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published