{"id":22468871,"url":"https://github.com/katorres02/tuaplicaciontest","last_synced_at":"2025-03-27T15:45:29.412Z","repository":{"id":93000406,"uuid":"136740866","full_name":"katorres02/tuaplicaciontest","owner":"katorres02","description":"Prueba de habilidades ruby on rails","archived":false,"fork":false,"pushed_at":"2018-06-11T18:02:28.000Z","size":65,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-01T19:44:03.742Z","etag":null,"topics":["api","authentication","rest-api","ruby","ruby-on-rails"],"latest_commit_sha":null,"homepage":null,"language":"Ruby","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/katorres02.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,"publiccode":null,"codemeta":null}},"created_at":"2018-06-09T16:42:18.000Z","updated_at":"2018-06-11T18:02:29.000Z","dependencies_parsed_at":"2023-05-14T06:30:48.351Z","dependency_job_id":null,"html_url":"https://github.com/katorres02/tuaplicaciontest","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katorres02%2Ftuaplicaciontest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katorres02%2Ftuaplicaciontest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katorres02%2Ftuaplicaciontest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katorres02%2Ftuaplicaciontest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/katorres02","download_url":"https://codeload.github.com/katorres02/tuaplicaciontest/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245874442,"owners_count":20686764,"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":["api","authentication","rest-api","ruby","ruby-on-rails"],"created_at":"2024-12-06T11:20:04.733Z","updated_at":"2025-03-27T15:45:29.406Z","avatar_url":"https://github.com/katorres02.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TuAplicación Prueba\n\nSolición a la prueba técnica Ruby On Rails API REST de usuarios y sus intereses.\n\n## Problemática\nSe solicita desarrollar en el lenguaje ruby una serie de endpoints arquitectura REST que permitan administrar la información de usuarios y gestionar los intereses de los mismos.\n\n## Solución\nSe desarrolla un aplicativo usando el framework rails. Cuenta con un modelo usuario y una asoción con un modelo de intereses de tal forma que un usuario pude tener muchos intereses (one to many). Ambos modelos cuentan con sus respectivos endpoints en una rest api con restricción de autenticación y una interfaz web que permite ver la información almacenada.\n\nLa estructura utilizada permite versionamiento de la api.\n\nInterfaz gráfica para visualizar la información almacenada.\n\n![alt text](http://drive.google.com/uc?export=view\u0026id=1ft3wR7K3fZNF8C4W1aaCE4jgpqIkj-Sv\n \"Dashboard principal\")\n\n## Getting Started\nAbrir la terminal y clonar el proyecto\n\n```git clone git@github.com:katorres02/tuaplicaciontest.git```\n\nInstalar gemas\n\n```bundle install```\n\nCrear y migrar la base de datos \n\n```rake db:create db:migrate```\n\nIniciar el servidor\n\n```rails s```\n\n## Tecnologías base utilizadas\n  * ruby 2.3.3\n  * rails 5.1.5\n  * sqlite3\n  * rabl\n   \n## Ejecución de pruebas Testing\nEn la terminal del proyecto\n\n* ` rspec ` pruebas a los modelos\n* ` rspec spec/controllers/api/v1/*` pruebas a los controladores\n\n\n## Guía de uso\n\nInformación acerca de los webservices endpoints desarrollados.\nLos servicios fueron desarrollados de tal forma que soliciten la autenticación del usuario que realiza acciones por medio de credenciales como parámetros dentro de los headers de la petición.\n\nTener en cuenta que la arquitectura utilizada permite versionamiento de la api, actualmente se usa la versión 1 'v1'.\n\n**A continuación las secciones ó modulos desarrollados.**\n\n### SESIONES\nControlador de sesiones encargado de controlar la autenticación del usuario y entregar o eliminar el **TOKEN** de autenticación.\n\n| ENDPOINTS        | HTTP VERB  | Descripción  |\n| ------------- |:-------------:| -----:|\n| /api/v1/sessions/login.json | POST | Autentica al usuario ya creado, retorna el **TOKEN** de autenticación |\n| /api/v1/sessions/logout.json | DELETE | Elimina el **TOKEN** cerrando la \"sesión\" del usuario |\n\n### /api/v1/sessions/login.json\n**headers:** Ninguno\n\n**params:** \n```json\n{ \n  \"email\": \"carlos@mail.com\",\n  \"password\": 12345678\n}\n```\n\n**response:** \n```json\n{\n  \"user\": {\n      \"id\": 1,\n      \"email\": \"carlos@mail.com\",\n      \"first_name\": \"carlos\",\n      \"second_name\": \"andres\",\n      \"last_name\": \"torres\",\n      \"maiden_name\": null,\n      \"authentication_token\": \"RPUsF7KR9uTh9By2xVEu\"\n  }\n}\n```\n\n### /api/v1/sessions/logut.json\n**headers:**\n```json\n  {\n    \"X-User-Email\": \"carlos@mail.com\",\n    \"X-User-Token\": \"RPUsF7KR9uTh9By2xVEu\"\n  }\n```\n\n**params:** Ninguno\n**response:**\n```json\n  {\n    \"message\": \"Sesión terminada\"\n  }\n```\n\n### USUARIOS\nControlador de usuarios, gestiona la información del usuario.\n\n| ENDPOINTS        | HTTP VERB  | Descripción  |\n| ------------- |:-------------:| -----:|\n| /api/v1/users/1.json | GET | Detalle de un usuario específico |\n| /api/v1/users.json | POST | Crear un usuario |\n| /api/v1/users/1.json | PUT/PATCH | Editar un usuario |\n| /api/v1/users/1.json | DELETE | Eliminar un usuario |\n\n### GET /api/v1/users/1.json\n**headers:**\n```json\n  {\n    \"X-User-Email\": \"carlos@mail.com\",\n    \"X-User-Token\": \"RPUsF7KR9uTh9By2xVEu\"\n  }\n```\n\n**params:** El identificador(id) del usuario\n```json\n  {\n    \"id\": 1\n  }\n```\n\n**response:**\n```json\n{\n  \"user\": {\n      \"id\": 1,\n      \"email\": \"carlos@mail.com\",\n      \"first_name\": \"carlos\",\n      \"second_name\": \"andres\",\n      \"last_name\": \"torres\",\n      \"maiden_name\": null,\n      \"authentication_token\": \"pYYPPedQ1skMtKUAU61b\"\n    }\n}\n```\n\n### POST /api/v1/users.json\n**headers:**: Ninguno\n\n**params:** Datos de creación de usuario, los campos email, contraseña y nombre son obligatorios\n```json\n  {\n    \"user\": {\n      \"email\": \"andres@mail.com\",\n      \"password\": 12345678,\n      \"first_name\": \"andres\",\n      \"second_name\": \"carlos\",\n      \"last_name\": \"torres\",\n      \"maiden_name\": \"cruz\"\n    }\n  }\n```\n\n**response:**\n```json\n{\n  \"user\": {\n      \"id\": 1,\n      \"email\": \"carlos@mail.com\",\n      \"first_name\": \"carlos\",\n      \"second_name\": \"andres\",\n      \"last_name\": \"torres\",\n      \"maiden_name\": null,\n      \"authentication_token\": \"pYYPPedQ1skMtKUAU61b\"\n    }\n}\n```\n\n### PUT/PATCH /api/v1/users/1.json\n**headers:**:\n```json\n  {\n    \"X-User-Email\": \"carlos@mail.com\",\n    \"X-User-Token\": \"RPUsF7KR9uTh9By2xVEu\"\n  }\n```\n\n**params:** Identificador del usuario en la URL y campos del usuario a editar.\n```json\n  {\n    \"id\": 1,\n    \"user\": {\n      \"email\": \"andres@mail.com\",\n      \"password\": 12345678,\n      \"first_name\": \"andres\",\n      \"second_name\": \"carlos\",\n      \"last_name\": \"torres\",\n      \"maiden_name\": \"cruz\"\n    }\n  }\n```\n\n**response:** objeto usuario con campos editados\n```json\n{\n  \"user\": {\n      \"id\": 1,\n      \"email\": \"carlos@mail.com\",\n      \"first_name\": \"carlos\",\n      \"second_name\": \"andres\",\n      \"last_name\": \"torres\",\n      \"maiden_name\": null,\n      \"authentication_token\": \"pYYPPedQ1skMtKUAU61b\"\n    }\n}\n```\n\n### DELETE /api/v1/users/1.json\n**headers:**:\n```json\n  {\n    \"X-User-Email\": \"carlos@mail.com\",\n    \"X-User-Token\": \"RPUsF7KR9uTh9By2xVEu\"\n  }\n```\n\n**params:** Identificador del usuario en la URL\n```json\n  {\n    \"id\": 1\n  }\n```\n\n**response:** mensaje de usuario eliminado\n```json\n{\n  \"message\": \"Registro eliminado\"\n}\n```\n\n### INTERESES\nControlador de intereses de usuarios, gestiona los intereses de cada usuario.\n\nNótese que los resources de usuarios e intereses están anitados en la url.\n\n| ENDPOINTS        | HTTP VERB  | Descripción  |\n| ------------- |:-------------:| -----:|\n| /api/v1/users/1/interests.json | GET | Lista de intereses de un usuario |\n| /api/v1/users/1/interests/1.json | GET | Detalle de un interés específico |\n| /api/v1/users/1/interests.json | POST | Crear un interés y asociarlo a un usuario |\n| /api/v1/users/1/interests/1.json | PUT/PATCH | Editar un interés de un usuario |\n| /api/v1/users/1/interests/1.json | DELETE | Eliminar un interés de un usuario |\n\n\n### GET /api/v1/users/1/interests.json\n**headers:**\n```json\n  {\n    \"X-User-Email\": \"carlos@mail.com\",\n    \"X-User-Token\": \"RPUsF7KR9uTh9By2xVEu\"\n  }\n```\n\n**params:** El identificador(id) del usuario en la url\n```json\n  {\n    \"id\": 1\n  }\n```\n\n**response:**\n```json\n[\n    {\n        \"interest\": {\n            \"id\": 3,\n            \"name\": \"Arte\"\n        }\n    },\n    {\n        \"interest\": {\n            \"id\": 4,\n            \"name\": \"Literatura\"\n        }\n    }\n]\n```\n\n### GET /api/v1/users/1/interests/1.json\n**headers:**:\n```json\n  {\n    \"X-User-Email\": \"carlos@mail.com\",\n    \"X-User-Token\": \"RPUsF7KR9uTh9By2xVEu\"\n  }\n```\n\n**params:** ID del usuario y del interés específico en la url\n```json\n  {\n    \"id\": \"$id del intéres\",\n    \"user_id\": \"$id del usuario\"\n  }\n```\n\n**response:**\n```json\n{\n    \"interest\": {\n      \"id\": 4,\n      \"name\": \"Literatura\"\n    }\n}\n```\n\n### POST /api/v1/users/1/interests.json\n**headers:**:\n```json\n  {\n    \"X-User-Email\": \"carlos@mail.com\",\n    \"X-User-Token\": \"RPUsF7KR9uTh9By2xVEu\"\n  }\n```\n\n**params:** información del interés que será asociado y el id del usuario.\n```json\n  {\n    \"user_id\": 1,\n    \"interest\": {\n      \"name\": \"nuevo interés\"\n    }\n  }\n```\n\n**response:** nuevo interés creado y asociado\n```json\n  {\n    \"interest\": {\n      \"name\": \"nuevo interés\"\n    }\n  }\n```\n\n\n### PUT/PATCH /api/v1/users/1/interests/1.json\n**headers:**:\n```json\n  {\n    \"X-User-Email\": \"carlos@mail.com\",\n    \"X-User-Token\": \"RPUsF7KR9uTh9By2xVEu\"\n  }\n```\n\n**params:** Identificador del usuario en la URL y campos del interés a editar.\n```json\n  {\n    \"id\": 1,\n    \"user_id\": 1,\n    \"interest\": {\n      \"name\": \"nuevo nombre\"\n    }\n  }\n```\n\n**response:** objeto interés con campos editados\n```json\n  {\n    \"interest\": {\n      \"name\": \"nuevo nombre\"\n    }\n  }\n```\n\n### DELETE /api/v1/users/1/interests/1.json\n**headers:**:\n```json\n  {\n    \"X-User-Email\": \"carlos@mail.com\",\n    \"X-User-Token\": \"RPUsF7KR9uTh9By2xVEu\"\n  }\n```\n\n**params:** Identificador del usuario en la URL y el identificador del interés a eliminar\n```json\n  {\n    \"id\": 1,\n    \"user_id\": 1\n  }\n```\n\n**response:** mensaje de interés eliminado\n```json\n{\n  \"message\": \"Registro eliminado\"\n}\n```\n## Seguimiento de datos\nLa vista principal del proyecto muestra la lista de usuarios con la información almacenada a través de los servicios. Se puede ver los datos básicos del usuario y la lista de intereses de cada uno.\n\n![alt text](http://drive.google.com/uc?export=view\u0026id=1ft3wR7K3fZNF8C4W1aaCE4jgpqIkj-Sv\n \"Dashboard principal\")\n\n\n## Autor\n\n* **Carlos A Torres** - *Dev principal* - [katorres02](https://github.com/katorres02)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkatorres02%2Ftuaplicaciontest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkatorres02%2Ftuaplicaciontest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkatorres02%2Ftuaplicaciontest/lists"}