Bibliotecas de Desafios¶
No dia 02/11/2022 foi lançado a v1.24.0 do aplicativo com uma refatoração na forma de listar os desafios.
Antes cada section era uma query distinta. Temos um Array formatado no Remote Config SECTION_DESAFIOS com filtros e outros detalhes de section.
Exemplo:
[
{
"key": "pack-pre-enem-2022",
"nome": "Especial ENEM 2022",
"variables": {
"desafioFilters": {
"tag": "pack-pre-enem-2022",
"finalizado": false,
"disponivel": true
},
"limit": 11
}
},
{
"key": "concluidos",
"nome": "Concluídos",
"variables": {
"desafioFilters": {
"finalizado": true,
"disponivel": true
},
"limit": 10
}
}
]
Agora, para a Home de Desafios fica sobre responsabilidade da Query desafiosLibrary.
Query¶
Arquivo
resolvers/desafio.ts
desafiosLibrary(
template: String
desafioFilters: FilterDesafio
): [DesafioLibrary]
No resolver é feito a autenticação do usuário e logo mais a regra da busca está em:
domain/desafios/library
Exemplo:
DesafioLibraryService.getDesafiosLibrary({
customClaims,
userId: "firebase-uid",
desafioFilters: { materia: "Fisica", vestibular: "ENEM"},
// default || desafio || aproveitamento
template
})
Para primeira versão os dados ainda não estão totalmente estruturado então os dados se sections está em um arquivo json em:
data/sections-desafios.json
Dentro do arquivo há uma section dinâmica com ID user-recommendation. Para gerar essa recomendação é ussados assuntos que serão aplicados como filtros para buscar por desafios baseados nos campo topAssuntos.
{
"id": "user-recommendation",
"nome": "Recomendados para você",
"variables": {
"desafioFilters": {
"finalizado": false,
"disponivel": true
},
"limit": 10
}
}
Desafios (retorno)¶
Array com a estrutura abaixo:
interface SectionDesafio {
id: string;
name: string;
data: Desafio[];
variables: {
desafioFilters: JSONObject<Desafio>;
limit?: number;
skip?: number;
};
}
O Campo desafioFilters tem suporte para aceitar quaisquer campos presente na collection desafios, então podendo aplicar qualquer filtro.
variables: {
desafioFilters: JSONObject<Desafio>;
limit?: number;
skip?: number;
};
Quando o usuário clica em Mostrar Todos no app ele será redirecionado para essa tela:

O campo variables vai ser usado para realizar o Get na lista de desafios.