Skip to content

Parritoso/Laravel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

124 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Documentación del Proyecto: NexusGear

1. Introducción y Concepto

NexusGear es un comercio electrónico desarrollado con Laravel para la venta de periféricos tecnológicos ergonómicos. La tienda está orientada a dos perfiles principales de usuario:

  • Office & Focus: usuarios que buscan comodidad, productividad y salud postural durante largas jornadas de trabajo.
  • Gamer Pro: usuarios que buscan periféricos de alto rendimiento sin renunciar a la ergonomía.

El catálogo incluye productos como ratones verticales, teclados compactos, reposamuñecas y soportes para portátiles. La versión 1.0 se centra en el caso de uso principal pedido en la EPD 3: permitir que un usuario registrado compre productos, consulte sus pedidos y reciba confirmación por correo, mientras que el administrador puede gestionar productos y pedidos. La entrega 2.0 amplía el alcance con categorías N:M, gestión de perfil (idioma, direcciones y contraseña), favoritos y métricas de popularidad en administración.

2. Objetivos del Proyecto

El desarrollo se fundamenta en los siguientes pilares:

  • Frameworks: uso de Laravel 12, Eloquent ORM, Blade, Vite + SASS y Bootstrap 5.
  • Funcionalidad: implementación del caso principal de compra, operaciones CRUD de productos, carrito, pedidos y panel de administración.
  • Autenticación: sistema completo de registro, inicio de sesión, verificación de correo y recuperación de contraseña mediante Laravel Fortify.
  • Identidad de marca: diseño visual propio basado en la psicología del color asignado al grupo.
  • Comunicación: configuración SMTP para recuperación de contraseñas y confirmación de pedidos.
  • Persistencia: diseño relacional con relaciones 1:1, 1:N y N:M, seeders y control transaccional en el checkout.
  • Categorías: gestión N:M con CRUD en administración y filtros avanzados en el catálogo.
  • Perfil e idioma: edición del perfil, direcciones y preferencia de idioma aplicada en la interfaz.
  • Favoritos: listado personal y panel administrativo con ranking de productos más guardados.
  • Gestión del proyecto: uso de Git, GitHub y tablero Kanban para organizar el trabajo.

Repositorio público: https://github.com/Parritoso/Laravel

2.1 Entorno local con Docker

El proyecto incluye una pila Docker Compose para levantar NexusGear sin instalar PHP, MySQL, Redis, MongoDB ni Node directamente en el sistema.

Servicios expuestos:

Si algún puerto ya está ocupado, puedes cambiarlo al ejecutar make, por ejemplo:

make docker-up APP_PORT=8081

Comandos desde la raíz del repositorio:

make docker-up
make docker-test
make docker-reset
make docker-down

make docker-up crea NexusGear/.env desde NexusGear/.env.docker.example si no existe, construye la imagen PHP, instala dependencias, genera APP_KEY, ejecuta migraciones y siembra datos de demo cuando la base de datos está vacía.

Para probar compras reales en local, configura STRIPE_SECRET con una clave de test válida en NexusGear/.env. Los correos de recuperación, verificación y pedidos se capturan en Mailpit.

3. Identidad Visual y Diseño (UI/UX)

Siguiendo las directrices del proyecto, se ha establecido el verde agua como color primario de la plataforma. Esta elección encaja con la temática ergonómica porque transmite calma, equilibrio, frescura y bienestar, valores relacionados con la reducción de fatiga en contextos de trabajo y juego prolongado.

  • Psicología del color: el verde agua refuerza la idea de salud postural, comodidad y tecnología no agresiva.
  • Aplicación en Bootstrap 5: se personaliza la variable $primary en SASS para que botones, enlaces, badges, navegación y estados visuales mantengan coherencia de marca.
  • Diseño responsive: las vistas públicas y de administración están construidas con Bootstrap 5 y componentes propios, adaptadas a escritorio y móvil.

