{"id":21763443,"url":"https://github.com/dan920-dev/nasa-backend-java-test","last_synced_at":"2026-05-10T05:33:33.466Z","repository":{"id":221464803,"uuid":"754377276","full_name":"Dan920-Dev/nasa-backend-java-test","owner":"Dan920-Dev","description":null,"archived":false,"fork":false,"pushed_at":"2024-02-08T20:02:06.000Z","size":92,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-21T04:44:23.167Z","etag":null,"topics":["hibernate-jpa","java","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Dan920-Dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-02-07T23:24:58.000Z","updated_at":"2024-03-12T03:24:16.000Z","dependencies_parsed_at":"2024-02-08T05:44:56.295Z","dependency_job_id":null,"html_url":"https://github.com/Dan920-Dev/nasa-backend-java-test","commit_stats":null,"previous_names":["dan920-dev/nasa-backend-java-test"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Dan920-Dev/nasa-backend-java-test","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dan920-Dev%2Fnasa-backend-java-test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dan920-Dev%2Fnasa-backend-java-test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dan920-Dev%2Fnasa-backend-java-test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dan920-Dev%2Fnasa-backend-java-test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Dan920-Dev","download_url":"https://codeload.github.com/Dan920-Dev/nasa-backend-java-test/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dan920-Dev%2Fnasa-backend-java-test/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261636431,"owners_count":23188025,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hibernate-jpa","java","spring-boot"],"created_at":"2024-11-26T12:15:23.892Z","updated_at":"2026-05-10T05:33:33.424Z","avatar_url":"https://github.com/Dan920-Dev.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ORIGEN](http://www.origencorp.net/) \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tJAVA Nasa Technical Test ✍\n\t\t\t\t\t\t\t\t\t\t\nEste test es para poder aplicar a la posición de JAVA Developer. Una vez accedas a este repositorio, sigue los siguientes pasos e indicaciones, por favor leer detalladamente.  \n\nHerramientas a instalar \n\u003e Instalar Java versión 11.\n \n\u003e Instalar Postgresql como servidor de DB.\n\n\u003e Instalar PGADMIN o tu cliente DB favorito.\n \n\u003e Instalar POSTMAN como cliente API  o tu cliente favorito.\n\n\u003e Instalar Spring Tool Suit 4 (recomendado) o tu IDE favorito.\n \n\u003e Instalar GIT. \n\nVerificar que todas las herramientas anteriormente hayan sido instaladas de forma correcta. \n\n## Objetivos\n\n\u003e Desarrollar un aplicativo que ejecute una tarea automática cada minuto y permita el consumo de una API de la National Aeronautics and Space Administration - NASA para que los datos obtenidos se almacene en la DB \n\n\u003e Desarrollar una API que pueda consumir los datos guardados en la DB y poder mostrarlo en un cliente POSTMAN. \n\n\n## Estructura proyecto\n\nEn este repositorio, en la rama Master, encontraras un proyecto utilizando el framework Spring Boot 2.7.7, que sigue la arquitectura hexagonal y DDD (Domain-driven design), el cuál busca la independecia de la logica de negocio y otras clases de uso rutinario o externas. \nActualmente el proyecto cuenta con una seria de package creados los cuales son:\n1. clienterest \n2. dto \n3. entites\n4. repository \n5. restcontroller \n6. taskscheduler \n\nSe explica a continuación cada una de ellas:\n\u003e clienterest:\nIncluir todo código que haga referencia al consumo del  servicio externo NASA. \n\n\u003e dto: \nIncluir todas aquellas clases que seran los modelos. \n\n\u003e entites:\nIncluir todas aquellas clases que haran referencia a las tablas de DB.\n\n\u003e repository:\nIncluir todo código que haga referencia a la persistencia de datos contra la DB.\n\n\u003e restcontroller:\nIncluir todo código que haga referencia a la creación de controladores y APIS que serán consumidasm por POSTMAN\n\n\u003e taskscheduler:\nIncluir todo código que haga referencia al cronometro que se disparara de forma asíncrona para ejecutar el consumo de servicio externo NASA\n\nNota: \n- Se aclara que usted puede crear otros packages, no utilizar algunos de los anteriores explicados si así lo desea; pero siempre y cuando se respete la arquitectura hexagonal. \n- A nivel del archivo POM.XML se han instalado las dependencias necesarias para el uso y desarrollo del proyecto, pero si usted considera conveniente instalar una dependencia extra es libre de hacerlo. \n- Se crean ciertas clases e interfaces a nivel del proyecto, esto como archivos pruebas, pueda hacer uso de ellos o no. \n\n## API NASA\n\nPara esta prueba se utilizara una API expuesta por la NASA, la cuál consiste en realizar busquedas mediante nombre y esta nos retornara todos los registros que convergan. Para mas información y detalle, puede revisar el siguiente enlace [check out the NASA-API documentation here](https://images.nasa.gov/docs/images.nasa.gov_api_docs.pdf).\n\nLa API del tipo GET que consumiremos sera la siguiente\n\u003e https://images-api.nasa.gov/search?q={PARAMETRO_BUSQUEDA}\n\nPodemos observar que la estructura de la API recibe un QueryParams {q}, el cuál debe capturar el valor por donde realizar la búsqueda, para tal caso el valor que se ocupara sera \"apollo 2011\", o si en dado caso desea utilizar otras palabras de busqueda podra hacerlo e indicarlas el día de la entrevista. \n\nEjemplo de como se sería la API de busqueda con un paramentro indicado. \n\u003e https://images-api.nasa.gov/search?q=apollo%2011\n\n## Estructura API NASA \nEn el documento compartido [check out the NASA-API documentation here](https://images.nasa.gov/docs/images.nasa.gov_api_docs.pdf). se ejemplica como es la estructura que se recibe por parte de la API NASA, a continuación se detalla una estructura ejemplo: \n```\n{\n    \"collection\": {\n        \"version\": \"1.0\",\n        \"href\": \"http://images-api.nasa.gov/search?q=Apollo%2011%20Overview\",\n        \"items\": [\n            {\n                \"href\": \"https://images-assets.nasa.gov/video/Apollo 11 Overview/collection.json\",\n                \"data\": [\n                    {\n                        \"center\": \"HQ\",\n                        \"title\": \"Apollo 11 Overview\",\n                        \"keywords\": [\n                            \"Apollo 11\",\n                            \"Moon\"\n                        ],\n                        \"nasa_id\": \"Apollo 11 Overview\",\n                        \"date_created\": \"2013-05-15T00:00:00Z\",\n                        \"media_type\": \"video\",\n                        \"description\": \"Video highlights from the historic first manned landing on the moon.\"\n                    }\n                ],\n                \"links\": [\n                    {\n                        \"href\": \"https://images-assets.nasa.gov/video/Apollo 11 Overview/Apollo 11 Overview~thumb.jpg\",\n                        \"rel\": \"preview\",\n                        \"render\": \"image\"\n                    },\n                    {\n                        \"href\": \"https://images-assets.nasa.gov/video/Apollo 11 Overview/Apollo 11 Overview.srt\",\n                        \"rel\": \"captions\"\n                    }\n                ]\n            }\n        ],\n        \"metadata\": {\n            \"total_hits\": 1\n        }\n    }\n}\n```\n\n## ¿Qué esperamos ? \nEsperamos que su código funcione sin errores e implemente las siguientes características:\n\nEl aplicativo a desarrollar se resumen en tres tareas principales:\n### Tarea 1\nCrear una tabla a nivel de DB la cual contenga los campos \n- href\n- center\n- title\n- nasa_id\n\n#### Importante\n- A la vez se necesita que exista un campo de auditoría para guardar la fecha y hora de creación del registro, el campo puede ser llamado como usted desee. \n- No olvidar el campo ID y que sea autoincrementable. Queda a su elección de que manera hara que el campo ID sea autoincrementable. \n\n### Tarea 2\nQue se pueda consumir el servicio  explicada en el apartado API NASA; esta tarea debe realizarse de manera automática, ejecutarse cada 1 minuto y almacenar los valores obtenidos de la respuesta a nivel de DB. Los valores a tener que guardar serán los sguientes: \n 1. href : Ubicada al mismo nivel de la propiedad data (Se indica con una flecha)\n ```\n  \"items\": [\n            {\n             ---\u003e   \"href\": \"https://images-assets.nasa.gov/video/Apollo 11 Overview/collection.json\",\n                \"data\": [\n                    {\n ```\n 2. center: Ubicada dentro de la propiedad data (Se indica con una flecha)\n ```\n  \"data\": [\n                    {\n             ---\u003e       \"center\": \"HQ\",\n                        \"title\": \"Apollo 11 Overview\",\n                        \"keywords\": [\n                            \"Apollo 11\",\n                            \"Moon\"\n                        ],\n                        \"nasa_id\": \"Apollo 11 Overview\",\n                        \"date_created\": \"2013-05-15T00:00:00Z\",\n                        \"media_type\": \"video\",\n                        \"description\": \"Video highlights from the historic first manned landing ..\"\n                    }\n                ]\n ```\n 3. title: Ubicada dentro de la propiedad data (Se indica con una flecha) \n  ```\n  \"data\": [\n                    {\n                        \"center\": \"HQ\",\n            ---\u003e        \"title\": \"Apollo 11 Overview\",\n                        \"keywords\": [\n                            \"Apollo 11\",\n                            \"Moon\"\n                        ],\n                        \"nasa_id\": \"Apollo 11 Overview\",\n                        \"date_created\": \"2013-05-15T00:00:00Z\",\n                        \"media_type\": \"video\",\n                        \"description\": \"Video highlights from the historic first manned landing ..\"\n                    }\n                ]\n ```\n 4. nasa_id: Ubicada dentro de la propiedad data (Se indica con una flecha) \n  ```\n  \"data\": [\n                    {\n                        \"center\": \"HQ\",\n                        \"title\": \"Apollo 11 Overview\",\n                        \"keywords\": [\n                            \"Apollo 11\",\n                            \"Moon\"\n                        ],\n              ---\u003e      \"nasa_id\": \"Apollo 11 Overview\",\n                        \"date_created\": \"2013-05-15T00:00:00Z\",\n                        \"media_type\": \"video\",\n                        \"description\": \"Video highlights from the historic first manned landing ..\"\n                    }\n                ]\n ```\n\n#### Importante\n- Tomar en cuenta que la propiedad \"items\" es un arreglo\n- La propiedad \"data\" es un arreglo y se busca que solo se utilice la primera posición de dicha propiedad (extraer valores y guardar en DB)\n\n \n### Tarea 3\nCrear una API del tipo GET con la cual podamos extraer los datos guardado en la DB y poder visualizarlos en POSTMAN en forma de listado, estos deben ser listado de manera descendente por ID. \n\nTambién esperamos que su código sea un reflejo de usted mismo en el trabajo, por lo que estaremos atentos a las elecciones que hará con respecto a la legibilidad y rendimiento del código.\n\n## Submission\nUna vez que complete la prueba, envíe todo el proyecto a **su propio repositorio y hágalo público** y envíenos su enlace de repositorio a sramos@origencorp.net o hello@origencorp.net antes de la hora y la fecha límite para que podamos clonar su proyecto. Más tarde programaremos el día y la hora para realizar la entrevista técnica.\n\n\n## ¡Ahora estás listo, Happy Coding! 👊😎\n\n\n\t\t\t\t\t\t\t\t\t\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdan920-dev%2Fnasa-backend-java-test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdan920-dev%2Fnasa-backend-java-test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdan920-dev%2Fnasa-backend-java-test/lists"}