The IRepositorioDT interface and RepositorioDT implementation provide data access operations for managing technical directors in the tournament system. Each technical director can be associated with multiple teams.
using Torneo.App.Dominio;namespace Torneo.App.Persistencia{ public interface IRepositorioDT { public DirectorTecnico AddDT(DirectorTecnico directorTecnico); public IEnumerable<DirectorTecnico> GetAllDTs(); public DirectorTecnico GetDT(int Id); public DirectorTecnico UpdateDT(DirectorTecnico directorTecnico); public DirectorTecnico DeleteDT(int idDT); public bool validateDuplicates(DirectorTecnico dtIngresado); }}
using Microsoft.EntityFrameworkCore;using Torneo.App.Dominio;namespace Torneo.App.Persistencia{ public class RepositorioDT : IRepositorioDT { private DataContext _dataContext = new DataContext(); // Implementation methods... }}
Throws exception with message “DT not found” if the ID doesn’t exist
Implementation (Lines 34-49)
public DirectorTecnico UpdateDT(DirectorTecnico dt){ var dtEncontrado = _dataContext.DirectoresTecnicos.Find(dt.Id); // Si el director tecnico encontrado es diferente de nulo if (dtEncontrado != null) { dtEncontrado.Nombre = dt.Nombre; dtEncontrado.Documento = dt.Documento; dtEncontrado.Telefono = dt.Telefono; _dataContext.SaveChanges(); } else { Console.WriteLine("No se encontró el DT"); } return dtEncontrado ?? throw new Exception("DT not found");}
Throws exception with message “DT not found” if the ID doesn’t exist
Implementation (Lines 50-63)
public DirectorTecnico DeleteDT(int idDT){ var dtEncontrado = GetDT(idDT); if (dtEncontrado != null) { _dataContext.DirectoresTecnicos.Remove(dtEncontrado); _dataContext.SaveChanges(); } else { Console.WriteLine("No se encontró el DT"); } return dtEncontrado ?? throw new Exception("DT not found");}
Deleting a technical director may fail if they are referenced by teams due to foreign key constraints configured with DeleteBehavior.Restrict.
Usage Example:
try{ var dtEliminado = repositorioDT.DeleteDT(5); Console.WriteLine($"DT eliminado: {dtEliminado.Nombre}");}catch (Exception ex){ Console.WriteLine($"Error al eliminar: {ex.Message}");}
true if a duplicate document exists (different DT with same document), false otherwise
Implementation (Lines 65-102)
public bool validateDuplicates(DirectorTecnico dtIngresado){ try { IEnumerable<DirectorTecnico> allDT = GetAllDTs(); bool duplicado = false; foreach(DirectorTecnico directoresTecnicos in allDT) { // Validacion si el documento ingresado ya existe en BD if(directoresTecnicos.Documento == dtIngresado.Documento.Trim()) { Console.WriteLine($"id dt lista {directoresTecnicos.Id}"); Console.WriteLine($"id dt ingresado {dtIngresado.Id}"); // Validacion para no marcarlo como duplicado si se edita otro campo del DT if(directoresTecnicos.Id == dtIngresado.Id) { duplicado = false; Console.WriteLine($"id igual no duplicado {directoresTecnicos.Id}"); } else { duplicado = true; Console.WriteLine($"id diferente duplicado {directoresTecnicos.Id}"); break; } } } return duplicado; } catch(Exception e) { Console.WriteLine("Error Validacion duplicado " + e.Message); return false; }}
Validation Logic:
Compares Documento field (trimmed) with existing records
If same ID, allows update (not considered duplicate)
If different ID with same document, marks as duplicate
Returns false on any exception
Usage Example:
var nuevoDT = new DirectorTecnico{ Nombre = "Juan López", Documento = "12345678", Telefono = "3001111111"};if (repositorioDT.validateDuplicates(nuevoDT)){ Console.WriteLine("Error: Ya existe un DT con este documento");}else{ repositorioDT.AddDT(nuevoDT); Console.WriteLine("DT creado exitosamente");}