{"id":18367783,"url":"https://github.com/rafaelcamargo/kobbogo-api","last_synced_at":"2026-05-05T20:42:59.116Z","repository":{"id":37610286,"uuid":"430711287","full_name":"rafaelcamargo/kobbogo-api","owner":"rafaelcamargo","description":"An experimental API to dig deeper on Ruby on Rails","archived":false,"fork":false,"pushed_at":"2022-12-12T16:21:38.000Z","size":64,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-15T20:49:23.239Z","etag":null,"topics":["api-rest","jwt-authentication","rspec","rubocop","ruby-on-rails","simplecov"],"latest_commit_sha":null,"homepage":"https://kobbogo-api.fly.dev/","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/rafaelcamargo.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}},"created_at":"2021-11-22T13:10:19.000Z","updated_at":"2025-01-02T15:52:34.000Z","dependencies_parsed_at":"2023-01-27T22:01:23.987Z","dependency_job_id":null,"html_url":"https://github.com/rafaelcamargo/kobbogo-api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelcamargo%2Fkobbogo-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelcamargo%2Fkobbogo-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelcamargo%2Fkobbogo-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelcamargo%2Fkobbogo-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rafaelcamargo","download_url":"https://codeload.github.com/rafaelcamargo/kobbogo-api/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248259347,"owners_count":21074109,"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-rest","jwt-authentication","rspec","rubocop","ruby-on-rails","simplecov"],"created_at":"2024-11-05T23:23:21.098Z","updated_at":"2026-05-05T20:42:54.067Z","avatar_url":"https://github.com/rafaelcamargo.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kobbogo API\n\u003e An experimental API to dig deeper with Ruby on Rails.\n\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/rafaelcamargo/kobbogo-api/tree/master.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/rafaelcamargo/kobbogo-api/tree/master)\n[![Coverage Status](https://coveralls.io/repos/github/rafaelcamargo/kobbogo-api/badge.svg?branch=master)](https://coveralls.io/github/rafaelcamargo/kobbogo-api?branch=master)\n[![Ruby Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](https://github.com/rubocop/rubocop)\n\n## Contributing\n\n1. Install *Ruby 3.x or greater* - Prefer to install Ruby with [Ruby Version Manager](https://rvm.io/).\n\n2. Clone the repo:\n``` bash\ngit git@github.com:rafaelcamargo/kobbogo-api.git\n```\n\n3. Go to the project directory\n``` bash\ncd kobbogo-api\n```\n\n4. Install the project dependencies\n``` bash\nbundle install\n```\n\n5. Create and setup databases - *[PostgreSQL](https://www.postgresql.org/) 14.x (server 9.x)* or greater:\n``` bash\nrails db:create\nrails db:migrate\n```\n\n6. Serve the API:\n``` bash\nrails s\n```\n\nThe API will be running on `http://localhost:3000`.\n\n## Usage\n\n### User Collection\n\nThe *User* collection has a single endpoint. The endpoint requires *username* and a *password* to create an user:\n\n| Method | URI    | Request Body | Response Status | Response Body |\n|--------|--------|--------------|-----------------|---------------|\n| **POST**   | `/users` | {\u003cbr\u003e\u0026nbsp;\u0026nbsp;username: String,\u003cbr\u003e\u0026nbsp;\u0026nbsp;password: String\u003cbr\u003e} | [201](https://www.httpstatuses.org/201) *(Created)* | |\n\n### User Authentication\n\nAuthentication has a single endpoint. The endpoint requires user's credentials (*username/password*) and responds with a body containing a *token*, its *expiration date* (i.e. \"06-19-2022 21:44\"), and *username*:\n\n| Method | URI    | Request Body | Response Status | Response Body |\n|--------|--------|--------------|-----------------|---------------|\n| **POST**   | `/auth` | {\u003cbr\u003e\u0026nbsp;\u0026nbsp;username: String,\u003cbr\u003e\u0026nbsp;\u0026nbsp;password: String\u003cbr\u003e} | [201](https://www.httpstatuses.org/201) *(Created)* | {\u003cbr\u003e\u0026nbsp;\u0026nbsp;token: String,\u003cbr\u003e\u0026nbsp;\u0026nbsp;exp: Date,\u003cbr\u003e\u0026nbsp;\u0026nbsp;username: String\u003cbr\u003e} |\n\n### Todo Collection\n\nThe *Todo* collection has three endpoints. All these endpoints need an Authentication token to be sent via request header. The header key must have the name *Authorization* and its value must be the token returned by the endpoint `/auth`.\n\n#### Create\n\nThis endpoint requires a *description* to create a todo.\n\n| Method | URI    | Request Body | Response Status | Response Body |\n|--------|--------|--------------|-----------------|---------------|\n| **POST**   | `/todos` | {\u003cbr\u003e\u0026nbsp;\u0026nbsp;description: String,\u003cbr\u003e} | [201](https://www.httpstatuses.org/201) *(Created)* | {\u003cbr\u003e\u0026nbsp;\u0026nbsp;id: UUID,\u003cbr\u003e\u0026nbsp;\u0026nbsp;description: String,\u003cbr\u003e\u0026nbsp;\u0026nbsp;created_at: Date,\u003cbr\u003e\u0026nbsp;\u0026nbsp;updated_at: Date,\u003cbr\u003e} |\n\n#### Retrieve\n\nThis endpoint does not requires anything.\n\n| Method | URI    | Request Body | Response Status | Response Body |\n|--------|--------|--------------|-----------------|---------------|\n| **GET**   | `/todos` |  | [200](https://www.httpstatuses.org/200) *(Ok)* | [{\u003cbr\u003e\u0026nbsp;\u0026nbsp;id: UUID,\u003cbr\u003e\u0026nbsp;\u0026nbsp;description: String,\u003cbr\u003e\u0026nbsp;\u0026nbsp;created_at: Date,\u003cbr\u003e\u0026nbsp;\u0026nbsp;updated_at: Date,\u003cbr\u003e}] |\n\n#### Delete\n\nThis endpoint requires a todo id to be passed on the URI.\n\n| Method | URI    | Request Body | Response Status | Response Body |\n|--------|--------|--------------|-----------------|---------------|\n| **DELETE**   | `/todos/:id` |  | [200](https://www.httpstatuses.org/200) *(Ok)* | |\n\n## Code Format\n\nEnsure that all the code you have added is [properly formatted](https://rubocop.org/):\n``` bash\nbundle exec rubocop\n```\n\n## Tests\n\nEnsure that all the code you have added is covered with [automated tests](https://rspec.info/):\n``` bash\nbundle exec rspec\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafaelcamargo%2Fkobbogo-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frafaelcamargo%2Fkobbogo-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafaelcamargo%2Fkobbogo-api/lists"}