{"id":24689101,"url":"https://github.com/javimtib92/elasticsearch-fullstack-async","last_synced_at":"2026-04-13T14:31:20.209Z","repository":{"id":234823465,"uuid":"782368992","full_name":"Javimtib92/elasticsearch-fullstack-async","owner":"Javimtib92","description":"Asyncio Elasticsearch with Fastapi ","archived":false,"fork":false,"pushed_at":"2024-04-20T22:30:38.000Z","size":403,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-11T02:50:36.494Z","etag":null,"topics":["asyncio","elasticsearch","fastapi","python3","react"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/Javimtib92.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-04-05T06:57:18.000Z","updated_at":"2024-12-18T15:13:45.000Z","dependencies_parsed_at":"2024-04-21T00:42:22.063Z","dependency_job_id":"f170e304-f505-404b-9147-7309808c68d2","html_url":"https://github.com/Javimtib92/elasticsearch-fullstack-async","commit_stats":null,"previous_names":["javimtib92/elasticsearch-fullstack-async"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Javimtib92/elasticsearch-fullstack-async","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Javimtib92%2Felasticsearch-fullstack-async","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Javimtib92%2Felasticsearch-fullstack-async/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Javimtib92%2Felasticsearch-fullstack-async/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Javimtib92%2Felasticsearch-fullstack-async/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Javimtib92","download_url":"https://codeload.github.com/Javimtib92/elasticsearch-fullstack-async/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Javimtib92%2Felasticsearch-fullstack-async/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31757477,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T13:27:56.013Z","status":"ssl_error","status_checked_at":"2026-04-13T13:21:23.512Z","response_time":93,"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":["asyncio","elasticsearch","fastapi","python3","react"],"created_at":"2025-01-26T17:48:47.783Z","updated_at":"2026-04-13T14:31:20.192Z","avatar_url":"https://github.com/Javimtib92.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Elasticsearch Fullstack Async\n\n## Why I did this project\n\nThis project was part of a take home challenge.\n\nI was asked to build from scratch a fullstack project with an API in Python, Elasticsearch as the DB and any frontend framework as the front.\n\n\u003e Before this test, I had only used Python for some web scraping projects, and I had never used Elasticsearch before, so I had to learn on the go. This challenge was meant to test my ability to adapt to new technologies.\n\n\nThe API initially had to consists of the following endpoints (In the end I added some additional ones)\n\n- `bulk` (to import a csv)\n- `getAll`\n- `getById`\n- `update`\n- `delete`\n\nThe tech stack I decided to use is this one:\n\n**Backend:**\n- Python 3.11\n- Poetry\n- Fastapi\n- Elasticsearch-py\n- pandas\n- numpy\n- pytest\n\n**Frontend:**\n- Typescript\n- Vite\n- Vitest\n- Biomejs\n- React\n- React Tanstack Query\n- React Tanstack Router\n- Zod\n- Tailwindcss\n- Shadcn\n\nMaybe someone else will find this project useful as a starting point for this tech stack.\n\n## Introduction \nThis README file serves as a guide to help you understand the structure of the project, how to set it up, and how to get started with development.\n\n## Getting Started\n\nTo get started with the project, follow these steps:\n\n1. Clone the repository\n\n```bash\ngit clone git@github.com:Javimtib92/elasticsearch-fullstack-async.git \u003cproject_name\u003e\n```\n\n2. Navigate to the project directory\n\n```bash\ncd \u003cproject_name\u003e\n```\n\n3. Run docker-compose\n\n```bash\ndocker-compose up\n```\n\n\u003e ⚠️ Remember to start Docker Desktop first. To install docker-compose follow this guideline: https://docs.docker.com/compose/install/#installation-scenarios\n\nThis command will start all the services defined in the `docker-compose.yml` file.\n\n\u003e ☕ Sit down and drink a relaxing cup of cafe con leche because this will take a while the first time it has to pull the images\n\n## Docker Compose Setup\n\nI use Docker Compose to simplify the setup and deployment of the project. Below is the configuration for Docker Compose:\n\n```yml\n# docker-compose.yml\n\nvolumes:\n  certs:\n    driver: local\n  esdata01:\n    driver: local\n  kibanadata:\n    driver: local\n\nnetworks:\n  default:\n    name: elastic\n    external: false\n\nservices:\n  backend:\n    # Backend service configuration...\n    \n  backend_test:\n    # Backend Test service configuration...\n    \n  frontend:\n    # Frontend service configuration...\n\n  elastic_setup:\n    # Elasticsearch setup service configuration...\n    \n  es01:\n    # Elasticsearch service configuration...\n    \n  kibana:\n    # Kibana service configuration...\n```\n\n## Accessing Services\n\nAfter setting up the project using Docker Compose, you can access the following services:\n\n- Frontend Service:\n  - URL: http://localhost:3000\n  - Port: 3000\n- Backend Service:\n  - URL: http://localhost:8080\n  - Port: 8080\n- Elasticsearch:\n  - URL: https://localhost:`\u003cES_PORT\u003e`\n  - Port: `\u003cES_PORT\u003e`\n- Kibana:\n  - URL: http://localhost:`\u003cKIBANA_PORT\u003e`\n  - Port: `\u003cKIBANA_PORT\u003e`\n\nMake sure to replace `\u003cES_PORT\u003e` and `\u003cKIBANA_PORT\u003e` with the ports defined in your docker-compose.yml file for Elasticsearch and Kibana respectively.\n\n## Additional Configuration\n\n- Ensure you have set the required environment variables in the `.env` file. You can copy `.env.local`.\n- Modify the Docker Compose configuration (`docker-compose.yml`) as needed for your environment, such as adjusting ports or memory limits.\n\n## How to test Bulk instructions (demo purposes)\n\n\u003e There is a sample of a data file to import located in `data/import.csv`\n\n\n### Test bulk (with frontend)\n\n1. Navigate to `http://localhost:3000`\n2. Click on `Import CSV`\n3. Select the `csv` file.\n\n\u003e To see the Import CSV button the index should not exist, to remove it you have to go to kibana at http://localhost:\u003cKIBANA_PORT\u003e and delete the `politicians` index\n\n### Test bulk (without frontend)\n\nWe'll use `/docs` endpoint as if it was our \"postman\" to execute each endpoint.\n\n1. Navigate to `http://localhost:8080/docs`\n2. If the `bulk` was executed previously make sure to clear the index with `/clear_index/${index_name}` endpoint setting `politicians` as the `index_name`.\n3. Expand `POST /bulk`, click on `Try it out` button.\n4. Select `csv` file on the `file` field.\n5. Click on `Execute`\n6. Navigate to `http://localhost:5601/` and enter your username and password for Kibana\n7. Expand sidebar and navigate to `Content`\n8. In available indices you should see `politicians` index with `4095` docs.\n9. Click on the index and the overview page will appear\n10. Select the `Documents` tab to see the inserted documents.\n\n## References\n\n- Elasticsearch Documentation: https://www.elastic.co/guide/index.html\n- Kibana Documentation: https://www.elastic.co/guide/kibana/index.html\n- Docker Compose Documentation: https://docs.docker.com/compose\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavimtib92%2Felasticsearch-fullstack-async","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjavimtib92%2Felasticsearch-fullstack-async","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavimtib92%2Felasticsearch-fullstack-async/lists"}