Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature (API) - Adiciona query params para filtrar lista de conteúdos do usuário #1188

Merged
merged 1 commit into from
Dec 18, 2023

Conversation

ErickCReis
Copy link
Contributor

@ErickCReis ErickCReis commented Dec 27, 2022

Atualização

Deixei apenas os ajustes de api nesse pr


image Captura de tela de 2022-12-26 22-35-57

Temos algumas issues sobre essa feature, então resolvi fazer uns testes aqui.

#807
#891
#1046
#1093

@vercel
Copy link

vercel bot commented Dec 27, 2022

@ErickCReis is attempting to deploy a commit to the TabNews Team on Vercel.

A member of the Team first needs to authorize it.

models/validator.js Outdated Show resolved Hide resolved
@ErickCReis ErickCReis marked this pull request as draft December 27, 2022 02:02
@vercel
Copy link

vercel bot commented Dec 27, 2022

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
tabnews ✅ Ready (Inspect) Visit Preview 💬 Add feedback Dec 18, 2023 10:23am

@ErickCReis ErickCReis changed the title Adiciona tabs no perfil para separar publicações e comentários Feature (API) - Adiciona query params para filtrar lista de conteúdos do usuário Feb 28, 2023
@ErickCReis
Copy link
Contributor Author

@aprendendofelipe

Sei que o foco da milestone não é esse, mas tive um tempinho para voltar a ver esse pr.

Acabei decidindo remover os ajustes no front, acho que precisamos pensar um pouco mais em como deve ser o funcionamento, por conta disso preferi separar as coisas.

Fiz mais alguns testes mas não consegui encontrar uma solução legal para resolver a paginação na tela de perfil.
Hoje temos a página [username]/pagina/[page] e não sei muito bem como ela deveria funcionar considerando as tabs Publicações e Comentários com estados diferentes.

@ErickCReis ErickCReis marked this pull request as ready for review March 2, 2023 14:55
Copy link
Collaborator

@Rafatcb Rafatcb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Erick, isso é uma ótima adição ao projeto! Dei uma olhada no código e deixei algumas observações, a principal é sobre a mudança do nome showComments. Me diga o que acha 👍

Sobre as sugestões para remover as variáveis não usadas: agora temos uma regra ativa do ESLint para isso, após atualizar sua branch com o main você verá os erros.

tests/integration/api/v1/contents/[username]/get.test.js Outdated Show resolved Hide resolved
tests/integration/api/v1/contents/[username]/get.test.js Outdated Show resolved Hide resolved
tests/integration/api/v1/contents/[username]/get.test.js Outdated Show resolved Hide resolved
tests/integration/api/v1/contents/[username]/get.test.js Outdated Show resolved Hide resolved
tests/integration/api/v1/contents/[username]/get.test.js Outdated Show resolved Hide resolved
tests/integration/api/v1/contents/[username]/get.test.js Outdated Show resolved Hide resolved
pages/api/v1/contents/[username]/index.public.js Outdated Show resolved Hide resolved
@Rafatcb Rafatcb added pendente Aguardando ação do autor do Pull Request back Envolve modificações no backend labels Dec 17, 2023
Copy link
Collaborator

@aprendendofelipe aprendendofelipe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Realmente a funcionalidade desse PR é muito esperada 🎉. Infelizmente eu não dei conta de revisar no momento que ele foi aberto (nem na segunda versão), pois a demanda estava muito alta naquele período.

Mas vamos tentar levar ele para produção (ou abrir um novo, se for mais fácil). 🤝🚀

Front

Eu gostei muito do design! Talvez para adaptar ao que temos hoje, adicionaria a aba "Perfil", que seria a padrão se o usuário tiver cadastrado algo, e ao clicar nas outras abas navegaria para as respectivas páginas (root ou child), cada uma com sua paginação.

Provavelmente será melhor só mostrar a aba "Perfil" se o usuário cadastrou algo.

Endereços

Na /[username] abrir a aba "Perfil" se o usuário tiver algo cadastrado, caso contrário, redirecionar para a "Conteúdos".

E para os "Conteúdos" e "Respostas", que tal:

Opção 1 - Mais próximo do atual

Talvez manter o padrão atual para os root, onde apenas mudaria que para ver a primeira página raiz, obrigatoriamente precisaria ir para /[username]/pagina/1, pois a /[username] abriria só o perfil.

Para os comentários, talvez criar a /[username]/respostas/pagina/[page], ou algo melhor.

  • /[username]/pagina/[page]
  • /[username]/respostas/pagina/[page]

Opção 2 - Remover /pagina

Eu não vejo necessidade da /pagina, e não lembro se houve alguma discussão sobre essa necessidade, então gostaria de saber a opinião sobre usar:

  • /[username]/conteudos/[page]
  • /[username]/respostas/[page]

Acredito que o plural seja suficiente para informar que /[username]/conteudos/3 não vai abrir o conteúdo 3, mas sim o bloco 3 de conteúdos.

