{"id":24064664,"url":"https://github.com/crissalvarezh/ubicor-api","last_synced_at":"2026-04-29T23:05:50.562Z","repository":{"id":37389581,"uuid":"490005909","full_name":"CrissAlvarezH/ubicor-api","owner":"CrissAlvarezH","description":null,"archived":false,"fork":false,"pushed_at":"2023-05-29T19:12:18.000Z","size":169,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-09T10:39:31.146Z","etag":null,"topics":["alembic","click","fastapi","github-actions","poetry","python","sqlalchemy"],"latest_commit_sha":null,"homepage":"","language":"Python","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/CrissAlvarezH.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":"2022-05-08T17:07:48.000Z","updated_at":"2023-01-31T19:49:11.000Z","dependencies_parsed_at":"2023-02-16T04:01:10.671Z","dependency_job_id":null,"html_url":"https://github.com/CrissAlvarezH/ubicor-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/CrissAlvarezH%2Fubicor-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrissAlvarezH%2Fubicor-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrissAlvarezH%2Fubicor-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrissAlvarezH%2Fubicor-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CrissAlvarezH","download_url":"https://codeload.github.com/CrissAlvarezH/ubicor-api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240907852,"owners_count":19876691,"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":["alembic","click","fastapi","github-actions","poetry","python","sqlalchemy"],"created_at":"2025-01-09T10:39:38.759Z","updated_at":"2026-04-29T23:05:50.506Z","avatar_url":"https://github.com/CrissAlvarezH.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Descripción\nApi creada para servir a [ubicor-frontend](https://github.com/CrissAlvarezH/ubicor-frontend) y para sustituir la [versión legacy](https://github.com/CrissAlvarezH/ubicor-api-legacy).\nEl api consta de endpoint para la creación, actualización y consulta de bloques y salones dentro de una universidad, incluidas las imagenes y las ubicaciones gps.\n\n### Stack\n - [FastApi](https://fastapi.tiangolo.com/) para la creación del api\n - [SQLAlchemy](https://www.sqlalchemy.org/) como el ORM\n - [Alembic](https://alembic.sqlalchemy.org/en/latest/) para las migraciones de la base de datos\n - [Poetry](https://python-poetry.org/) como manejador de dependencias\n - [Click](https://click.palletsprojects.com/en/8.1.x/) para la creacion de CLI `manage.py` para ejecutar comandos\n - [Docker](https://www.docker.com/) y [Docker Compose](https://docs.docker.com/compose/) para el empaquetamiento del proyecto para **dev** y **prod**\n - [Github Actions](https://github.com/features/actions) Para la integración continua\n - [Black](https://black.readthedocs.io/en/stable/) formateador de codigo\n - [Isort](https://pycqa.github.io/isort/) formatea y organiza los imports\n - [pre-commit](https://pre-commit.com/) herramienta para instalar y ejecutar hooks de git\n\n# Desplegar\n\n## Producción\nPara desplegar junto con el frontend y con la configuración de los dominios y el lets encrypt puede seguir los pasos del README del respositorio: [cristian-projects-server](https://github.com/CrissAlvarezH/cristian-projects-server)\n\n## Testing\nSe se desea desplegar para motivos de pruebas locales los pasos son los siguientes.\n\n#### 1. Instalar poetry\nPara esto puede seguir la [guía oficial](https://python-poetry.org/docs/#installation)\n\n#### 2. Descargar las dependencias\n\n    poetry install\n\n#### 3. Variables de entorno\nClonar el archivo `.env.example`, renombrar a `.env` y cambiar los valores de cada variable por los que \nnecesite usar, como las credenciales de la base de datos, por ejemplo.\n\n#### 4. Correr comandos de inserción de data inicial\nSe deben ejecutar las migraciones de la base de datos, crear un superusuario e insertar una data \ninicial para llenar la base de datos, para esto usamos el siguiente comando.\n\n    make prestart\n\n#### 5. Correr servidor\nCorremos con el flag `--reload` para que se refresque cada que detecte un cambio en el codigo\n\n    uvicorn app.main:app --reload\n\n## Usando Docker\nSi queremos usar docker parar en lanzamiento de la app podemos usar `docker-compose` y este lanzará, ademas del contenedor con el api,  [un contenedor con la base de datos postgres](https://hub.docker.com/_/postgres)\n\n    docker-compose up\n\nEl comando anterior creará los contenedores necesarios y ejecutará los scripts para el funcionamiento correcto de la app.\n\n\n# Preparar para desarrollo\n\n## 1. Usar poetry para instalar las dependencias\n\n```\n# crear la carpeta .venv en la raiz del proyecto\npoetry config virtualenvs.in-project true \n\n# instalar dependencias\npoetry install\n\n# activar environment de python\nsource .venv/bin/activate\n```\n\n## 2. Instalar pre-commit en git\n\n```\npre-commit install\n```\n\n## 3. Correr proyecto en local\n\n```\nmake start\n```\n\n## Usando Docker\n\n```\n# construimos la imagen\n# Nota: en Mac puede ser necesario ejecutar (solo para el build)\n# export DOCKER_DEFAULT_PLATFORM=linux/amd64\ndocker-compose build\n\n# corremos la imagen de la app y de la base de datos\ndocker-compose up\n```\n\nDespues de ejecutar esos comandos podrás ver el siguiente output en consola\n\n```\nubicor-api-database-1  | 2023-05-29 05:25:52.996 UTC [1] LOG:  starting PostgreSQL 14.8 on aarch64-unknown-linux-musl, compiled by gcc (Alpine 12.2.1_git20220924-r10) 12.2.1 20220924, 64-bit\nubicor-api-database-1  | 2023-05-29 05:25:52.996 UTC [1] LOG:  listening on IPv4 address \"0.0.0.0\", port 5432\nubicor-api-database-1  | 2023-05-29 05:25:52.997 UTC [1] LOG:  listening on IPv6 address \"::\", port 5432\nubicor-api-database-1  | 2023-05-29 05:25:52.999 UTC [1] LOG:  listening on Unix socket \"/var/run/postgresql/.s.PGSQL.5432\"\nubicor-api-database-1  | 2023-05-29 05:25:53.002 UTC [52] LOG:  database system was shut down at 2023-05-29 05:25:52 UTC\nubicor-api-database-1  | 2023-05-29 05:25:53.005 UTC [1] LOG:  database system is ready to accept connections\nubicor-api-app-1       | INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.\nubicor-api-app-1       | INFO  [alembic.runtime.migration] Will assume transactional DDL.\nubicor-api-app-1       | INFO  [alembic.runtime.migration] Running upgrade  -\u003e 4f275ac0046b, create models\nubicor-api-app-1       | \nubicor-api-app-1       | INIT create superuser\nubicor-api-app-1       | FINISH create superuser\nubicor-api-app-1       | \nubicor-api-app-1       | INIT insert initial data\nubicor-api-app-1       | FINISH insert initial data\nubicor-api-app-1       | INFO:     Will watch for changes in these directories: ['/code']\nubicor-api-app-1       | INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)\nubicor-api-app-1       | INFO:     Started reloader process [1] using watchgod\nubicor-api-app-1       | INFO:     Started server process [24]\nubicor-api-app-1       | INFO:     Waiting for application startup.\nubicor-api-app-1       | INFO:     Application startup complete.\n```\n\nLo cual indicará que el proyecto esta corriendo en el puerto 8000\n\n# Configurar Integración Continua\n\n## Github Actions\n\nPara poner en funcionamiento las github actions se debe configurar los secrets\n\n- DOCKER_PASSWORD\n- DOCKER_USER\n- AMAZON_SERVER_KEY\n\nY antes de esto la app debe estar corriendo instalada y corriendo en el server usando\n[el repositorio de configuración del servidor](https://github.com/CrissAlvarezH/cristian-projects-server)\n\n# Comandos\n\n## Subir imagenes masivamente\n\nEste comando nos permite suber imagenes a distintos bloques de forma masiva, para esto primer\ndebemos dejar las imagenes en la carpeta `app/universities/commands/ubicor_imgs` (para Ubicor)\nestas imagenes las encontramos en los backups que se toman del servidor, las subcarpetas deben llevar\nel nombre de los bloques, despues de esto podemos correr el siguiente comando.\n\n```\npython manage.py universities upload-unicor-imgs \u003cdomain\u003e \u003cuser\u003e \u003cpassword\u003e\n```\n\nLos parametros que debemos pasar son del backend al cual queremos apuntar.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrissalvarezh%2Fubicor-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrissalvarezh%2Fubicor-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrissalvarezh%2Fubicor-api/lists"}