https://github.com/cristianv0117/granadatest
granada backend test laravel
https://github.com/cristianv0117/granadatest
Last synced: about 2 months ago
JSON representation
granada backend test laravel
- Host: GitHub
- URL: https://github.com/cristianv0117/granadatest
- Owner: cristianV0117
- Created: 2025-07-25T03:28:17.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2025-07-25T21:59:25.000Z (3 months ago)
- Last Synced: 2025-07-26T04:46:45.639Z (3 months ago)
- Language: Blade
- Size: 85.9 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 🌍 GranadaTest Backend - Laravel + GraphQL - Cristian Vasquez
Backend para el reto técnico FullStack de **Granada**, desarrollado en **Laravel 12 (Sail)** con **PHP 8.4**, arquitectura limpia, patrón repository + use cases, integración de **GraphQL** y comunicación con una base de datos PostgreSQL alojada en **Railway**.
---
## 📦 Tecnologías usadas
- **Laravel 12.x** (con Laravel Sail)
- **PHP 8.4**
- **GraphQL (rebing/graphql-laravel)**
- **Docker (Laravel Sail)**
- **PostgreSQL (Railway)**
- **Patrón Repository + Casos de Uso + DTOs**
- **Principios SOLID**
- **PSR-4**
- **GitHub Actions (CI/CD)**---
## ⚙️ Funcionalidad
### 🎯 Endpoints GraphQL
- `getTopCountries(limit: Int!)`:
Retorna dinámicamente los países con mayor densidad demográfica (`population / area`) consumiendo datos en tiempo real desde `https://restcountries.com/v3.1/all`.- `getLogs(start_date: String, end_date: String)`:
Lista los logs históricos de uso filtrados por rango de fechas.- `storeLog(input: LogInput!)`:
Guarda un nuevo log de consulta (automático desde el frontend).- `updateLog(id: ID!, username: String!)`:
Permite editar el nombre de usuario en un log existente.- `deleteLog(id: ID!)`:
Elimina un log por su ID.---
## 🧱 Arquitectura
Implementación basada en principios SOLID y Clean Architecture:
## 🚀 Despliegue
### 🌐 Producción
- Frontend desplegado en: [https://granadatest-production.up.railway.app/graphql](https://granadatestfront-production.up.railway.app)
- Se comunica con el frontend angular mediante GraphQL alojado en Railway.- Separación clara entre infraestructura y dominio.
- Uso de DTOs para entrada/salida de datos.
- Fácil extensión o reemplazo del motor de base de datos gracias al uso de interfaces y repositorios.---
## 🗃 Base de Datos
- Motor: **PostgreSQL**
- Servicio: **Railway**
- Tabla: `logs`| Campo | Tipo | Descripción |
|------------------------|------------|--------------------------------------------|
| id | UUID | Identificador único |
| username | string | Nombre del usuario que hizo la consulta |
| request_timestamp | timestamp | Fecha y hora de la petición |
| num_countries_returned | int | Número de países retornados |
| countries_details | json | Detalle de países con densidad calculada |---
## 🐳 Instalación y desarrollo local con Sail
```bash
# Clona el proyecto
git clone https://github.com/[TU_USUARIO]/granadatest.git
cd granadatest# Copia las variables
cp .env.example .env# Levanta el entorno
./vendor/bin/sail up -d# Instala dependencias
./vendor/bin/sail composer install# Ejecuta migraciones
./vendor/bin/sail artisan migrate# Opcional: prueba el endpoint GraphQL
http://localhost/graphql