Back

Para auxiliar nas ideias sobre o backend, recomendo darem uma olhada em alguns pontos do PR #1413 (especificamente o 5d06a21).

Pode ser que algo de lá seja aproveitado. Só não se assustem, pois aquele PR faz muito mais coisas, como otimizações e deixa o endpoint contents flexível (dá até para buscar o conteúdo por ID). Inclusive alguns pontos dele já estão em produção. Acho que algumas coisas de lá podem ser aplicadas ao /api/v1/contents/[username].

Por exemplo, lá eu usei os parâmetros with_root e with_children. Então é possível pedir os dois tipos ou apenas um deles em uma mesma requisição.

Também recomendo dar uma olhada como eu fiz para poder fazer a consulta usando $not_null, e não foi necessário adicionar o $null.

@ErickCReis
Copy link
Contributor Author

@Rafatcb e @aprendendofelipe muito obrigado pelos comentários.

Back

Realmente o showComments não estava muito legal, optei por utilizar a sugestão do @aprendendofelipe e adicionar dois parâmetros independentes (with_root e with_children), na prática eles só terão efeito caso sejam setados como false, optei por essa abordagem pq assim podemos seguir com esse pr apenas para a mudança na api, não tenho certeza se é a melhor opção.

Front

Gostei bastante das sugestões do @aprendendofelipe, acho que faz sentido uma terceira aba para o perfil, mas ainda tenho algumas dúvidas:

  1. Na página principal (/[username]), teríamos os dados do usuário, 3 abas (Perfil, Publicações e Comentários) e dados do perfil, certo? Ou ainda teríamos os conteúdos na sequência?
  2. Ao acessar alguma pagina com paginação, teríamos algum header, como as abas por exemplo, ou apenas a lista de conteúdos como é hoje?

Será que faz sentido separar front e back em prs distintos? O back me parece ser mais simples e já está mais avançado já com relação ao front acho que vai ser algo mais complexo.


E para os "Conteúdos" e "Respostas", que tal:

Pra mim a opção 2 faz mais sentido

@Rafatcb Rafatcb removed the pendente Aguardando ação do autor do Pull Request label Dec 17, 2023
@aprendendofelipe
Copy link
Collaborator

(with_root e with_children), na prática eles só terão efeito caso sejam setados como false

Boa ideia! Acho que assim não quebra a interface atual da API. 👍

  1. Na página principal (/[username]), teríamos os dados do usuário, 3 abas (Perfil, Publicações e Comentários) e dados do perfil, certo? Ou ainda teríamos os conteúdos na sequência?
  1. Ao acessar alguma pagina com paginação, teríamos algum header, como as abas por exemplo, ou apenas a lista de conteúdos como é hoje?

Acho que pode deixar só o username como cabeçalho de todas as abas/páginas. Daí elimina a necessidade de redirecionar se o usuário não tiver cadastrado o perfil, pois já vai aparecer no mínimo os saldos e o tempo de criação do usuário dentro da aba "Perfil".

E não precisa listar os conteúdos nessa página. Acho que pode deixar apenas as listas separadas, ou criar uma nova aba em que sejam listados os dois tipos de publicações juntos, mas, a princípio, não vejo necessidade de manter uma versão igual a atual.

Será que faz sentido separar front e back em prs distintos? O back me parece ser mais simples e já está mais avançado já com relação ao front acho que vai ser algo mais complexo.

Show, separado é melhor mesmo! 👍

Copy link
Collaborator

@Rafatcb Rafatcb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Também acho melhor um PR separado para o front, isso facilitará a discussão também.

Deixei um comentário no PR só, que é uma dúvida minha.

.when('$required.with_children', { is: 'required', then: Joi.required(), otherwise: Joi.optional() })
.messages({
'any.required': `"with_children" é um campo obrigatório.`,
'string.empty': `"with_children" não pode estar em branco.`,
Copy link
Collaborator

@Rafatcb Rafatcb Dec 17, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sei que esse não é o único lugar que tem a validação string.empty em um campo boolean, mas quando ela é acionada? Nos testes que eu havia feito (antes das alterações do PR de hoje) não consegui simular um cenário em que ela fosse necessária.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acabei apenas copiando de outros schemas, lendo a documentação não encontrei nada a respeito, acredito que podemos remover.

Posso remover apenas desses dois schemas ou aproveito para remover dos outros tbm?

Copy link
Collaborator

@Rafatcb Rafatcb Dec 17, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Creio que poderia remover de todos campos booleanos, mas prefiro aguardar uma confirmação do @aprendendofelipe.

Não cheguei a testar se essa validação influencia em algo caso o parâmetro esteja no body, testei apenas como parâmetro da query.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Podemos remover sim a mensagem de string.empty dos campos booleanos 👍

Mas acho que vamos fazer isso em outro PR, pois pra mim esse aqui está pronto 🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
back Envolve modificações no backend
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants