Insignias
Las insignias son los pequeños logros que omegaUp otorga a los usuarios: "resolvió 100 problemas", "codificador del mes", "administrador del concurso". Lo que hace que sea agradable trabajar con ellos es que una insignia es casi enteramente declarativa: no se escribe código que decida quién lo gana, escribes una consulta SQL que selecciona quién se lo ganó, la colocas en una carpeta y omegaUp hace el resto. Implementar uno es un camino muy transitado.
Agregar una insignia, paso a paso
-
Elija un alias. Debe ser único y tener como máximo 32 caracteres. Todo lo demás es lleva su nombre.
-
Crea su carpeta. Crea un directorio en
frontend/badges/cuyo El nombre es exactamente el alias. De aquí en adelante este es tubadgeFolder. -
Agregue un ícono (opcional). Si la insignia tiene un ícono personalizado, coloque su SVG en
badgeFoldercomoicon.svg. -
Escriba la consulta de adjudicación. Cree
badgeFolder/query.sqlque contenga un solo MySQLSELECTque devuelve losuser_idde cada usuario que debería recibir la insignia. esto La consulta es la lógica de la insignia, por lo que necesita conocer la forma de los datos; mantenga la esquema de base de datos ábralo mientras lo escribe y busque algo simple y que se pueda almacenar en caché en lugar de algo inteligente. -
Agregar localizaciones. Crear
badgeFolder/localizations.jsoncon el nombre y la descripción de la insignia traducidos al español (es), inglés (en) y Portugués (pt). El nombre puede tener como máximo 50 caracteres. -
Cargue las localizaciones. Ejecute
./stuff/lint.shpara que las cadenas enlocalizations.jsonse propagan a los archivos de mensajes correspondientes. -
Escribe la prueba. Crea
badgeFolder/test.json. Su campotestTypeelige cómo La prueba unitaria de la insignia se ejecuta:"testType": "apicall": cree el escenario llamando a las API del controlador para crear los datos de los que depende la insignia (problemas, usuarios, concursos, tiradas,…). tu lo describe con un arregloactions, cuyas entradas pueden ser:changeTime: mueve el reloj del sistema para que puedas probar insignias dependientes del tiempo.apicalls: llama a una API específica y proporciona el nombre de usuario y la contraseña del usuario que llama. y los parámetros. Las API son todos los métodos públicos estáticosapi…en el controladores enfrontend/server/src/Controllers/.scripts: ejecuta uno de los scripts cron de omegaUp (aggregateFeedback,assignBadges,updateUserRank), que viven enstuff/cron/.
Finalice una prueba
apicallcon un campoexpectedResultsque enumere los nombres de usuario que debería recibir la insignia. VercoderOfTheMonth/test.jsonpara un ejemplo trabajado."testType": "phpunit"— escribe una prueba PHPUnit clásica llamada<alias>Test.php, guardado bajofrontend/tests/badges/, siguiendo la misma estructura que las otras pruebas unitarias de omegaUp (y de uso gratuito fábricas).
Cada uno tiene sus ventajas y desventajas: prefiera
phpunitpara una insignia que de otro modo necesitaría muchas llamadas API casi idénticas; de lo contrario,apicallses la opción más ligera. -
Ejecute las pruebas para confirmar su consulta y la prueba otorgará la insignia a la derecha. gente:
9. Abra la solicitud de extracción. Si no hay ningún error, su credencial está lista: envíela../vendor/bin/phpunit --bootstrap frontend/tests/bootstrap.php \ --configuration frontend/tests/phpunit.xml frontend/tests/badges/ --debug # or simply ./stuff/runtests.sh
Como referencia, dos RP de insignia fusionados son buenas plantillas a seguir: Administrador del concurso y Administrador del concurso virtual.
Si algo no queda claro mientras crea uno, no dude en comunicarse; consulte Obteniendo ayuda.