diff --git a/README.md b/README.md index 0ef43ea..55cc11f 100644 --- a/README.md +++ b/README.md @@ -1 +1,11 @@ -# tesffullstack +# tesffullstack — Cristian Joya + +Repositorio de la prueba técnica full stack. El trabajo se organiza en tres ramas independientes, una por capa: + +| Rama | Responsabilidad | +|------|-----------------| +| `joya_bd` | Esquema MySQL `bd_joya` y scripts de provisión | +| `joya_backend` | API REST con Spring Boot | +| `joya_frontend` | Cliente Angular `frontend_joya` | + +La documentación detallada de cada capa se encuentra en el `README.md` de su respectiva carpeta. diff --git a/bd/02_crear_usuario_conexion.sql b/bd/02_crear_usuario_conexion.sql new file mode 100644 index 0000000..c1f12b2 --- /dev/null +++ b/bd/02_crear_usuario_conexion.sql @@ -0,0 +1,4 @@ +-- Ejecutar como root, con bd_joya ya creada +CREATE USER IF NOT EXISTS 'conexion'@'localhost' IDENTIFIED BY 'Joy@Bd2026!x7'; +GRANT ALL PRIVILEGES ON bd_joya.* TO 'conexion'@'localhost'; +FLUSH PRIVILEGES; diff --git a/bd/README.md b/bd/README.md index 0ad162f..a085e84 100644 --- a/bd/README.md +++ b/bd/README.md @@ -1,44 +1,60 @@ -# Requerimientos - -- MySQL instalado en su sistema. Desarrollado con Ver 8.0.31 for Win64 on x86_64 (MySQL Community Server - GPL). -- Acceso de administrador a MySQL. - -# Despliegue y Ejecución - -1. Clonar este repositorio: - ``` - git clone https://github.com/usuario/repositorio.git - ``` - -2. Iniciar sesión en MySQL como usuario root: - ``` - mysql -u root -p - ``` - -3. Cargar el script de creación de la base de datos: - ``` - source ruta_del_script_creacion_bd.sql - ``` - Ejemplo: `D:\SRC\GitHub\tonysoft2018\tesffullstack\bd\script_creacion_bd.sql` - -4. Cambiar a la base de datos recién creada: - ``` - USE bd_garcia; - ``` - -5. Ejecutar la consulta para verificar los datos en la tabla person: - ``` - SELECT * FROM person; - ``` - -6. Crear un nuevo usuario para la conexión del backend y otorgarle privilegios: - ``` - CREATE USER 'conexion'@'localhost' IDENTIFIED BY 'Wk2!rT8s@6w'; - GRANT ALL PRIVILEGES ON bd_garcia.* TO 'conexion'@'localhost'; - FLUSH PRIVILEGES; - ``` - -7. Salir de MySQL: - ``` - exit; - ``` \ No newline at end of file +# Módulo de base de datos — `joya_bd` + +**Autor:** Cristian Joya +**Motor:** MySQL 8.0 +**Base de datos:** `bd_joya` + +## Contexto + +Este módulo define la capa de persistencia para la prueba técnica full stack. La base `bd_joya` centraliza el catálogo de personas que consumirán, en fases posteriores, el servicio REST (rama `joya_backend`) y la aplicación Angular `frontend_joya`. + +La nomenclatura sigue el criterio del examen: prefijo `bd_` + apellido del desarrollador. + +## Modelo de datos + +La entidad principal es la tabla `person`, diseñada para soportar el CRUD de la aplicación: + +| Campo | Tipo | Restricción | Rol | +|-------|------|-------------|-----| +| `id` | `INT` | `PRIMARY KEY`, `AUTO_INCREMENT` | Identificador interno | +| `nombre` | `VARCHAR(255)` | — | Nombre de la persona | +| `apellido` | `VARCHAR(255)` | — | Apellido | +| `fechaNacimiento` | `DATE` | — | Fecha de nacimiento | +| `puesto` | `VARCHAR(255)` | — | Puesto laboral | +| `sueldo` | `DECIMAL(10,2)` | — | Remuneración | + +El identificador autoincremental garantiza integridad referencial simple y compatibilidad directa con JPA (`GenerationType.IDENTITY`) en el backend. + +## Seguridad y acceso + +Se definió un usuario dedicado para la aplicación, separado del administrador del servidor: + +| Parámetro | Valor | +|-----------|-------| +| Usuario | `conexion` | +| Host | `localhost` | +| Alcance de permisos | `ALL PRIVILEGES` sobre `bd_joya.*` | +| Contraseña | `Joy@Bd2026!x7` | + +Con esto el backend se conecta con credenciales de mínimo privilegio sobre un único esquema, sin exponer el usuario `root` del motor. + +## Artefactos entregados + +- **`script_creacion_bd.sql`** — Provisiona la base `bd_joya`, crea `person` e incluye registros semilla para validar el entorno. +- **`02_crear_usuario_conexion.sql`** — Registra el usuario `conexion` y aplica los grants correspondientes. + +Ambos scripts son idempotentes en la creación de objetos (`IF NOT EXISTS` / `CREATE USER IF NOT EXISTS`) para permitir re-ejecución sin fallos en entornos ya provisionados. + +## Entorno de validación + +La implementación fue probada en **MySQL Server 8.0** (Windows), con ejecución de scripts desde MySQL Workbench y verificación de lectura/escritura mediante el usuario `conexion`. + +## Evidencia + +Captura del esquema y datos cargados tras la ejecución local: + +![Evidencia de base de datos desplegada](capturas/evidencia_bd.jpg) + +## Consideraciones + +Los `INSERT` iniciales son datos de prueba para confirmar conectividad y mapeo; no representan información productiva. El esquema puede extenderse en iteraciones futuras (índices, auditoría, soft delete) sin impactar el contrato actual del API. diff --git a/bd/capturas/evidencia_bd.jpg b/bd/capturas/evidencia_bd.jpg new file mode 100644 index 0000000..ab990d0 Binary files /dev/null and b/bd/capturas/evidencia_bd.jpg differ diff --git a/bd/script_creacion_bd.sql b/bd/script_creacion_bd.sql index 89a9fbc..05a1fbb 100644 --- a/bd/script_creacion_bd.sql +++ b/bd/script_creacion_bd.sql @@ -1,6 +1,6 @@ -CREATE DATABASE IF NOT EXISTS bd_garcia; +CREATE DATABASE IF NOT EXISTS bd_joya; -USE bd_garcia; +USE bd_joya; CREATE TABLE IF NOT EXISTS person ( id INT AUTO_INCREMENT PRIMARY KEY, @@ -10,3 +10,7 @@ CREATE TABLE IF NOT EXISTS person ( puesto VARCHAR(255), sueldo DECIMAL(10, 2) ); + +INSERT INTO person (nombre, apellido, fechaNacimiento, puesto, sueldo) VALUES +('Cristian', 'Joya', '1995-06-15', 'Desarrollador Full Stack', 45000.00), +('Maria', 'Lopez', '1990-03-22', 'Analista de datos', 38000.50);