3.1 Guía de Estilo Técnica (Paleta de Colores)

Uso Nombre Código HEX
Color primario real en SASS Verde agua #4FD1C5
Variación oscura / precio Verde profundo #117864
Texto principal / panel admin Dark Gear #2D3748
Fondo de interfaz Gris claro #F8FAFC
Superficies Blanco #FFFFFF

3.2 Mockups de la Aplicación

Los mockups se encuentran en la carpeta docs/ y sirven como referencia visual del flujo público, el flujo de usuario autenticado y el panel de administración. Se plantean con una composición limpia, navegación superior en la tienda pública, sidebar en administración y componentes de formulario/listado coherentes con Bootstrap 5.

Mockups de tienda y usuario

Página principal

Mockup de página principal

Catálogo de productos

Mockup de catálogo

Detalle de producto

Mockup de detalle de producto

Historial de pedidos del usuario

Mockup de pedidos del usuario

Inicio de sesión

Mockup de login

Perfil de usuario

Mockup de perfil

Edición de perfil

Mockup de edición de perfil

Área segura (cambio de contraseña)

Mockup de cambio de contraseña

Lista de favoritos

Mockup de favoritos

Mockups del panel de administración

Dashboard de administración

Mockup de dashboard admin

Gestión de productos

Mockup de gestión de productos

Listado de pedidos

Mockup de pedidos admin

Formulario de edición de producto

Mockup de edición de producto

Detalle de pedido

Mockup de detalle de pedido admin

4. Análisis de Requisitos (v1.0)

4.1 Requisitos Funcionales

  • El catálogo de productos debe ser público para usuarios no registrados.
  • El sistema debe permitir buscar productos por nombre o descripción, filtrarlos por perfil/categoría principal y ordenarlos por precio o nombre.
  • El usuario debe poder registrarse, iniciar sesión, cerrar sesión, verificar su correo y recuperar la contraseña.
  • El usuario registrado y verificado debe poder añadir productos al carrito, modificar cantidades, eliminar líneas y vaciar el carrito.
  • El checkout debe validar stock, crear el pedido, descontar inventario, generar factura y vaciar el carrito.
  • El usuario debe poder consultar el historial de pedidos y el detalle de cada pedido propio.
  • El usuario debe recibir un correo de confirmación tras completar una compra.
  • El administrador debe poder crear, editar, listar y eliminar productos.
  • El administrador debe poder consultar todos los pedidos y actualizar su estado.
  • Un usuario estándar no debe poder acceder a rutas de administración.
  • El sistema debe permitir asignar una o varias categorías a cada producto y filtrar por categorías múltiples.
  • El administrador debe poder gestionar categorías (CRUD) y asociarlas a productos en altas y ediciones.
  • El usuario debe poder gestionar su perfil (nombre, idioma, direcciones) y cambiar la contraseña desde un área segura.
  • La plataforma debe mostrar la interfaz en español o inglés según el idioma del usuario.
  • El usuario debe poder marcar y desmarcar favoritos y consultarlos desde su perfil.
  • El administrador debe poder consultar los productos más marcados como favoritos.

4.2 Requisitos No Funcionales y Técnicos

  • Uso obligatorio de Bootstrap 5 para interfaces responsive.
  • Arquitectura de base de datos diseñada previamente con cardinalidades 1:1, 1:N y N:M.
  • Uso de migraciones, modelos Eloquent y seeders.
  • Checkout protegido mediante transacción de base de datos y bloqueo de productos durante la actualización de stock.
  • Código gestionado con Git y alojado en GitHub.
  • Proyecto funcional sin pasarela de pago real.
  • Configuración SMTP mediante variables de entorno.
  • Internacionalización basada en ficheros de idioma y middleware de selección de idioma.
  • Relación N:M gestionada con tabla pivote y migraciones de sincronización.

5. Diseño de la Base de Datos

