Este guia explica como criar um sistema de rascunho. Você gerenciará o status de rascunho, publicado e arquivado.
O que queremos aqui é buscar apenas dados que tenham um status publicado.
Mas não queremos usar parâmetros (por exemplo, /articles?status=published) porque você pode facilmente falsificar os parâmetros.
Para poder fazer isso, primeiro você precisa entender alguns conceitos.
Quando você cria um tipo de conteúdo, ele gera uma API com a seguinte endpoint list.
Cada um desses endpoints dispara uma ação do controlador. Aqui está a lista de ações do controlador que existem por padrão quando um tipo de conteúdo é criado.
Se você verificar o arquivo do controlador da API gerada ./api/{content-type}/controller/{Content-Type}.js, verá um arquivo vazio. Isso ocorre porque toda a lógica padrão é gerenciada pelo Strapi. Mas você pode substituir essas ações por seu próprio código.
E é isso que faremos para filtrar para o status publicado por padrão.
No nosso exemplo, usaremos um tipo de conteúdo Artigo. Por padrão, ao buscar artigos, você obtém todos os artigos. Vamos considerar que você não deseja expor artigos que estão no status de rascunho ou arquivo.
Para aplicar essa regra, personalizaremos a ação que busca todos os artigos para apenas buscar artigos publicados.
Para seguir o exemplo, você precisará criar um tipo de artigo e adicionar a seguinte definição de campo:
atributo de string chamado title
atributo de text chamado content
atributo de enumeration chamado status com draft, published, archive
Em seguida, adicione alguns dados com status diferente.
Para personalizar a função que busca todos os nossos artigos, precisamos substituir a função de localização.
Primeiro, para ver a diferença, vamos solicitar GET /articles. Você verá todos os dados que você criou. Agora vamos começar a personalização.
Atalho - ./api/article/controller/Article.js
Depois de salvar a nova função, vamos reiniciar a solicitação GET /articles. Veremos strapi como resposta.
Agora sabemos a função que precisamos atualizar, mas queremos apenas personalizar os valores do artigo retornados.
Na documentação do controlador, você encontrará a implementação padrão de todas as ações. Isso o ajudará a sobrescrever a lógica de busca
Atalho - ./api/article/controller/Article.js
E agora os dados estão de volta em GET /articles
Aqui, queremos força para buscar artigos com status igual ao publicado.
A maneira de fazer isso é definir ctx.query.status para publicado. Isso forçará o filtro da consulta.
Atalho - ./api/restaurant/controller/Restaurant.js
E tada! Artigos de rascunho e arquivo desapareceram.
*DICA
Este guia pode ser aplicado a qualquer outra ação do controlador.