Emblemas
Os emblemas são pequenas conquistas que o omegaUp concede aos usuários - "resolveu 100 problemas", "codificador do mês", "administrador do concurso". O que os torna agradáveis de trabalhar é que um selo é quase inteiramente declarativo: você não escreve código que decide quem ganha, você escreve uma consulta SQL que seleciona quem o ganhou, coloca-o em uma pasta e omegaUp faz o resto. Implementar um é um caminho bastante conhecido.
Adicionando um selo, passo a passo
-
Escolha um alias. Ele deve ser exclusivo e ter no máximo 32 caracteres. Todo o resto é nomeado após isso.
-
Crie sua pasta. Crie um diretório em
frontend/badges/cujo name é exatamente o alias. A partir daqui este é o seubadgeFolder. -
Adicione um ícone (opcional). Se o emblema tiver um ícone personalizado, coloque seu SVG em
badgeFoldercomoicon.svg. -
Escreva a consulta de premiação. Crie
badgeFolder/query.sqlcontendo um único MySQLSELECTque retorna osuser_ids de cada usuário que deverá receber o crachá. Isto consulta é a lógica do emblema, então você precisa saber a forma dos dados - mantenha o esquema de banco de dados abra enquanto você o escreve e busque algo simples e armazenável em cache, em vez de inteligente. -
Adicione localizações. Crie
badgeFolder/localizations.jsoncom o nome e a descrição do crachá traduzidos para espanhol (es), inglês (en) e Português (pt). O nome pode ter no máximo 50 caracteres. -
Carregue as localizações. Execute
./stuff/lint.shpara que as strings emlocalizations.jsonsão propagados nos arquivos de mensagens correspondentes. -
Escreva o teste. Crie
badgeFolder/test.json. Seu campotestTypeescolhe como o execuções de teste de unidade do emblema:"testType": "apicall"— construa o cenário chamando APIs do controlador para criar os dados dos quais o crachá depende (problemas, usuários, concursos, corridas,…). Você descreve isso com um arrayactions, cujas entradas podem ser:changeTime— mova o relógio do sistema para poder testar crachás dependentes do tempo.apicalls— chama uma API específica, fornecendo o nome de usuário e a senha do usuário chamador e os parâmetros. As APIs são todos os métodosapi…estáticos públicos no controladores emfrontend/server/src/Controllers/.scripts— execute um dos scripts cron do omegaUp (aggregateFeedback,assignBadges,updateUserRank), que vivem emstuff/cron/.
Finalize um teste
apicallcom um campoexpectedResultslistando os nomes de usuário que deveria receber o crachá. VejacoderOfTheMonth/test.jsonpara um exemplo trabalhado."testType": "phpunit"— escreva um teste PHPUnit clássico chamado<alias>Test.php, salvo emfrontend/tests/badges/, seguindo a mesma estrutura dos outros testes unitários do omegaUp (e livre para usar o fábricas).
Cada um tem suas vantagens: prefira
phpunitpara um emblema que, de outra forma, precisaria de muitos chamadas de API quase idênticas; caso contrário,apicallsé a opção mais leve. -
Execute os testes para confirmar sua consulta e teste e realmente conceda o selo à direita pessoas:
9. Abra a solicitação pull. Se nada der errado, seu crachá está pronto – envie-o../vendor/bin/phpunit --bootstrap frontend/tests/bootstrap.php \ --configuration frontend/tests/phpunit.xml frontend/tests/badges/ --debug # or simply ./stuff/runtests.sh
Para referência, dois PRs de emblemas mesclados são bons modelos a serem seguidos: Administrador do concurso e Administrador do Concurso Virtual.
Se algo não estiver claro enquanto você constrói um, não hesite em entrar em contato - consulte Obtendo ajuda.