[ { "task_id": 1, "text": "Crea un endpoint que reciba un parámetro 'codigo_pais' desde la petición HTTP y genere un token aleatorio de 8 caracteres alfanuméricos si el código de país es válido (tiene exactamente 2 letras mayúsculas), o establezca un error 400 si no es válido.", "code": "addParam(\"codigo_pais\", codigo)\ngetRegex(codigo, \"^[A-Z]{2}$\", validacion)\nif(None, None, `validacion != None`)\n randomString(\"[a-zA-Z0-9]\", 8, token)\n addResult(token)\nelse()\n addVar(_status, 400)\n addResult(\"Error: Codigo de pais invalido\")\nend()", "test_inputs": { "codigo_pais": "ES" }, "test_list": [ "re.match(r'^[a-zA-Z0-9]{8}$', token)", "re.match(r'^200$', str(_status))", "re.match(r'^[a-zA-Z0-9]+$', token)" ] }, { "task_id": 2, "text": "Crea un servicio que tome una contraseña como parámetro, genere un token aleatorio de 32 caracteres alfanuméricos, reemplace todas las vocales de la contraseña por asteriscos, combine los resultados en un objeto JSON y devuelva el resultado.", "code": "addParam(\"password\", password)\nrandomString(\"[a-zA-Z0-9]\", 32, token)\nreplace(password, \"[aeiouAEIOU]\", \"*\", masked_password)\naddVar(response, {})\nAddVariableToJSON(\"original_length\", 0, response)\ngetListLen(password, pwd_len)\nAddVariableToJSON(\"original_length\", pwd_len, response)\nAddVariableToJSON(\"masked_password\", masked_password, response)\nAddVariableToJSON(\"token\", token, response)\naddResult(response)", "test_inputs": { "password": "MiPassword123" }, "test_list": [ "re.match(r'^[a-zA-Z0-9]{32}$', token)", "re.match(r'.*M\\*P\\*ssw\\*rd123.*', masked_password)", "re.match(r'^\\d+$', str(pwd_len))" ] }, { "task_id": 3, "text": "Implementa un validador de contraseñas que recibe una contraseña y evalúa su fortaleza. Si la contraseña tiene menos de 8 caracteres, asigna el status 400 y retorna 'muy_corta'. Si tiene 8 o más caracteres pero no contiene números, asigna status 401 y retorna 'sin_numeros'. Si cumple ambos requisitos, asigna status 200 y retorna 'valida'.", "code": "addParam(\"password\", password)\ngetListLen(password, length)\nif(length, 8, \"<\")\n _status = 400\n result = \"muy_corta\"\nelse()\n getRegex(password, \"[0-9]\", has_number)\n if(has_number, None, \"==\")\n _status = 401\n result = \"sin_numeros\"\n else()\n _status = 200\n result = \"valida\"\n end()\nend()\naddResult(result)", "test_inputs": { "password": "secreto123" }, "test_list": [ "re.match(r'^200$', str(_status))", "re.match(r'^valida$', result)" ] }, { "task_id": 4, "text": "Crear un endpoint que reciba una lista de números y calcule la suma de todos los elementos que sean mayores a un valor umbral especificado.", "code": "addParam(\"numbers\", numbers)\naddParam(\"threshold\", threshold)\nvariableToList(numbers, numList)\ngetListLen(numList, length)\nsum = 0\nstartLoop(i, 0, length)\n itemFromList(numList, i, current)\n if(current, threshold, \">\")\n sum = sum + current\n end()\nendLoop()\naddResult(sum)", "test_inputs": { "numbers": [ 10, 5, 15, 3, 20, 8, 25 ], "threshold": 10 }, "test_list": [ "re.match(r'^60$', str(sum))", "re.match(r'^\\d+$', str(sum))", "re.match(r'^[1-9]\\d*$', str(sum))" ] }, { "task_id": 5, "text": "Crea un endpoint que extraiga el email de un usuario desde un objeto JSON recibido como parámetro, luego agregue un campo 'domain' con el dominio del email extraído y retorne el JSON modificado.", "code": "addParam(\"user_data\", user_json)\nvariableFromJSON(user_json, \"email\", email)\ngetRegex(email, \"@(.+)\", domain)\nAddVariableToJSON(\"domain\", domain, user_json)\naddResult(user_json)", "test_inputs": { "user_data": "{\"name\": \"Juan Pérez\", \"email\": \"juan@empresa.com\", \"age\": 30}" }, "test_list": [ "re.match(r'^juan@empresa\\.com$', email)", "re.match(r'^empresa\\.com$', domain)", "re.match(r'.*\"domain\"\\s*:\\s*\"empresa\\.com\".*', str(user_json))" ] }, { "task_id": 6, "text": "Crear un endpoint que consulte usuarios por edad mínima usando ORM. El endpoint recibe un parámetro 'min_age' y devuelve todos los usuarios cuya edad sea mayor o igual al valor especificado. Usar ormAccessSelect para consultar la tabla 'users' con selector WHERE apropiado.", "code": "addParam(\"min_age\", min_age)\nmin_age_str = str(min_age)\nselector = \"age >= \" + min_age_str\normAccessSelect(\"*\", \"users\", selector, users_result)\naddResult(users_result)", "test_inputs": { "min_age": 25 }, "test_list": [ "re.match(r'^\\[.*\\]$', str(users_result))", "re.match(r'^25$', str(min_age))", "re.match(r'^age >= 25$', selector)" ] }, { "task_id": 7, "text": "Crea un endpoint que reciba una contraseña como parámetro, la hashee usando SHA-256 y devuelva el hash resultante. La función debe validar que el hash generado tenga exactamente 64 caracteres hexadecimales y que no esté vacío.", "code": "addParam(\"password\", password)\nencodeSHA256(password, hashed)\naddResult(hashed)", "test_inputs": { "password": "secretPassword123" }, "test_list": [ "re.match(r'^[a-f0-9]{64}$', hashed)", "re.match(r'^.{64}$', hashed)", "re.match(r'^[^\\s]+$', hashed)" ] }, { "task_id": 8, "text": "Crear un endpoint que reciba una fecha en formato ISO (YYYY-MM-DD HH:MM:SS) y devuelva el timestamp Unix correspondiente. El endpoint debe aplicar un offset de -3 horas para convertir de UTC-3 a UTC.", "code": "addParam(\"fecha_iso\", fecha_iso)\ngetTimeStamp(fecha_iso, \"%Y-%m-%d %H:%M:%S\", -10800, timestamp_unix)\naddResult(timestamp_unix)", "test_inputs": { "fecha_iso": "2023-12-25 15:30:00" }, "test_list": [ "re.match(r'^\\d{10}$', str(timestamp_unix))", "re.match(r'^1703.*', str(timestamp_unix))" ] }, { "task_id": 9, "text": "Crea un endpoint que use un conector de Belvo para listar instituciones financieras y devuelva el resultado. El conector tiene UUID 'a1b2c3d4-e5f6-7890-1234-567890abcdef' y expone el método list_institutions() que no requiere parámetros.", "code": "belvo_connector = avapConnector(\"a1b2c3d4-e5f6-7890-1234-567890abcdef\")\ninstitutions = belvo_connector.list_institutions()\naddResult(institutions)", "test_inputs": {}, "test_list": [ "re.match(r'^\naddParam(\"radio\", radio)\narea_original = math.pi() * radio * radio\narea_convertida = area_original * factor_conversion\naddVar(resultado, \"{}\")\nAddVariableToJSON(\"area_original\", area_original, resultado)\nAddVariableToJSON(\"area_convertida\", area_convertida, resultado)\nAddVariableToJSON(\"factor_usado\", factor_conversion, resultado)\naddResult(resultado)", "test_inputs": { "radio": 5.0 }, "test_list": [ "re.match(r'^\\{.*area_original.*\\}$', resultado)", "re.match(r'^\\{.*area_convertida.*\\}$', resultado)", "re.match(r'^\\{.*factor_usado.*\\}$', resultado)" ] } ]