diff --git a/README.md b/README.md index 7bfb5f4..742b92e 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,19 @@ ### Funciones a implementar +#### Obligatorias + - Creación de documentos -- Edición de documentos -- Anidación de documentos +- Compartir documentos - Creación de tablas (estilo base de datos) -- Edición de tablas - Filtrado y ordenado de tablas +- Búsqueda entre documentos + +#### Opcionales + +- Documentos públicos +- Anidación de documentos +- Compartir bases de datos ### Presentación @@ -37,18 +44,17 @@ Primero y principal, debe agregar un archivo `.env` en la raíz del proyecto que SECRET=J4s1S2rl83pWTK1BcM5VL/rjjT51HLcADWqn4aoq2iS5qbg3wAtO4NlZ98= MONGO_URL=mongodb://root:password@localhost:27017 ELASTIC_URL=http://localhost:9200 -ELASTIC_PASSWORD=password POSTGRES_HOST=localhost POSTGRES_DB=bd2 POSTGRES_USER=root POSTGRES_PASSWORD=password ``` -En un ambiente de testeo (como es el caso) puede simplemente copiar el archivo pero, si se corriese en producción, se deberían cambiar las contraseñas. +En un ambiente de testeo (como es el caso) puede simplemente copiar el archivo pero, si se corriese en producción, se debería cambiar dependiendo el caso de uso. Debe dejar los URLs de las bases de datos como se indicaron pues así se las configuró con docker. -Luego, para levantar las bases de datos debe correr: +Ahora, para levantar las bases de datos debe correr: ``` sh run.sh -d @@ -56,7 +62,7 @@ sh run.sh -d Debe esperar al menos 30s (dependiendo de su computadora) para que levanten todas las bases de datos. Una forma de verificar que hayan levantado todas es que no siga habiendo nuevo output en la terminal que corrió el comando anterior. -Además, en otra terminal, debe configurar las bases de datos mediante el siguiente comando: +Luego, en otra terminal, debe configurar las bases de datos mediante el siguiente comando: ``` sh run.sh -c @@ -70,7 +76,7 @@ sh run.sh -a ## Documentación de la API -Puede ir a `http://localhost:8000/docs` para ver el Swagger. Notemos que se usó en todo momento localhost pues se supone un ambiente de testing. Usted debería hacer los cambios necesarios si es que requiere correr `BSition` en producción. +Puede ir a `http://localhost:8000/docs` para ver el `Swagger`. Notemos que se usó en todo momento `localhost` pues se supone un ambiente de testeo. Además, cuenta con una colección de `Postman` en [docs/bsition_postman.json](docs/bsition_postman.json). Aquí se muestra, a grandes rasgos, el funcionamiento de la API. diff --git a/bsition/backend/elastic.py b/bsition/backend/elastic.py index c091a93..5cb5eb4 100644 --- a/bsition/backend/elastic.py +++ b/bsition/backend/elastic.py @@ -27,6 +27,7 @@ def search(index, query): resp = client.search( index=index, + size=100, query={ # "query_string": { # "query": "*puan*", @@ -34,7 +35,6 @@ def search(index, query): # } "bool": { "must": [ - # {"query_string": {"query": "*documento*", "default_field": "data"}}, {"query_string": {"query": query, "default_field": "data"}}, # { # "match": { @@ -46,14 +46,9 @@ def search(index, query): }, highlight={"fields": {"data": {}}}, ) - print("Got %d hit(s):" % resp["hits"]["total"]["value"]) hits = [] for hit in resp["hits"]["hits"]: - print(resp["hits"]["total"]) - print(resp["hits"]) - print(hit["_source"]) - print("%(name)s: %(data)s" % hit["_source"]) hits.append( str(hit["highlight"]) + " ---- " + "%(name)s: %(data)s" % hit["_source"] ) diff --git a/docker-compose.yml b/docker-compose.yml index 7f553fe..849c249 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,12 +28,12 @@ services: - ./data/postgres:/var/lib/postgresql/data elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:8.4.2 + image: docker.elastic.co/elasticsearch/elasticsearch:8.5.2 container_name: bsition-elasticsearch environment: - xpack.security.enabled=false - discovery.type=single-node - - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + - "ES_JAVA_OPTS=-Xms1G -Xmx1G" volumes: - ./data/elasticsearch:/usr/share/elasticsearch/data ports: diff --git a/docs/bsition_postman.json b/docs/bsition_postman.json index b505614..f6a4967 100644 --- a/docs/bsition_postman.json +++ b/docs/bsition_postman.json @@ -145,7 +145,7 @@ "method": "GET", "header": [], "url": { - "raw": "http://localhost:8000/api/users/1", + "raw": "http://localhost:8000/api/users", "protocol": "http", "host": [ "localhost" @@ -153,8 +153,7 @@ "port": "8000", "path": [ "api", - "users", - "1" + "users" ] } }, @@ -795,7 +794,7 @@ "bearer": [ { "key": "token", - "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InVzZXIiLCJleHAiOjE2Njk4Mjc4MDR9._9Fp7DLOJ2Rt_brG4oZp8wqLuDdIiwjGpodbHMrLaX0", + "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InVzZXIiLCJleHAiOjE2Njk4ODI0Mjl9.ixmxpfw9FfJe0FfZNYIxCz8GXtxqXaN4kMzFn1p5q7A", "type": "string" } ] diff --git a/poetry.lock b/poetry.lock index 5b61ba4..a81bbc3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -112,7 +112,7 @@ develop = ["aiohttp", "mock", "pytest", "pytest-asyncio", "pytest-cov", "pytest- [[package]] name = "elasticsearch" -version = "8.5.0" +version = "8.5.2" description = "Python client for Elasticsearch" category = "main" optional = false @@ -482,7 +482,7 @@ python-versions = ">=3.7" [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "950a92369ed9376ff552c65b050f396763277c02eee11f05c177cd1ecccf44d5" +content-hash = "34c7ab7e09f23fdd00873491668b236f5835ff116f56f2a73352da802399ee40" [metadata.files] anyio = [ @@ -532,8 +532,8 @@ elastic-transport = [ {file = "elastic_transport-8.4.0-py3-none-any.whl", hash = "sha256:19db271ab79c9f70f8c43f8f5b5111408781a6176b54ab2e54d713b6d9ceb815"}, ] elasticsearch = [ - {file = "elasticsearch-8.5.0-py3-none-any.whl", hash = "sha256:b478307fedab69966f569a9643fdcedb5c09ba1e9d09dc36e5579c597669bd8e"}, - {file = "elasticsearch-8.5.0.tar.gz", hash = "sha256:47cfc484ebca07371a9dbd9ce333c55f450daf0790a799944a91234df3d34c5a"}, + {file = "elasticsearch-8.5.2-py3-none-any.whl", hash = "sha256:100ead24d2a20d40227bde9c586c9e32b820d15d3dfb4f12204d6b11841f029e"}, + {file = "elasticsearch-8.5.2.tar.gz", hash = "sha256:7fd57b89b1dfc3c976a71af58376d300a4e40dfcdd22ea2573ce6a830c9ad7c2"}, ] email-validator = [ {file = "email_validator-1.3.0-py2.py3-none-any.whl", hash = "sha256:816073f2a7cffef786b29928f58ec16cdac42710a53bb18aa94317e3e145ec5c"}, diff --git a/pyproject.toml b/pyproject.toml index b89e9ed..317ae52 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,7 @@ PyJWT = "^2.6.0" pydantic = {extras = ["email"], version = "^1.10.2"} pymongo = {extras = ["srv"], version = "^4.3.2"} psycopg2 = "^2.9.5" -elasticsearch = "8.5.0" +elasticsearch = "^8.5.0" [tool.poetry.dev-dependencies] pre-commit = "^2.20.0" diff --git a/run.sh b/run.sh index d1dfbfd..305c56f 100644 --- a/run.sh +++ b/run.sh @@ -26,8 +26,7 @@ done if [ "$RUN" = 'install' ]; then poetry install elif [ "$RUN" = 'api' ]; then - poetry shell - uvicorn bsition.api.api:app --host 0.0.0.0 + poetry run uvicorn bsition.api.api:app --host 0.0.0.0 elif [ "$RUN" = 'configure' ]; then poetry run configure else