Ir para o conteúdo

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.