Skip to content

Commit b89b28d

Browse files
authored
Enhance README with database architecture and setup
Added database architecture and project setup instructions in Spanish.
1 parent 1b1480a commit b89b28d

1 file changed

Lines changed: 336 additions & 0 deletions

File tree

README.md

Lines changed: 336 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,34 @@
33
A professional fullstack application built with **React, Express, Sequelize, and PostgreSQL.**
44
This project demonstrates secure user authentication, email verification workflows, password recovery, and deployment-ready architecture ideal for showcasing fullstack skills.
55

6+
<img width="1861" height="991" alt="image" src="https://github.com/user-attachments/assets/6adfad9f-3bb0-4740-a4a4-8cefd49dfcc6" />
7+
8+
---
9+
10+
## 📊 Database Architecture
11+
12+
``` mermaid
13+
erDiagram
14+
USER ||--o| EMAIL_CODE : "generates"
15+
16+
USER {
17+
int id PK
18+
string first_name
19+
string last_name
20+
string email UK
21+
string password
22+
string country
23+
string image
24+
boolean isVerify
25+
}
26+
27+
EMAIL_CODE {
28+
int id PK
29+
string code
30+
int userId FK
31+
}
32+
```
33+
634
---
735

836
## 🌐 Deployment
@@ -277,3 +305,311 @@ npm run dev
277305

278306
## 🎨Author
279307
Developed as part of the Node.js & Backend module, with the goal of consolidating skills in authentication, email workflows, frontend–backend integration, cloud deployment, and professional documentation as part of a fullstack project.
308+
309+
🔽 **Versión en Español** 🔽
310+
311+
## 📧 Proyecto Fullstack: Autenticación y Verificación por Email
312+
313+
Una aplicación fullstack profesional construida con React, Express, Sequelize y PostgreSQL.
314+
Este proyecto implementa flujos seguros de autenticación de usuarios, verificación de cuenta por correo electrónico, recuperación de contraseñas y una arquitectura lista para despliegue.
315+
316+
<img width="1861" height="991" alt="image" src="https://github.com/user-attachments/assets/6adfad9f-3bb0-4740-a4a4-8cefd49dfcc6" />
317+
318+
---
319+
320+
## 📊 Arquitectura de la Base de Datos
321+
322+
``` mermaid
323+
erDiagram
324+
USER ||--o| EMAIL_CODE : "generates"
325+
326+
USER {
327+
int id PK
328+
string first_name
329+
string last_name
330+
string email UK
331+
string password
332+
string country
333+
string image
334+
boolean isVerify
335+
}
336+
337+
EMAIL_CODE {
338+
int id PK
339+
string code
340+
int userId FK
341+
}
342+
```
343+
344+
---
345+
346+
## 🌐 Despliegue
347+
348+
### 🚀 Backend: Servidor en línea con Render
349+
🔗 https://auth-mailer-api.onrender.com
350+
351+
---
352+
353+
### 📄 Documentación de la API: Colección de Postman
354+
🔗 https://documenter.getpostman.com/view/48309056/2sB3dQwAK2
355+
356+
---
357+
358+
### 🌐 Frontend: Aplicación en línea con Netlify
359+
🔗 https://auth-mailer-api.netlify.app
360+
361+
---
362+
363+
## 🎯 Objetivos del Proyecto
364+
365+
Este proyecto fue diseñado para:
366+
367+
- Construir un **sistema de autenticación de usuarios** con verificación vía email antes de activar la cuenta.
368+
- Implementar cifrado seguro de contraseñas y login basado en tokens (**JWT**).
369+
- Proveer endpoints CRUD completos para la gestión de usuarios.
370+
- Integrar un frontend en React con una API desplegada en Render.
371+
- Documentar el proyecto profesionalmente para facilitar su clonación y ejecución.
372+
373+
---
374+
375+
## 🧠 Habilidades Reforzadas
376+
377+
- **Desarrollo Full Stack:** Integrando frontend (React + Vite) con backend (Express + Sequelize + PostgreSQL).
378+
- **Autenticación y Seguridad:** Contraseña hasheada, Verificación de email, tokens de JWT.
379+
- **Modelado de Base de Datos:** Uso de Sequelize ORM para relaciones entre `User` y `EmailCode`.
380+
- **Diseño de API RESTful:** Endpoints públicos y protegidos con códigos de estado HTTP correctos.
381+
- **Habilidades de Despliegue:** backend desplegada en Render y frontend en Netlify/Vercel.
382+
383+
---
384+
385+
## 📌 Funcionalidades Principales
386+
387+
- Registro de usuario con envío automático de correo de verificación.
388+
- Login seguro que valida si la cuenta ha sido verificada.
389+
- Operaciones CRUD completas para usuarios.
390+
- Reto Opcional: Recuperación de contraseña mediante códigos enviados por email.
391+
- Rutas protegidas que requieren token de autenticación.
392+
393+
---
394+
395+
## 📁 Endpoints de API
396+
397+
### Endpoints Públicos
398+
| Método | Endpoint | Función |
399+
|--------|-------------------------|---------|
400+
| POST | `/users` | Create user and send verification email |
401+
| GET | `/users/verify/:code` | Verify user email with code |
402+
| POST | `/users/login` | Login with email & password |
403+
404+
### Protected Endpoints
405+
| Método | Endpoint | Función |
406+
|--------|------------------|---------|
407+
| GET | `/users/me` | Regresa un usuario logueado |
408+
| GET | `/users` | Regresa todos los usuarios |
409+
| GET | `/users/:id` | Regresa un usuario por id |
410+
| PUT | `/users/:id` | Actualiza un usuario por id |
411+
| DELETE | `/users/:id` | Elimina un usuario por id |
412+
413+
### Reto Opcional: Cambiar Contraseña
414+
| Método | Endpoint | Función |
415+
|--------|--------------------------------|---------|
416+
| POST | `/users/reset_password` | Envíar código para el cambio de contraseña al email del usuario |
417+
| POST | `/users/reset_password/:code` | Cambiar contraseña con el código |
418+
419+
---
420+
421+
## 🗂️ Modelos de la API
422+
423+
### Uusuario
424+
| Campo | Descripción |
425+
|-------------|-------------|
426+
| id | Llave Primaria |
427+
| first_name | Nombre de Usuario |
428+
| last_name | Apellido de Usuario |
429+
| email | Email de Usuario |
430+
| password | Contraseña Encriptada |
431+
| country | País de Usuario |
432+
| image | Imagen de Perfil |
433+
| isVerify | Dato booleano, por defecto `false` |
434+
435+
### Código de Email
436+
| Campo | Descripción |
437+
|--------|-------------|
438+
| id | Llave Primaria |
439+
| code | Verificación o Cambio de código |
440+
| user_id| Usuario Asociado |
441+
442+
---
443+
444+
## 💻🚀 Tech Stack
445+
446+
| Frontend | Backend | Despliegue | Base de Datos |
447+
|---------------|---------------|------------|------------|
448+
| React 18 | Node.js | Render | PostgreSQL |
449+
| Vite | Express | Netlify | Sequelize ORM |
450+
| Axios | Helmet | Postman | pg / pg-hstore |
451+
| Bootstrap | Morgan | | |
452+
| Bootswatch | CORS | | |
453+
454+
---
455+
456+
## 🗂️ Estructura de Proyecto
457+
458+
```bash
459+
📁 S04E04
460+
| ├── 📁 email-api
461+
| └── 📁 node_modules/
462+
| └── 📁 src/
463+
|| └── 📁 config/
464+
| | | └── env.js
465+
|| └── 📁 controllers/
466+
| | | └── emails.controller.js
467+
| | | └── users.controller.js
468+
|| └── 📁 db/
469+
| | | └── connect.js
470+
|| └── 📁 mails/
471+
| | | └── mailer.js
472+
|| └── 📁 middlewares/
473+
| | | └── auth.js
474+
| | | └── catchError.js
475+
| | | └── errorHandler.js
476+
|| └── 📁 models/
477+
| | | └── emailcode.model.js
478+
| | | └── user.model.js
479+
|| └── 📁 routes/
480+
| | | └── emails.routes.js
481+
| | | └── index.js
482+
| | | └── users.routes.js
483+
| | └── app.js
484+
| | └── server.js
485+
| | └── .env
486+
| | └── .env.example
487+
| | └── package-lock.json
488+
| | └── package.json
489+
| ├── 📁 entregable4-frontend-2-main
490+
| └── 📁 node_modules/
491+
| └── 📁 src/
492+
|| └── 📁 assets/
493+
| | | └── login-background.mp4
494+
|| └── 📁 auth/
495+
|| | └── 📁 pages/
496+
| | | | └── 📁 AuthLayout/
497+
| | | | | └── AuthLayout.component.jsx
498+
| | | | | └── AuthLayout.styles.css
499+
| | | | └── 📁 ChangePassword/
500+
| | | | | └── ChangePassword.component.jsx
501+
| | | | └── 📁 Login/
502+
| | | | | └── Login.component.jsx
503+
| | | | | └── Login.styles.css
504+
| | | | └── 📁 ResetPassword/
505+
| | | | | └── ResetPassword.component.jsx
506+
| | | | └── 📁 SignUp/
507+
| | | | | └── SignUp.component.jsx
508+
| | | | | └── SignUp.styles.css
509+
| | | | └── 📁 VerificateEmail/
510+
| | | | | └── VerificateEmail.component.jsx
511+
| | | | | └── VerifyEmail.styles.css
512+
| | | | └── authRouter.jsx
513+
| | | | └── authSlice.jsx
514+
|| └── 📁 reduxStore/
515+
|| | └── store.js
516+
|| └── 📁 shared/
517+
|| | └── 📁 Notification/
518+
| | | | └── Notification.component.jsx
519+
| | | | └── Notification.styles.css
520+
| | | | └── notificationSlice.jsx
521+
|| | └── 📁 ProtectedRoute/
522+
| | | | └── ProtectedRoute.component.jsx
523+
|| └── 📁 users/
524+
|| | └── 📁 components/
525+
| | | | └── 📁 LoggedUserCard/
526+
| | | | | └── LoggedUserCard.component.jsx
527+
| | | | | └── LoggedUserCard.styles.css
528+
| | | | └── 📁 NavBar/
529+
| | | | | └── NavBar.component.jsx
530+
| | | | | └── NavBar.styles.css
531+
|| | └── 📁 pages/
532+
| | | | └── 📁 AllUsers/
533+
| | | | | └── AllUsers.component.jsx
534+
| | | | └── 📁 UsersLayout/
535+
| | | | | └── UsersLayout.component.jsx
536+
| | | | | └── UsersLayout.styles.css
537+
|| | └── userRouter.jsx
538+
|| └── 📁 utils/
539+
| | | └── axios.js
540+
|| └── App.css
541+
|| └── App.jsx
542+
|| └── router.jsx
543+
|| └── main.jsx
544+
| └── .env
545+
| └── .env.example
546+
| | └── .eslintrc.cjs
547+
| └── index.html
548+
| └── package-lock.json
549+
| └── package.json
550+
| └── vite.config.js
551+
| └── .gitignore
552+
```
553+
---
554+
555+
## ⚙️ Configuración e Instalación
556+
557+
### 🔧 Configuración de Backend
558+
559+
1. Clona este repositorio:
560+
```bash
561+
git clone https://github.com/your-username/Auth-Mailer-API.git
562+
```
563+
564+
2. Cambia directorio a backend:
565+
```bash
566+
cd S04E04/email-api
567+
```
568+
569+
3. Instala dependencias:
570+
```bash
571+
npm install
572+
```
573+
574+
4. Configura las variables de entorno:
575+
- Copia .env.example a .env
576+
- Modifica los valores de las variables necesarias.
577+
- Ejemplo de Configuración:
578+
579+
```bash
580+
NODE_ENV=development
581+
PORT=4000
582+
DATABASE_URL=postgres://user:password@localhost:5432/emails_db
583+
EMAIL=
584+
GOOGLE_APP_PASSWORD=
585+
SECRET_KEY=
586+
EXPIRE_IN=1d
587+
```
588+
589+
5. Corre el servidor en modo desarrollo:
590+
```bash
591+
npm run dev
592+
```
593+
---
594+
595+
🎨 Configuración de Frontend
596+
597+
1. Cambia el directorio a frontend:
598+
```bash
599+
cd S04E04/entregable4-frontend-2-main
600+
```
601+
602+
2. Instala dependencias:
603+
```bash
604+
npm install
605+
```
606+
607+
3. Corre frontend:
608+
```bash
609+
npm run dev
610+
```
611+
612+
---
613+
614+
## 🎨Autor
615+
Desarrollado por Clio como parte del módulo de Node.js y Backend, consolidando flujos de trabajo profesionales y entornos reproducibles.

0 commit comments

Comments
 (0)