Vosinepi / vemo_challenge_back

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Iber Ismael Piovani

API v1 Documentation

Objetivo

Tomar los datos de paises de una API externa y los guarda en una base de datos Postgresql. Mejorar y actualizar esta lista agregando los datos de actividades y permitiendo el envio por mail de los datos de la lista o la descargar. api: https://restcountries.com/v3.1/all

Requerimientos

Uso

  • Clonar el repositorio
git clone
  • Crear un entorno virtual
python -m venv venv
  • correr Docker de Postgresql

Colocar el puerto 5432, yo utilize otro por que ya tenia ocupado ese.

docker run -d --name paises_vemo -v my_db:/var/lib/postgresql/data_vemo -p 5000:5432 -e POSTGRES_PASSWORD=postgres -e POSTGRES_USER=postgres -e POSTGRES_DB=vemo_pais postgres


- test ddbb

docker exec -it paises_vemo psql -p 5432 -h localhost -U postgres -W vemo_pais


- Instalar las dependencias

pip install -r requirements.txt


- cargar las credenciales de la base de datos en el archivo `.env`

- Correr el servidor FastAPI con Uvicorn. El servidor se ejecutará en el puerto 8000.

main.py


## Endpoints

http://localhost:8000/api/v1/docs

### Root

- URL: `/`

### Mostrar todos los países

Retorna una lista con todos los países disponibles.

- Método: GET
- URL: `/api/v1/paises`
- Respuesta exitosa:
  - Código: 200 (OK)
  - Contenido: Lista de países en formato JSON

### Países por ID

Retorna la información de un país específico basado en su ID.

- Método: GET
- URL: `/api/v1/paises/{id}`
- Parámetros de URL:
  - `id`: ID del país
- Respuesta exitosa:
  - Código: 200 (OK)
  - Contenido: Información del país en formato JSON

### Buscador de países

Permite buscar países por nombre, capital o continente.

- Método: GET
- URL: `/api/v1/paises`
- Parámetros de consulta:
  - `nombre`: Filtra los países por nombre (opcional)
  - `capital`: Filtra los países por capital (opcional)
  - `continente`: Filtra los países por continente (opcional)
- Respuesta exitosa:
  - Código: 200 (OK)
  - Contenido: Lista de países que coinciden con los criterios de búsqueda en formato JSON

### Crear actividad

Crea una nueva actividad.

- Método: POST
- URL: `/api/v1/actividades`
- Cuerpo de la solicitud: Datos de la actividad en formato JSON
- Respuesta exitosa:
  - Código: 201 (Created)
  - Contenido: Datos de la actividad creada en formato JSON

### Actualizar actividad

Actualiza una actividad existente.

- Método: PUT
- URL: `/api/v1/actividades/{id}`
- Parámetros de URL:
  - `id`: ID de la actividad
- Cuerpo de la solicitud: Datos actualizados de la actividad en formato JSON
- Respuesta exitosa:
  - Código: 200 (OK)
  - Contenido: Datos de la actividad actualizada en formato JSON

### Borrar actividad

Elimina una actividad existente.

- Método: DELETE
- URL: `/api/v1/actividades/{id}`
- Parámetros de URL:
  - `id`: ID de la actividad
- Respuesta exitosa:
  - Código: 204 (No Content)

### Ver todas las actividades

Retorna una lista con todas las actividades disponibles.

- Método: GET
- URL: `/api/v1/actividades`
- Respuesta exitosa:
  - Código: 200 (OK)
  - Contenido: Lista de actividades en formato JSON

### Utilidades

Envio de mail con excel y descarga de excel

- Método: GET
- URL: `/api/v1/exportar/?correo=`
- Parámetros de URL:
  - `?correo=`: correo electronico
- Respuesta exitosa:
  - Código: 200 (OK)
  - Contenido: Mail enviado con excel

Descarga de excel

- Método: GET
- URL: `/api/v1/descargas`
- Respuesta exitosa:
  - Código: 200 (OK)
  - Contenido: archivo excel

### Scheduler

Estado scheduler

- Método: GET
- URL: `/api/v1/scheduler`
- Respuesta exitosa:
  - Código: 200 (OK)
  - Contenido: En funcionamiento o Detenido

Start scheduler inicia la actualizacion de la base de datos cada 24 horas
o por el tiempo que nosotros le asignemos en segundos.

- Método: GET
- URL: `api/v1/schedulerstart/?segundos=`
- Parámetros de URL:
  - `?segundos=`: tiempo en segundos de intervalo de actualizacion
- Respuesta exitosa:
  - Código: 200 (OK)
  - Contenido: En funcionamiento o Iniciando

Stop scheduler

- Método: GET
- URL: `/api/v1/schedulerstop`
- Respuesta exitosa:
  - Código: 200 (OK)
  - Contenido: Detenido o Deteniendo

## Cache

Se utilizo fastapi-cache2 junto a memcached y cachetools para la cache de los endpoints de paises y actividades.
La cache se inicia al iniciar el servidor y se actualiza cada 60 minutos o cuando se actulizan los datos de la base datos.

## Scheduler

Se utilizo apscheduler para la ejecucion de la actualizacion de la base de datos cada 24 horas. Se utilizo una clase para la creacion del scheduler que permite controlar inicio, fin y estado.
Se implemento un sistema de logging para controlar los eventos, inicio, fin, carga de datos, envio de mail.

## Contacto

- [Linkedin](https://www.linkedin.com/in/iber-ismael-piovani-8b35bbba/)
- [Twitter](https://twitter.com/laimas)
- [Github](https://github.com/Vosinepi)


About


Languages

Language:Python 71.8%Language:Jupyter Notebook 28.2%