El proyecto utiliza un modelo relacional para usuarios, roles, catálogo, carritos, pedidos, facturas, direcciones, favoritos, categorías y descuentos.

5.1. Modelo Entidad-Relación (Notación de Chen)

El diagrama conceptual se encuentra en:

Diagrama de Chen

Entidades principales:

  • Usuario: cuenta registrada en el sistema.
  • Rol: define permisos de administración o cliente.
  • Producto: artículo vendible del catálogo.
  • Categoría: clasificación del producto. En la entrega 2.0 se permite asignar una o varias categorías por producto mediante tabla pivote.
  • Carrito: carrito activo del usuario.
  • Pedido: compra realizada por un usuario.
  • Factura: documento asociado a un pedido.
  • Dirección: direcciones de envío previstas para el perfil de usuario.
  • Favorito: relación entre usuarios y productos guardados.
  • Descuento: cupón o rebaja aplicable a productos.

5.2. Diagrama de Implementación (Mermaid - Crow's Foot)

El siguiente diagrama refleja el esquema físico actual. La relación activa entre producto y categoría en v2.0 se realiza mediante la tabla pivote producto_categoria, lo que permite asociaciones múltiples por producto.

erDiagram
    USERS ||--|| CARRITOS : "posee"
    USERS ||--o{ PEDIDOS : "realiza"
    USERS ||--o{ DIRECCIONES : "gestiona"
    USERS ||--o{ FAVORITOS : "marca"
    USERS ||--o{ ROL_USUARIO : "tiene"
    ROLES ||--o{ ROL_USUARIO : "asigna"

    PRODUCTOS ||--o{ PRODUCTO_CATEGORIA : "clasifica"
    CATEGORIAS ||--o{ PRODUCTO_CATEGORIA : "clasifica"

    CARRITOS ||--o{ ITEM_CARRITO : "contiene"
    PRODUCTOS ||--o{ ITEM_CARRITO : "anadido_a"

    PEDIDOS ||--o{ LINEA_PEDIDO : "contiene"
    PRODUCTOS ||--o{ LINEA_PEDIDO : "vendido_en"
    PEDIDOS ||--|| FACTURAS : "genera"

    PRODUCTOS ||--o{ FAVORITOS : "es_marcado"
    PRODUCTOS ||--o{ DESCUENTO_PRODUCTO : "recibe"
    DESCUENTOS ||--o{ DESCUENTO_PRODUCTO : "aplica"

    USERS {
        bigint id PK
        string name
        string email
        string language
        timestamp email_verified_at
        string password
    }

    ROLES {
        bigint id PK
        string nombre_rol
    }

    ROL_USUARIO {
        bigint usuario_id PK, FK
        bigint rol_id PK, FK
        datetime asignado_el
    }

    PRODUCTOS {
        bigint id PK
        string nombre
        float precio
        text descripcion
        string imagen
        integer stock
        boolean destacado
    }

    CATEGORIAS {
        bigint id PK
        string nombre
        string slug
    }

    CARRITOS {
        bigint id PK
        bigint usuario_id FK
        datetime created_at
        datetime updated_at
    }

    ITEM_CARRITO {
        bigint carrito_id PK, FK
        bigint producto_id PK, FK
        integer cantidad
        float precio_actual
    }

    PEDIDOS {
        bigint id PK
        bigint usuario_id FK
        enum estado
        datetime fecha
    }

    LINEA_PEDIDO {
        bigint pedido_id PK, FK
        bigint producto_id PK, FK
        integer cantidad
        float precio_unitario
        float subtotal
    }

    FACTURAS {
        bigint id PK
        bigint pedido_id FK
        string numero_factura
        float subtotal
        float iva
        float total_factura
        datetime fecha_emision
    }

    DIRECCIONES {
        bigint id PK
        bigint usuario_id FK
        string calle
        string numero
        string ciudad
        string codigo_postal
    }

    FAVORITOS {
        bigint usuario_id PK, FK
        bigint producto_id PK, FK
        datetime agregado_el
    }

    DESCUENTOS {
        bigint id PK
        string codigo
        string tipo
        float valor
        datetime fecha_fin
    }

    PRODUCTO_CATEGORIA {
        bigint producto_id PK, FK
        bigint categoria_id PK, FK
    }

    DESCUENTO_PRODUCTO {
        bigint descuento_id PK, FK
        bigint producto_id PK, FK
    }
Loading

5.3 Cardinalidades Cubiertas

  • 1:1: userscarritos.
  • 1:1: pedidosfacturas.
  • 1:N: userspedidos.
  • 1:N: usersdirecciones.
  • 1:N: carritositem_carrito.
  • 1:N: pedidoslinea_pedido.
  • N:M: usersroles mediante rol_usuario.
  • N:M: usersproductos mediante favoritos.
  • N:M: productosdescuentos mediante descuento_producto.
  • N:M: productoscategorias mediante producto_categoria (relación activa en v2.0).

6. Decisiones de Diseño y Ajustes

  • Precio congelado: item_carrito.precio_actual y linea_pedido.precio_unitario guardan el precio en el momento de la operación.
  • Checkout transaccional: el proceso de compra usa DB::transaction() para crear pedido, líneas, factura, descontar stock y vaciar carrito como una única operación.
  • Bloqueo de stock: durante el checkout se usa lockForUpdate() sobre cada producto para evitar inconsistencias de inventario.
  • Factura única: cada pedido genera una factura con número NG-YYYYMMDD-ID, subtotal, IVA del 21% y total.
  • Carrito por usuario: se crea automáticamente o bajo demanda mediante firstOrCreate().
  • Roles: el middleware admin evita que usuarios estándar entren en el panel de administración.
  • Formato monetario: los modelos exponen accessors para mostrar precios con formato europeo.
  • Categorías N:M: la relación se mueve a producto_categoria, con migración que elimina categoria_id y sincronización desde formularios y seeders.
  • Internacionalización: el idioma se guarda en users.language y SetLocale lo aplica en cada petición; hay ficheros para español, inglés, portugués y japonés.
  • Favoritos: se modelan como tabla pivote con alta/baja instantánea y ranking de popularidad en el dashboard.
  • Descuentos: existe CRUD de descuentos en administración y asignación opcional a productos, aunque no forma parte del alcance mínimo de v1.0.

7. Casos de Uso

CU-01: Navegar por el catálogo

  • Actor: visitante o usuario registrado.
  • Precondición: ninguna.
  • Flujo principal:
    1. El actor accede a la página de productos.
    2. El sistema muestra productos con nombre, descripción, precio, stock y categoría/perfil.
    3. El actor puede buscar por nombre o descripción.
    4. El actor puede filtrar por una o varias categorías (Office & Focus, Gamer Pro, etc.).
    5. El actor puede ordenar por destacados, precio o nombre.
    6. El actor puede abrir el detalle de un producto.

CU-02: Registrarse e iniciar sesión

  • Actor: visitante.
  • Precondición: no tiene sesión iniciada.
  • Flujo principal:
    1. El visitante accede al formulario de registro o login.
    2. El sistema valida los datos mediante Fortify.
    3. Al registrarse, se crea la cuenta y se envía verificación de correo.
    4. Tras verificar el correo, el usuario queda habilitado para rutas protegidas.

CU-03: Gestionar carrito

  • Actor: usuario registrado y verificado.
  • Precondición: sesión iniciada.
  • Flujo principal:
    1. El usuario añade un producto disponible al carrito.
    2. El sistema comprueba el stock.
    3. El usuario modifica cantidades, elimina productos o vacía el carrito.
    4. El carrito muestra subtotales y total actualizado.
  • Flujo alternativo: si la cantidad supera el stock, el sistema rechaza la operación y muestra un aviso.

CU-04: Realizar compra

  • Actor: usuario registrado y verificado.
  • Precondición: carrito con al menos un producto.
  • Flujo principal:
    1. El usuario revisa su carrito.
    2. Pulsa finalizar compra.
    3. El sistema valida stock dentro de una transacción.
    4. El sistema crea pedido, líneas de pedido y factura.
    5. El sistema descuenta stock y vacía el carrito.
    6. El usuario recibe correo de confirmación.
    7. El usuario es redirigido al detalle del pedido.
  • Flujo alternativo: si algún producto no tiene stock suficiente, no se crea pedido y el carrito permanece intacto.

CU-05: Consultar pedidos

  • Actor: usuario registrado y verificado.
  • Precondición: sesión iniciada.
  • Flujo principal:
    1. El usuario accede a sus pedidos.
    2. El sistema lista sus pedidos ordenados por fecha.
    3. El usuario abre un pedido.
    4. El sistema muestra productos, cantidades, precios, estado y factura.
  • Restricción: un usuario no puede ver pedidos de otro usuario.

CU-06: Administrar productos

  • Actor: administrador.
  • Precondición: sesión iniciada con rol admin.
  • Flujo principal:
    1. El administrador accede al panel.
    2. Lista productos con filtros.
    3. Crea productos indicando nombre, descripción, precio, stock, categoría/perfil, destacado y descuento opcional.
    4. Edita productos existentes.
    5. Elimina productos que no aparezcan en pedidos.

CU-07: Administrar pedidos

  • Actor: administrador.
  • Precondición: sesión iniciada con rol admin.
  • Flujo principal:
    1. El administrador accede al listado de pedidos.
    2. Filtra por estado.
    3. Abre el detalle de un pedido.
    4. Actualiza el estado entre pendiente, procesando, enviado, entregado y cancelado.

CU-08: Recuperar contraseña

  • Actor: usuario registrado.
  • Precondición: el usuario no recuerda su contraseña.
  • Flujo principal:
    1. El usuario solicita recuperación desde el formulario.
    2. Fortify envía un correo con enlace de restablecimiento.
    3. El usuario define una nueva contraseña.
    4. Puede volver a iniciar sesión.

CU-09: Verificar correo electrónico

  • Actor: usuario recién registrado.
  • Precondición: el usuario ha creado una cuenta y tiene pendiente verificar su correo.
  • Flujo principal:
    1. El sistema envía un correo de verificación tras el registro.
    2. El usuario abre el correo y accede al enlace de verificación.
    3. Fortify valida la firma del enlace.
    4. El sistema marca el correo como verificado.
    5. El usuario accede a las funcionalidades protegidas, como carrito, checkout, pedidos y onboarding.
  • Flujo alternativo: si el enlace ha caducado, el usuario puede solicitar un nuevo correo de verificación.

CU-10: Cerrar sesión

  • Actor: usuario registrado con sesión activa.
  • Precondición: el usuario ha iniciado sesión.
  • Flujo principal:
    1. El usuario abre el menú de su cuenta.
    2. Pulsa la opción de cerrar sesión.
    3. El sistema invalida la sesión activa.
    4. El usuario vuelve a navegar como visitante.

CU-11: Completar onboarding

  • Actor: usuario registrado y verificado.
  • Precondición: el usuario accede tras verificar su correo.
  • Flujo principal:
    1. El usuario entra en la pantalla de configuración inicial.
    2. Selecciona el idioma de preferencia.
    3. Revisa las opciones de dirección, intereses y tipo de uso propuestas por el asistente.
    4. Completa el asistente.
    5. El sistema guarda el idioma seleccionado y redirige al inicio de la tienda.

CU-12: Consultar dashboard de administración

  • Actor: administrador.
  • Precondición: sesión iniciada con rol admin.
  • Flujo principal:
    1. El administrador accede a /admin/dashboard.
    2. El sistema muestra indicadores generales de productos, stock bajo, pedidos totales y pedidos en curso.
    3. El administrador consulta los pedidos recientes.
    4. El administrador consulta los productos con menor stock.
    5. Desde el panel puede ir a productos, pedidos, categorías o descuentos.

CU-13: Administrar categorías

  • Actor: administrador.
  • Precondición: sesión iniciada con rol admin.
  • Flujo principal:
    1. El administrador accede a la sección de categorías.
    2. El sistema muestra el listado de categorías existentes.
    3. El administrador crea una categoría indicando nombre y slug.
    4. El administrador edita los datos de una categoría.
    5. El administrador elimina categorías que no estén asociadas a productos.
    6. Las categorías quedan disponibles en los formularios y filtros de productos.

CU-14: Administrar descuentos

  • Actor: administrador.
  • Precondición: sesión iniciada con rol admin.
  • Flujo principal:
    1. El administrador accede a la sección de descuentos.
    2. El sistema muestra el listado de descuentos y el número de productos asociados.
    3. El administrador crea un descuento indicando código, tipo, valor y fecha de fin.
    4. El administrador edita descuentos existentes.
    5. El administrador elimina descuentos cuando ya no se necesiten.

CU-15: Asignar descuento a producto

  • Actor: administrador.
  • Precondición: existen productos y descuentos activos.
  • Flujo principal:
    1. El administrador entra en el formulario de creación o edición de producto.
    2. El sistema carga los descuentos activos disponibles.
    3. El administrador selecciona un descuento opcional para el producto.
    4. Al guardar, el sistema sincroniza la relación entre producto y descuento.
    5. El producto queda asociado al descuento elegido.

CU-16: Gestionar perfil e idioma

  • Actor: usuario registrado y verificado.
  • Precondición: sesión iniciada.
  • Flujo principal:
    1. El usuario accede a su perfil.
    2. Edita su nombre e idioma preferido.
    3. Guarda los cambios.
    4. El sistema actualiza el perfil y aplica el idioma seleccionado.

CU-17: Gestionar direcciones de envío

  • Actor: usuario registrado y verificado.
  • Precondición: sesión iniciada.
  • Flujo principal:
    1. El usuario abre la sección de direcciones en su perfil.
    2. Añade una nueva dirección con calle, número, ciudad y código postal.
    3. Edita o elimina direcciones existentes.
    4. El sistema guarda los cambios y muestra confirmación.

CU-18: Cambiar contraseña desde área segura

  • Actor: usuario registrado y verificado.
  • Precondición: sesión iniciada y confirmación de contraseña actual.
  • Flujo principal:
    1. El usuario accede a la pantalla de cambio de contraseña.
    2. Introduce su contraseña actual y la nueva contraseña.
    3. El sistema valida y actualiza el hash.
    4. El usuario mantiene la sesión activa con la nueva credencial.

CU-19: Gestionar favoritos

  • Actor: usuario registrado y verificado.
  • Precondición: sesión iniciada.
  • Flujo principal:
    1. El usuario marca o desmarca un producto desde el catálogo o el detalle.
    2. El sistema actualiza la lista de favoritos.
    3. El usuario consulta su listado de favoritos desde el perfil.
    4. Desde la lista puede eliminar favoritos o añadir productos al carrito.

CU-20: Consultar productos más favoritos

  • Actor: administrador.
  • Precondición: sesión iniciada con rol admin.
  • Flujo principal:
    1. El administrador accede al dashboard.
    2. El sistema muestra el ranking de productos más marcados como favoritos.
    3. El administrador puede acceder al producto para su gestión.

8. Estructura del Código

La aplicación Laravel se encuentra en la carpeta NexusGear/.

8.1 Controladores Principales

  • app/Http/Controllers/ProductController.php: catálogo público, búsqueda, filtro y detalle de producto.
  • app/Http/Controllers/CartController.php: alta, actualización, eliminación y vaciado del carrito.
  • app/Http/Controllers/CheckoutController.php: vista de checkout.
  • app/Http/Controllers/OrderController.php: checkout, historial y detalle de pedidos del usuario.
  • app/Http/Controllers/FavoriteController.php: alta/baja y listado de favoritos.
  • app/Http/Controllers/ProfileController.php: vista y edición de perfil, idioma y contraseña.
  • app/Http/Controllers/DireccionController.php: CRUD de direcciones de envío.
  • app/Http/Controllers/Admin/ProductController.php: CRUD de productos para administración.
  • app/Http/Controllers/Admin/OrderController.php: gestión de pedidos en administración.
  • app/Http/Controllers/Admin/CategoriaController.php: CRUD de categorías.
  • app/Http/Controllers/Admin/DiscountController.php: CRUD de descuentos.
  • app/Http/Controllers/OnboardingController.php: selección inicial de idioma y preferencias tras verificar correo.

8.2 Modelos

  • User: autenticación, roles, carrito, pedidos, direcciones y favoritos.
  • Producto: catálogo, categorías N:M, descuentos, favoritos, carrito y líneas de pedido.
  • Categoria: categorías del catálogo con relación N:M.
  • ProductoCategoria: tabla pivote de categorías de producto.
  • Carrito e ItemCarrito: carrito y líneas.
  • Pedido y LineaPedido: pedidos y detalle de compra.
  • Factura: factura asociada a pedido.
  • Rol y RolUsuario: roles y tabla pivote.
  • Direccion: direcciones de envío previstas para el perfil.
  • Favorito: tabla pivote de favoritos.
  • Descuento y DescuentoProducto: descuentos y asignación a productos.

8.3 Vistas

  • resources/views/home.blade.php: página principal.
  • resources/views/products/*.blade.php: catálogo y detalle.
  • resources/views/cart/index.blade.php: carrito.
  • resources/views/orders/*.blade.php: pedidos del usuario.
  • resources/views/admin/*.blade.php: panel de administración.
  • resources/views/auth/*.blade.php: vistas de Fortify.
  • resources/views/auth/profile/*.blade.php: perfil, edición y cambio de contraseña.
  • resources/views/favorites/index.blade.php: listado de favoritos.
  • resources/views/emails/orders/confirmation.blade.php: correo de confirmación de pedido.

8.4 Middleware

  • CheckAdmin: controla el acceso al panel de administración.
  • SetLocale: aplica el idioma del usuario cuando está disponible.

9. Rutas del Sistema

9.1 Rutas Públicas

Método URI Descripción
GET / Página principal
GET /productos Catálogo público
GET /productos/{producto} Detalle de producto
GET/POST /login Inicio de sesión
GET/POST /register Registro
GET/POST /forgot-password Recuperación de contraseña
GET/POST /reset-password Restablecimiento de contraseña
GET /email/verify Aviso de verificación de correo

9.2 Rutas de Usuario Autenticado y Verificado

Método URI Descripción
GET /home Redirección según rol
GET /carrito Ver carrito
POST /carrito/productos/{producto} Añadir producto
PATCH /carrito/productos/{producto} Actualizar cantidad
DELETE /carrito/productos/{producto} Eliminar línea
DELETE /carrito Vaciar carrito
GET /checkout Vista de checkout
POST /checkout Finalizar compra
GET /pedidos Historial de pedidos
GET /pedidos/{pedido} Detalle de pedido
GET /favoritos Listado de favoritos
POST /favoritos/productos/{producto} Añadir favorito
DELETE /favoritos/productos/{producto} Eliminar favorito
GET/POST /onboarding Configuración inicial
GET /profile Perfil del usuario
GET /profile/edit Editar perfil
PATCH /profile Actualizar perfil
POST /direcciones Crear dirección
PUT /direcciones/{direccion} Editar dirección
DELETE /direcciones/{direccion} Eliminar dirección
GET /profile/password Formulario de cambio de contraseña
PUT /profile/password Actualizar contraseña

9.3 Rutas de Administración

Todas usan middleware auth, verified y admin.

Método URI Descripción
GET /admin/dashboard Dashboard
RESOURCE /admin/products CRUD de productos
RESOURCE /admin/categorias CRUD de categorías
RESOURCE /admin/discounts CRUD de descuentos
GET /admin/orders Listado de pedidos
GET /admin/orders/{pedido} Detalle de pedido
PATCH /admin/orders/{pedido} Actualizar estado

10. Seeders y Datos Iniciales

El entorno se puede poblar con:

php artisan migrate:fresh --seed

Seeders ejecutados:

  1. RolSeeder: crea los roles admin y customer.
  2. CategoriaSeeder: crea Office & Focus (office) y Gamer Pro (gamer).
  3. ProductSeeder: crea productos iniciales.
  4. ProductoCategoriaSeeder: asigna categorías iniciales a productos.
  5. UserSeeder: crea usuarios iniciales.

Credenciales iniciales:

Rol Email Contraseña
Admin admin@nexusgear.com admin123
Cliente juan@example.com user123

Productos iniciales:

  • Nexus Vertical Pro
  • Aqua Keys 60
  • Focus Pad Gel
  • Split Core Ergo
  • Pulse Mouse X
  • Lift Dock Stand
  • Stealth Wrist Rest
  • Tactile Flow TKL

11. Configuración e Instalación

Requisitos:

  • PHP ^8.2
  • Composer
  • Node.js y npm
  • MySQL o SQLite

Instalación básica:

cd NexusGear
composer install
npm install
cp .env.example .env
php artisan key:generate
php artisan migrate:fresh --seed
npm run build
php artisan serve

Durante desarrollo:

npm run dev

12. Configuración SMTP y Correo

La aplicación usa Laravel Mail para:

  • Verificación de correo.
  • Recuperación de contraseña.
  • Confirmación de pedido mediante OrderConfirmationMail.

Variables principales en .env:

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=nexusgear.info@gmail.com
MAIL_PASSWORD=app_password_de_gmail
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=nexusgear.info@gmail.com
MAIL_FROM_NAME="NexusGear Support"

El correo de pedido se envía después de confirmar la transacción del checkout y usa la plantilla resources/views/emails/orders/confirmation.blade.php.

13. Alcance de la Entrega 1.0

Bloque Estado Observaciones
Catálogo público Completado Búsqueda, filtro por perfil/categoría principal, ordenación y detalle
Autenticación Fortify Completado Registro, login, logout, verificación y recuperación
Carrito Completado Añadir, modificar, eliminar, vaciar y validar stock
Checkout Completado Transacción, factura, stock y correo
Pedidos de usuario Completado Historial y detalle protegido
Admin productos Completado CRUD con categoría principal y descuento opcional
Admin pedidos Completado Listado, detalle y cambio de estado
Admin categorías Implementado CRUD disponible y categorías integradas en productos
Admin descuentos Implementado CRUD y asignación opcional a productos
Internacionalización base Implementado Middleware de idioma y ficheros de traducción iniciales
Onboarding Implementado Selección inicial de idioma y preferencias
Imágenes de producto Implementado Campo imagen y recurso por defecto en almacenamiento público

13.1 Alcance de la Entrega 2.0

Bloque Estado Observaciones
Categorías N:M Completado Asociación múltiple con producto_categoria y filtro por categorías
CRUD de categorías Completado Gestión completa en administración
Perfil de usuario Completado Edición de nombre, idioma y acceso a direcciones
Direcciones (CRUD) Completado Alta, edición y eliminación desde perfil
Cambio de contraseña Completado Área segura con confirmación de contraseña
Internacionalización Completado Interfaz en ES/EN con soporte adicional PT/JA
Favoritos Completado Alta/baja y listado personal con acciones rápidas
Ranking de favoritos Completado Top 5 en dashboard de administración

About

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors