Skip to content

Instantly share code, notes, and snippets.

@AntonyMRuiz
Created October 2, 2025 18:05
Show Gist options
  • Save AntonyMRuiz/6f365523b6de566f29079736c15e535a to your computer and use it in GitHub Desktop.
Save AntonyMRuiz/6f365523b6de566f29079736c15e535a to your computer and use it in GitHub Desktop.

Proyecto: Sistema de Soporte (Tickets)

Objetivo

Desarrollar una aplicación Java (consola o vista mínima) para gestionar tickets de soporte: creación, asignación, cambio de estado, filtrado y reportes simples. El núcleo debe usar clases abstractas / interfaces, ArrayList y HashMap donde aplique, con acceso a datos mediante JDBC (MySQL o PostgreSQL) a través de una capa DAO. Las consultas clave deben incluir JOINs.

Recordatorio: deben descargar el driver JDBC del motor elegido.

  • MySQL: mysql-connector-j (.jar)
  • PostgreSQL: postgresql JDBC driver (.jar)

Alcance funcional

  1. Usuarios

    • Registrar y listar usuarios.
    • Roles mínimos: reporter (crea tickets) y assignee (a quien se asigna un ticket).
  2. Tickets

    • Crear ticket con: título, descripción, reporter (usuario), categoría, estado inicial (Abierto).
    • Asignar ticket a un assignee.
    • Cambiar estado: Abierto → En Proceso → Resuelto (o Cerrado).
    • Agregar comentario (historial simple).
  3. Catálogos

    • Estados: Abierto, En Proceso, Resuelto, Cerrado.
    • Categorías: (p. ej. Infraestructura, Aplicación, Cuenta).
  4. Búsquedas y reportes (JOINs obligatorios)

    • Buscar tickets por estado y categoría (filtrado combinado).
    • Listar tickets por asignado (assignee) con reporter y categoría en el resultado.
    • Top 3 categorías con más tickets (agregación).

Estructura del proyecto (carpetas)

/src
  /app        -> Main (arranque; crea controladores/servicios)
  /controller -> Orquestación de casos de uso (usa servicios)
  /view       -> Vista consola/menús (entrada/salida)
  /domain     -> Entidades: Usuario, Ticket, Categoria, Estado, Comentario
  /dao        -> Interfaces y clases JDBC (UsuarioDao, TicketDao, etc.)
  /service    -> Reglas de negocio (TicketService, UsuarioService)
  /config     -> DbConfig (URL, usuario, contraseña, carga del driver)
  /util       -> Helpers simples (fechas, formateos)

Capa DAO (acceso a datos con JDBC)

  • Interfaces (ej.): TicketDao con métodos mínimos:

    • crear(Ticket t), actualizar(Ticket t),
    • buscarPorId(int id),
    • listarPorAssignee(int idAssignee) (JOIN completo),
    • listarPorEstadoYCategoria(String estado, String categoria) (JOIN + filtros),
    • topCategorias(int limit) (agregación).
  • Implementaciones JDBC con PreparedStatement, ResultSet, try-with-resources.

Historias de usuario

  1. Crear ticket

    • Como reporter, quiero registrar un ticket con título, descripción y categoría para iniciar su atención.
  2. Asignar ticket

    • Como operador, quiero asignar un ticket a un usuario assignee para que quede responsable.
  3. Cambiar estado

    • Como operador, quiero cambiar el estado del ticket para reflejar su progreso.
  4. Buscar por estado y categoría

    • Como operador, quiero ver solo los tickets que coincidan con un estado y una categoría.
  5. Listar por asignado (detalle)

    • Como operador, quiero listar los tickets de un assignee con el reporter, categoría y estado visibles.
  6. Top categorías

    • Como coordinador, quiero ver las 3 categorías con más tickets para priorizar recursos.

Criterios de aceptación

  • Estructura por capas (controller/view/domain/dao/config/service)

    • Dado un proyecto organizado en estas carpetas
    • Cuando ejecuto el flujo “Listar por asignado”
    • Entonces el controlador invoca el servicio, el servicio usa el DAO y la vista muestra los datos combinados.
  • Conexión JDBC y driver

    • Dado que descargué el driver del motor elegido y configuré URL/credenciales
    • Cuando ejecuto una consulta de prueba
    • Entonces la aplicación obtiene resultados sin error de conexión.
  • JOINs en listados y filtros

    • Dado datos mínimos cargados en la base
    • Cuando consulto “Tickets por asignado” y “Filtrado por estado + categoría”
    • Entonces veo columnas cruzadas (reporter, assignee, categoría, estado) y el filtro se respeta.
  • Creación y actualización de tickets

    • Dado un ticket válido
    • Cuando lo creo y luego cambio su estado o asignado
    • Entonces los cambios se reflejan en consultas posteriores.
  • Reporte de Top categorías

    • Dado múltiples tickets en diversas categorías
    • Cuando ejecuto el reporte
    • Entonces obtengo las 3 categorías con mayor cantidad, ordenadas de mayor a menor.

UML y documentación requerida

  • Diagrama de caso de uso: crear, asignar, cambiar estado, buscar por filtros, ver top categorías.

  • Diagrama de clases: entidades del domain, servicios y DAOs (dependencias claras).

  • Diagrama de base de datos (ER): tablas anteriores y relaciones (1–N).

  • README:

    • Requisitos (Java, MySQL/PostgreSQL).
    • Descarga del driver JDBC correspondiente.
    • Configuración (URL, usuario, contraseña, cómo añadir el .jar).
    • Estructura de carpetas.
    • Consultas JOIN resumidas (descripción + SQL corto).
    • Ejemplo de ejecución (capturas de consola opcional).

Git, Git Flow y trazabilidad en Azure

  • Inicializa Git y Git Flow (main, develop, feature/*).
  • Registra work items (historias/tareas) en Azure Boards.

Vista mínima (sugerida en consola)

Menú textual con opciones:

  1. Crear ticket
  2. Asignar ticket
  3. Cambiar estado
  4. Buscar por estado + categoría
  5. Listar por asignado (detalle con reporter/categoría/estado)
  6. Top 3 categorías
  7. Salir

La view solo muestra/lee, no implementa reglas. Las reglas viven en service; la data en dao.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment