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:
postgresqlJDBC driver (.jar)
-
Usuarios
- Registrar y listar usuarios.
- Roles mínimos: reporter (crea tickets) y assignee (a quien se asigna un ticket).
-
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).
-
Catálogos
- Estados: Abierto, En Proceso, Resuelto, Cerrado.
- Categorías: (p. ej. Infraestructura, Aplicación, Cuenta).
-
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).
/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)
-
Interfaces (ej.):
TicketDaocon 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.
-
Crear ticket
- Como reporter, quiero registrar un ticket con título, descripción y categoría para iniciar su atención.
-
Asignar ticket
- Como operador, quiero asignar un ticket a un usuario assignee para que quede responsable.
-
Cambiar estado
- Como operador, quiero cambiar el estado del ticket para reflejar su progreso.
-
Buscar por estado y categoría
- Como operador, quiero ver solo los tickets que coincidan con un estado y una categoría.
-
Listar por asignado (detalle)
- Como operador, quiero listar los tickets de un assignee con el reporter, categoría y estado visibles.
-
Top categorías
- Como coordinador, quiero ver las 3 categorías con más tickets para priorizar recursos.
-
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.
-
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).
- Inicializa Git y Git Flow (
main,develop,feature/*). - Registra work items (historias/tareas) en Azure Boards.
Menú textual con opciones:
- Crear ticket
- Asignar ticket
- Cambiar estado
- Buscar por estado + categoría
- Listar por asignado (detalle con reporter/categoría/estado)
- Top 3 categorías
- Salir
La view solo muestra/lee, no implementa reglas. Las reglas viven en service; la data en dao.