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

Update README.md with <details> tag #557

Closed
wants to merge 6 commits into from

Conversation

gabrielsozinho
Copy link
Contributor

@gabrielsozinho gabrielsozinho commented Jul 24, 2022

A tag <details> serve para ocultar o texto e apenas exibir quando <summary> for clicado.

exemplo:

clique aqui para exibir
exibindo tudo

Além disso, organizei toda a parte da documentação.

A tag <details> serve para ocultar o texto e apenas exibir quando <summary> for clicado.

Além disso, organizei toda a parte da documentação.
@vercel
Copy link

vercel bot commented Jul 24, 2022

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

To accomplish this, @gabrielsozinho needs to request access to the Team.

Afterwards, an owner of the Team is required to accept their membership request.

If you're already a member of the respective Vercel Team, make sure that your Personal Vercel Account is connected to your GitHub account.

@gabrielsozinho gabrielsozinho added the documentação Documentação e organização de processos label Jul 24, 2022
@gabrielsozinho
Copy link
Contributor Author

Só pra deixar registrado, alterações que fiz hoje aqui:

  1. Alterei a formatação da documentação usando como base as documentações da Microsoft, pois antes estava desorganizado e confuso demais.
  2. Alterei a estratégia de ranqueamento que antes era best e passou para relevant.
  3. Adicionei outras funções da API na documentação.
  4. Aproveitei também e adicionei o que foi feito na PR Adiciona lista de contribuidores no README e página /status #729 na parte do README.

@filipedeschamps
Copy link
Owner

@gabrielsozinho sensacional meu caro!!! Está ficando muito legal!!! 🤝 👍

Em paralelo, para conseguir concluir essa Milestone, optei por empurrar a Documentação da API para a próxima Milestone, e isto então também terá impacto no PR #599 do @CarlosZiegler

De qualquer forma, vou deixar registrado um rabisco aqui que estava na minha mente, que é organizar os endpoints por método e rota, por exemplo:


Documentação da API

Endereço base de Produção: https://www.tabnews.com.br/
Endereço base de Homologação: https://tabnews-git-preview-tabnews.vercel.app/

GET /api/v1/contents

Listar os conteúdo existentes.

Query string Default Descrição
page 1 O número da página que você deseja acessar.
per_page 30 O número de conteúdos que devem ser retornados por página.
strategy relevant Ordem de classificação dos conteúdos, pode ser definida como new, old e relevant.
Exemplos

Listando os últimos conteúdos mais relevantes

test('With 3 children 3 level deep and default strategy', async () => {
const defaultUser = await orchestrator.createUser();
const rootContent = await orchestrator.createContent({
owner_id: defaultUser.id,
title: 'Conteúdo raiz',
status: 'published',
});
const level1Content = await orchestrator.createContent({
owner_id: defaultUser.id,
parent_id: rootContent.id,
body: 'Nível 1',
status: 'published',
});
const level2Content = await orchestrator.createContent({
owner_id: defaultUser.id,
parent_id: level1Content.id,
body: 'Nível 2',
status: 'published',
});
const level3Content = await orchestrator.createContent({
owner_id: defaultUser.id,
parent_id: level2Content.id,
body: 'Nível 3',
status: 'published',
});
const level4ContentDeleted = await orchestrator.createContent({
owner_id: defaultUser.id,
parent_id: level2Content.id,
body: 'Nível 4 (vai ser deletado e não deve ser contabilizado)',
status: 'published',
});
await orchestrator.updateContent(level4ContentDeleted.id, { status: 'deleted' });
const response = await fetch(`${orchestrator.webserverUrl}/api/v1/contents`);
const responseBody = await response.json();
expect(response.status).toEqual(200);
expect(responseBody).toStrictEqual([
{
id: rootContent.id,
owner_id: defaultUser.id,
parent_id: null,
slug: 'conteudo-raiz',
title: 'Conteúdo raiz',
status: 'published',
source_url: null,
created_at: rootContent.created_at.toISOString(),
updated_at: rootContent.updated_at.toISOString(),
published_at: rootContent.published_at.toISOString(),
deleted_at: null,
tabcoins: 1,
owner_username: defaultUser.username,
children_deep_count: 3,
},
]);
});

POST /api/v1/contents

Criar novos conteúdos.

Body Default Descrição
title N/A Título da publicação. Obrigatório quando conteúdo root.
body N/A O corpo da publicação. Obrigatório quando conteúdo root.
status draft O status da publicação. Pode ser definida como draft e published.
... ... ...
Exemplos

Criando uma publicação root

test('"root" content with minimum valid data', async () => {
const defaultUser = await orchestrator.createUser();
await orchestrator.activateUser(defaultUser);
const sessionObject = await orchestrator.createSession(defaultUser);
const response = await fetch(`${orchestrator.webserverUrl}/api/v1/contents`, {
method: 'post',
headers: {
'Content-Type': 'application/json',
cookie: `session_id=${sessionObject.token}`,
},
body: JSON.stringify({
title:
'Deveria conseguir! E o campo "slug" é opcional & 95,5% dos usuários não usam :) [áéíóú?@#$*<>|+-=.,;:_] <- (caracteres especiais)',
body: 'Deveria conseguir, pois atualmente todos os usuários recebem todas as features relacionadas a "content".',
}),
});
const responseBody = await response.json();
expect(response.status).toEqual(201);
expect(responseBody).toStrictEqual({
id: responseBody.id,
owner_id: defaultUser.id,
parent_id: null,
slug: 'deveria-conseguir-e-o-campo-slug-e-opcional-e-95-5-por-cento-dos-usuarios-nao-usam-aeiou-caracteres-especiais',
title:
'Deveria conseguir! E o campo "slug" é opcional & 95,5% dos usuários não usam :) [áéíóú?@#$*<>|+-=.,;:_] <- (caracteres especiais)',
body: 'Deveria conseguir, pois atualmente todos os usuários recebem todas as features relacionadas a "content".',
status: 'draft',
source_url: null,
created_at: responseBody.created_at,
updated_at: responseBody.updated_at,
published_at: null,
deleted_at: null,
tabcoins: 0,
owner_username: defaultUser.username,
});
expect(uuidVersion(responseBody.id)).toEqual(4);
expect(Date.parse(responseBody.created_at)).not.toEqual(NaN);
expect(Date.parse(responseBody.updated_at)).not.toEqual(NaN);
});

Criando uma publicação child

test('"child" content with minimum valid data', async () => {
const defaultUser = await orchestrator.createUser();
await orchestrator.activateUser(defaultUser);
const sessionObject = await orchestrator.createSession(defaultUser);
const rootContent = await orchestrator.createContent({
owner_id: defaultUser.id,
title: 'Conteúdo raiz',
status: 'published',
});
const response = await fetch(`${orchestrator.webserverUrl}/api/v1/contents`, {
method: 'post',
headers: {
'Content-Type': 'application/json',
cookie: `session_id=${sessionObject.token}`,
},
body: JSON.stringify({
body: 'Deveria conseguir, pois atualmente todos os usuários recebem todas as features relacionadas a "content".',
parent_id: rootContent.id,
}),
});
const responseBody = await response.json();
expect(response.status).toEqual(201);
expect(responseBody).toStrictEqual({
id: responseBody.id,
owner_id: defaultUser.id,
parent_id: rootContent.id,
slug: responseBody.slug,
title: null,
body: 'Deveria conseguir, pois atualmente todos os usuários recebem todas as features relacionadas a "content".',
status: 'draft',
source_url: null,
created_at: responseBody.created_at,
updated_at: responseBody.updated_at,
published_at: null,
deleted_at: null,
tabcoins: 0,
owner_username: defaultUser.username,
});
expect(uuidVersion(responseBody.id)).toEqual(4);
expect(uuidVersion(responseBody.slug)).toEqual(4);
expect(Date.parse(responseBody.created_at)).not.toEqual(NaN);
expect(Date.parse(responseBody.updated_at)).not.toEqual(NaN);
});


Não sei como ficaria com os outros métodos e tem outras coisas que eu gostaria de testar ainda sobre essa ideia, mas eu gostaria de deixar registrado esse rabisco. De qualquer fora, por hora vou me focar em conseguir concluir a Milestone antes de entrar numa issue grande e mega importante como essa 🤝 😍

@gabrielsozinho gabrielsozinho changed the base branch from gabrielsozinho-patch-1 to main November 25, 2022 22:29
@aprendendofelipe
Copy link
Collaborator

@gabrielsozinho, obrigado pelo PR! 💪

Registrei a existência dele na issue sobre a documentação da API (#555), então esse trabalho pode ser aproveitado em um PR atualizado.

Vou fechar esse por enquanto. 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentação Documentação e organização de processos
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants