{"id":15091279,"url":"https://github.com/joeltadeu/customer-service-openapi-spec","last_synced_at":"2026-02-03T06:03:24.345Z","repository":{"id":226321089,"uuid":"768375393","full_name":"joeltadeu/customer-service-openapi-spec","owner":"joeltadeu","description":"Microservice created using springboot 3.2, generating the model and the controllers interfaces based on the OpenApi Spec using the OpenAPI generator plugin.  In addition to unit tests, automated tests were created for the APIs using the Karate platform.","archived":false,"fork":false,"pushed_at":"2024-03-07T00:56:20.000Z","size":220,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-03T13:07:52.118Z","etag":null,"topics":["docker","docker-compose","java-17","karate-tests","mysql","openapi-generator","openapi-spec","spring-boot","spring-jdbc"],"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/joeltadeu.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-03-07T00:54:22.000Z","updated_at":"2024-03-07T00:59:12.000Z","dependencies_parsed_at":"2024-03-07T02:04:38.605Z","dependency_job_id":null,"html_url":"https://github.com/joeltadeu/customer-service-openapi-spec","commit_stats":null,"previous_names":["joeltadeu/customer-service-openapi-spec"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/joeltadeu/customer-service-openapi-spec","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joeltadeu%2Fcustomer-service-openapi-spec","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joeltadeu%2Fcustomer-service-openapi-spec/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joeltadeu%2Fcustomer-service-openapi-spec/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joeltadeu%2Fcustomer-service-openapi-spec/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joeltadeu","download_url":"https://codeload.github.com/joeltadeu/customer-service-openapi-spec/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joeltadeu%2Fcustomer-service-openapi-spec/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29035265,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T02:28:16.591Z","status":"ssl_error","status_checked_at":"2026-02-03T02:27:48.904Z","response_time":96,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["docker","docker-compose","java-17","karate-tests","mysql","openapi-generator","openapi-spec","spring-boot","spring-jdbc"],"created_at":"2024-09-25T10:36:49.269Z","updated_at":"2026-02-03T06:03:24.326Z","avatar_url":"https://github.com/joeltadeu.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Customer Service\n\n## Overview\n\nMicroservice created using springboot 3.2, generating the model and the controllers interfaces based on the OpenApi Spec using the [OpenAPI generator plugin](https://github.com/OpenAPITools/openapi-generator). \n\nIn addition to unit tests, automated tests were created for the APIs using the [Karate](https://github.com/karatelabs/karate) platform.\n\n## Entity Relationship Diagram (DER)\n\n![Alt text](_assets/der/customer-service.png?raw=true \"Customer DER\")\n\n\u003e :information_source: Database scripts can be found in the folder [resources](src/main/resources)\n\n| File                                         | Description                       |\n|----------------------------------------------|-----------------------------------|\n| [schema.sql](src/main/resources/schema.sql)  | SQL script to create the tables   |\n| [data.sql](src/main/resources/data.sql)      | SQL script to populate the tables |\n\n## Endpoints\n\n### Retrieve Customer By Id\n\n| EndPoint           | Method | Description              |\n|--------------------|:------:|--------------------------|\n| /v1/customers/{id} |  GET   | Retrieve customer by id  |\n\n#### Example\n\n\u003e GET /v1/customers/1\n\n#### Response\n\n`200 - OK`\n\n````json lines\n{\n  \"id\": 1,\n  \"firstName\": \"Aoife\",\n  \"lastName\": \"Murphy\",\n  \"birthday\": \"1980-12-13\",\n  \"addresses\": [\n    {\n      \"id\": 1,\n      \"street\": \"6 Bridge St.\",\n      \"eircode\": \"N36RP84\",\n      \"city\": \"Cork\",\n      \"county\": \"County Cork\",\n      \"country\": \"Ireland\"\n    }\n  ],\n  \"emails\": [\n    {\n      \"id\": 1,\n      \"type\": \"WORK\",\n      \"email\": \"aoife.murphy@aib.ie\"\n    },\n    {\n      \"id\": 2,\n      \"type\": \"PERSONAL\",\n      \"email\": \"aoife.murphy@gmail.com\"\n    }\n  ],\n  \"documents\": [\n    {\n      \"id\": 1,\n      \"type\": \"PPS\",\n      \"documentNumber\": \"48378IA\"\n    },\n    {\n      \"id\": 2,\n      \"type\": \"PASSPORT\",\n      \"documentNumber\": \"FA3891IU\"\n    }\n  ]\n}\n````\n\n### Retrieve Customers List\n\n| EndPoint                                                                                             | Method | Description             |\n|------------------------------------------------------------------------------------------------------|:------:|-------------------------|\n| /v1/customers?pageNumber={pageNumber}\u0026pageSize={pageSize}\u0026firstName={firstName}\u0026lastName={lastName}  |  GET   | Retrieve customers list |\n\n#### Parameters\n\n| Parameter  |        Description         | Example |\n|------------|:--------------------------:|---------|\n| pageNumber |        Page number         | 0       |\n| pageSize   | Number of records per page | 10      |\n| firstName  |         First name         | Aoife   |\n| lastName   |         Last name          | Murphy  |\n\n#### Example\n\n\u003e GET /v1/customers?pageSize=10\u0026pageNumber=2\u0026firstName=Aoife\u0026lastName=Murphy\n\n#### Response\n\n`200 - OK`\n\n````json lines\n{\n  \"totalElements\": 4,\n  \"totalPages\": 1,\n  \"size\": 10,\n  \"content\": [\n    {\n      \"id\": 1,\n      \"firstName\": \"Aoife\",\n      \"lastName\": \"Murphy\",\n      \"birthday\": \"1980-12-13\"\n    },\n    {\n      \"id\": 2,\n      \"firstName\": \"Kelly\",\n      \"lastName\": \"O’Brien\",\n      \"birthday\": \"1985-10-09\"\n    },\n    {\n      \"id\": 3,\n      \"firstName\": \"Ryan\",\n      \"lastName\": \"O’Sullivan\",\n      \"birthday\": \"1988-04-25\"\n    },\n    {\n      \"id\": 4,\n      \"firstName\": \"Duffy\",\n      \"lastName\": \"Connor\",\n      \"birthday\": \"1975-02-18\"\n    }\n  ],\n  \"number\": 0,\n  \"sort\": {\n    \"empty\": true,\n    \"unsorted\": true,\n    \"sorted\": false\n  },\n  \"first\": true,\n  \"last\": true,\n  \"numberOfElements\": 4,\n  \"pageable\": {\n    \"offset\": 0,\n    \"sort\": {\n      \"empty\": true,\n      \"unsorted\": true,\n      \"sorted\": false\n    },\n    \"paged\": true,\n    \"unpaged\": false,\n    \"pageSize\": 10,\n    \"pageNumber\": 0\n  },\n  \"empty\": false\n}\n````\n\n### Create Customer\n\n| EndPoint      | Method | Description       |\n|---------------|:------:|-------------------|\n| /v1/customers |  POST  | Create a customer |\n\n#### Example\n\n\u003e POST /v1/customers\n\n#### Body\n````json lines\n{\n  \"firstName\": \"Irwin\",\n  \"lastName\": \"Streich\",\n  \"birthday\": \"1977-09-23\"\n}\n````\n#### Response\n\n`201 - Created`\n\n````json lines\n{\n  \"id\": 5,\n  \"firstName\": \"Irwin\",\n  \"lastName\": \"Streich\",\n  \"birthday\": \"1977-09-23\"\n}\n````\n\n### Update Customer\n\n| EndPoint           | Method | Description       |\n|--------------------|:------:|-------------------|\n| /v1/customers/{id} |  PUT   | Update a customer |\n\n#### Example\n\n\u003e PUT /v1/customers/1\n\n#### Body\n````json lines\n{\n  \"firstName\": \"Irwin\",\n  \"lastName\": \"Streich\",\n  \"birthday\": \"1980-05-12\"\n}\n````\n#### Response\n\n`200 - OK`\n\n### Delete Customer\n\n| EndPoint           | Method | Description       |\n|--------------------|:------:|-------------------|\n| /v1/customers/{id} | DELETE | Delete a customer |\n\n\n#### Example\n\n\u003e DELETE /v1/customers/1\n\n#### Response\n\n`200 - OK`\n\n### Retrieve Address By Id\n\n| EndPoint                                   | Method | Description            |\n|--------------------------------------------|:------:|------------------------|\n| /v1/customers/{customerId}/addresses/{id}  |  GET   | Retrieve address by id |\n\n#### Example\n\n\u003e GET /v1/customers/1/addresses/1\n\n#### Response\n\n`200 - OK`\n\n````json lines\n{\n  \"id\": 1,\n  \"street\": \"6 Bridge St.\",\n  \"eircode\": \"N36RP84\",\n  \"city\": \"Cork\",\n  \"county\": \"County Cork\",\n  \"country\": \"Ireland\"\n}\n````\n\n### Retrieve Addresses List by customer Id\n\n| EndPoint                                                                                                                                                              | Method | Description                            |\n|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|:------:|----------------------------------------|\n| /v1/customers/{customerId}/addresses?pageNumber={pageNumber}\u0026pageSize={pageSize}\u0026street={street}\u0026city={city}\u0026county={county}\u0026country={country}\u0026eircode={eircode} |  GET   | Retrieve addresses list by customer id |\n\n#### Parameters\n\n| Parameter  |        Description         | Example      |\n|------------|:--------------------------:|--------------|\n| pageNumber |        Page number         | 0            |\n| pageSize   | Number of records per page | 10           |\n| street     |           Street           | 6 Bridge St. |\n| city       |            City            | Cork         |\n| county     |           County           | County Cork  |\n| country    |          Country           | Ireland      |\n| eircode    |          Eircode           | N36RP84      |\n\n#### Example\n\n\u003e GET /v1/customers/1/addresses?pageSize=10\u0026pageNumber=2\u0026street=Bridge\u0026city=Cork\u0026country=Ireland\u0026eircode=N36RP84\n\n#### Response\n\n`200 - OK`\n\n````json lines\n{\n  \"totalElements\": 1,\n  \"totalPages\": 1,\n  \"size\": 10,\n  \"content\": [\n    {\n      \"id\": 1,\n      \"street\": \"6 Bridge St.\",\n      \"eircode\": \"N36RP84\",\n      \"city\": \"Cork\",\n      \"county\": \"County Cork\",\n      \"country\": \"Ireland\"\n    }\n  ],\n  \"number\": 0,\n  \"sort\": {\n    \"empty\": true,\n    \"unsorted\": true,\n    \"sorted\": false\n  },\n  \"first\": true,\n  \"last\": true,\n  \"numberOfElements\": 1,\n  \"pageable\": {\n    \"offset\": 0,\n    \"sort\": {\n      \"empty\": true,\n      \"unsorted\": true,\n      \"sorted\": false\n    },\n    \"paged\": true,\n    \"unpaged\": false,\n    \"pageSize\": 10,\n    \"pageNumber\": 0\n  },\n  \"empty\": false\n}\n````\n\n### Create Address\n\n| EndPoint                             | Method | Description                      |\n|--------------------------------------|:------:|----------------------------------|\n| /v1/customers/{customerId}/addresses |  POST  | Create an address by customer id |\n\n#### Example\n\n\u003e POST /v1/customers/1/addresses\n\n#### Body\n````json lines\n{\n  \"street\": \"Hammes Highway\",\n  \"complement\": \"103\",\n  \"eircode\": \"N21RP11\",\n  \"city\": \"Mosciskifort\",\n  \"county\": \"Roscommon\",\n  \"country\": \"Ireland\"\n}\n````\n#### Response\n\n`201 - Created`\n\n````json lines\n{\n  \"id\": 5,\n  \"street\": \"Hammes Highway\",\n  \"complement\": \"103\",\n  \"eircode\": \"N21RP11\",\n  \"city\": \"Mosciskifort\",\n  \"county\": \"Roscommon\",\n  \"country\": \"Ireland\"\n}\n````\n\n### Update Address\n\n| EndPoint                                  | Method | Description      |\n|-------------------------------------------|:------:|------------------|\n| /v1/customers/{customerId}/addresses/{id} |  PUT   | Update a address |\n\n#### Example\n\n\u003e PUT /v1/customers/1/addresses/1\n\n#### Body\n````json lines\n{\n  \"street\": \"Hammes Highway\",\n  \"complement\": \"105\",\n  \"eircode\": \"N21RP11\",\n  \"city\": \"Dublin\",\n  \"county\": \"Co. Dublin\",\n  \"country\": \"Ireland\"\n}\n````\n#### Response\n\n`200 - OK`\n\n### Delete Address\n\n| EndPoint                                  | Method | Description       |\n|-------------------------------------------|:------:|-------------------|\n| /v1/customers/{customerId}/addresses/{id} | DELETE | Delete an address |\n\n#### Example\n\n\u003e DELETE /v1/customers/1/addresses/1\n\n#### Response\n\n`200 - OK`\n\n### Retrieve Email By Id\n\n| EndPoint                               | Method | Description          |\n|----------------------------------------|:------:|----------------------|\n| /v1/customers/{customerId}/emails/{id} |  GET   | Retrieve email by id |\n\n#### Example\n\n\u003e GET /v1/customers/1/emails/1\n\n#### Response\n\n`200 - OK`\n\n````json lines\n{\n  \"id\": 1,\n  \"type\": \"WORK\",\n  \"email\": \"aoife.murphy@aib.ie\"\n}\n````\n\n### Retrieve Emails List by customer Id\n\n| EndPoint                                                                                                 | Method | Description                          |\n|----------------------------------------------------------------------------------------------------------|:------:|--------------------------------------|\n| /v1/customers/{customerId}/emails?pageNumber={pageNumber}\u0026pageSize={pageSize}\u0026email={email}\u0026type={type}  |  GET   | Retrieve emails list by customer id  |\n\n#### Parameters\n\n| Parameter  |        Description         | Example             |\n|------------|:--------------------------:|---------------------|\n| pageNumber |        Page number         | 0                   |\n| pageSize   | Number of records per page | 10                  |\n| email      |           Email            | aoife.murphy@aib.ie |\n| type       |     Type of the email      | WORK                |\n\n#### Example\n\n\u003e GET /v1/customers/1/emails?pageSize=10\u0026pageNumber=2\u0026email=aoife.murphy\u0026type=WORK\n\n#### Response\n\n`200 - OK`\n\n````json lines\n{\n  \"totalElements\": 2,\n  \"totalPages\": 1,\n  \"size\": 10,\n  \"content\": [\n    {\n      \"id\": 1,\n      \"type\": \"WORK\",\n      \"email\": \"aoife.murphy@aib.ie\"\n    },\n    {\n      \"id\": 2,\n      \"type\": \"PERSONAL\",\n      \"email\": \"aoife.murphy@gmail.com\"\n    }\n  ],\n  \"number\": 0,\n  \"sort\": {\n    \"empty\": true,\n    \"unsorted\": true,\n    \"sorted\": false\n  },\n  \"first\": true,\n  \"last\": true,\n  \"numberOfElements\": 2,\n  \"pageable\": {\n    \"offset\": 0,\n    \"sort\": {\n      \"empty\": true,\n      \"unsorted\": true,\n      \"sorted\": false\n    },\n    \"paged\": true,\n    \"unpaged\": false,\n    \"pageSize\": 10,\n    \"pageNumber\": 0\n  },\n  \"empty\": false\n}\n````\n\n### Create Email\n\n| EndPoint                           | Method | Description                    |\n|------------------------------------|:------:|--------------------------------|\n| /v1/customers/{customerId}/emails  |  POST  | Create an email by customer id |\n\n#### Example\n\n\u003e POST /v1/customers/1/emails\n\n#### Body\n````json lines\n{\n  \"type\": \"WORK\",\n  \"email\": \"aoife.murphy@guiness.ie\"\n}\n````\n#### Response\n\n`201 - Created`\n\n````json lines\n{\n  \"id\": 10,\n  \"type\": \"WORK\",\n  \"email\": \"aoife.murphy@guiness.ie\"\n}\n````\n\n### Update Email\n\n| EndPoint                                | Method | Description     |\n|-----------------------------------------|:------:|-----------------|\n| /v1/customers/{customerId}/emails/{id}  |  PUT   | Update an email |\n\n#### Example\n\n\u003e PUT /v1/customers/1/emails/1\n\n#### Body\n````json lines\n{\n  \"type\": \"PERSONAL\",\n  \"email\": \"aoife.murphy@hotmail.com\"\n}\n````\n#### Response\n\n`200 - OK`\n\n### Delete Email\n\n| EndPoint                               | Method | Description      |\n|----------------------------------------|:------:|------------------|\n| /v1/customers/{customerId}/emails/{id} | DELETE | Delete an email  |\n\n\n#### Example\n\n\u003e DELETE /v1/customers/1/emails/1\n\n#### Response\n\n`200 - OK`\n\n### Retrieve Document By Id\n\n| EndPoint                                  | Method | Description             |\n|-------------------------------------------|:------:|-------------------------|\n| /v1/customers/{customerId}/documents/{id} |  GET   | Retrieve document by id |\n\n#### Example\n\n\u003e GET /v1/customers/1/documents/1\n\n#### Response\n\n`200 - OK`\n\n````json lines\n{\n  \"id\": 1,\n  \"type\": \"PASSPORT\",\n  \"documentNumber\": \"FU129837\"\n}\n````\n\n### Retrieve Documents List by customer Id\n\n| EndPoint                                                                                                                     | Method | Description                            |\n|------------------------------------------------------------------------------------------------------------------------------|:------:|----------------------------------------|\n| /v1/customers/{customerId}/documents?pageNumber={pageNumber}\u0026pageSize={pageSize}\u0026documentNumber={documentNumber}\u0026type={type} |  GET   | Retrieve documents list by customer id |\n\n#### Parameters\n\n| Parameter      |        Description         | Example  |\n|----------------|:--------------------------:|----------|\n| pageNumber     |        Page number         | 0        |\n| pageSize       | Number of records per page | 10       |\n| documentNumber |      Document number       | FU198329 |\n| type           |    Type of the document    | PASSPORT |\n\n#### Example\n\n\u003e GET /v1/customers/1/documents?pageSize=10\u0026pageNumber=2\u0026documentNumber=FU198829\u0026type=PASSPORT\n\n#### Response\n\n`200 - OK`\n\n````json lines\n{\n  \"totalElements\": 2,\n  \"totalPages\": 1,\n  \"size\": 10,\n  \"content\": [\n    {\n      \"id\": 1,\n      \"type\": \"PASSPORT\",\n      \"documentNumber\": \"FU193891\"\n    },\n    {\n      \"id\": 2,\n      \"type\": \"DRIVER_LICENSE\",\n      \"documentNumber\": \"5675487548GH\"\n    }\n  ],\n  \"number\": 0,\n  \"sort\": {\n    \"empty\": true,\n    \"unsorted\": true,\n    \"sorted\": false\n  },\n  \"first\": true,\n  \"last\": true,\n  \"numberOfElements\": 2,\n  \"pageable\": {\n    \"offset\": 0,\n    \"sort\": {\n      \"empty\": true,\n      \"unsorted\": true,\n      \"sorted\": false\n    },\n    \"paged\": true,\n    \"unpaged\": false,\n    \"pageSize\": 10,\n    \"pageNumber\": 0\n  },\n  \"empty\": false\n}\n````\n\n### Create Document\n\n| EndPoint                             | Method | Description                      |\n|--------------------------------------|:------:|----------------------------------|\n| /v1/customers/{customerId}/documents |  POST  | Create a document by customer id |\n\n#### Example\n\n\u003e POST /v1/customers/1/documents\n\n#### Body\n````json lines\n{\n  \"type\": \"PPS\",\n  \"email\": \"46751M\"\n}\n````\n#### Response\n\n`201 - Created`\n\n````json lines\n{\n  \"id\": 10,\n  \"type\": \"PPS\",\n  \"email\": \"46751M\"\n}\n````\n\n### Update Email\n\n| EndPoint                                   | Method | Description       |\n|--------------------------------------------|:------:|-------------------|\n| /v1/customers/{customerId}/documents/{id}  |  PUT   | Update a document |\n\n#### Example\n\n\u003e PUT /v1/customers/1/documents/1\n\n#### Body\n````json lines\n{\n  \"type\": \"PASSPORT\",\n  \"email\": \"FU4673761\"\n}\n````\n#### Response\n\n`200 - OK`\n\n### Delete Document\n\n| EndPoint                                   | Method | Description       |\n|--------------------------------------------|:------:|-------------------|\n| /v1/customers/{customerId}/documents/{id}  | DELETE | Delete a document |\n\n\n#### Example\n\n\u003e DELETE /v1/customers/1/documents/1\n\n#### Response\n\n`200 - OK`\n\n## Tests\n\nExecute the unit tests using the command bellow:\n```bash\nmvn test \n```\n\nExecute the karate tests using the command bellow:\n```bash\nmvn test -Dkarate.env=local -Dtest=br.com.customer.karate.KarateTestRunner\n```\nResults can be found in the [target/karate-reports]() folder\n![Alt text](_assets/karate/karate-test-result.png?raw=true \"Karate Test Result\")\n\n\n## Documentation and Examples\n\n### Swagger\n\nFor the documentation of the APIs, access the link\n[http://localhost:9081/swagger-ui/index.html](http://localhost:9081/swagger-ui/index.html)\n\n### Postman collection\n\n\u003e :information_source: Postman collection can be found in the folder [postman](_assets/postman/customer-service.postman_collection.json)\n\n## Build \u0026 Run\n\n### Local\n\n```bash\nmvn clean install\n```\nRun the command below to run the application.\n```bash\njava -jar -Dspring.profiles.active=[PROFILE] customer-service.jar\n```\n\n### Docker\n\nto build\n```\ndocker build -f Dockerfile -t customer-service:1.0.0 .\n```\n\nto run as a container\n```\ndocker run -d -p 9081:9081  --env PROFILE=local -i -t customer-service:1.0.0\n```\n### Port\n\n9081\n\n\n## Version\n\n### 1.0.0\n\n- Spring Boot 3.2\n- Java 17\n- MySQL 8\n- Docker Compose\n- Karate tests\n- OpenApi Generator\n\n## License\nApache License v2.0\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoeltadeu%2Fcustomer-service-openapi-spec","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoeltadeu%2Fcustomer-service-openapi-spec","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoeltadeu%2Fcustomer-service-openapi-spec/lists"}