Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -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.
4 changes: 4 additions & 0 deletions bd/02_crear_usuario_conexion.sql
Original file line number Diff line number Diff line change
@@ -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;
104 changes: 60 additions & 44 deletions bd/README.md
Original file line number Diff line number Diff line change
@@ -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;
```
# 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.
Binary file added bd/capturas/evidencia_bd.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 6 additions & 2 deletions bd/script_creacion_bd.sql
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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);