Ir al contenido

Arquitectura

IZ-DomainReport no reemplaza AccessPlatform. Lo extiende con un módulo independiente para dominios:

AccessPlatform
├── Identity
└── DomainRegistry

La autenticación, usuarios, roles, permisos y 2FA pertenecen al módulo Identity. La gestión de dominios vive en AccessPlatform.DomainRegistry.

src/
AccessPlatform.DomainRegistry.Domain/
AccessPlatform.DomainRegistry.Application/
AccessPlatform.DomainRegistry.Infrastructure/
AccessPlatform.Web/
ProyectoResponsabilidad
DomainRegistry.DomainEntidades DomainRecord, DomainImportJob y permisos del módulo.
DomainRegistry.ApplicationDTOs, filtros, respuestas, paginación y contrato IDomainRegistryService.
DomainRegistry.InfrastructureEF Core, SQL Server, sincronización, importación CSV, exportación Excel y worker.
AccessPlatform.WebRazor Pages /Domains/Index y /Domains/Operations.

La base propia de la aplicación es DomainManagerDb y separa tablas en esquemas:

DomainManagerDb
├── identity.*
└── domain.*

La base fuente operacional es DomManagerDb. La interfaz no consulta directamente esa base; primero sincroniza datos hacia DomainManagerDb.domain.DomainRecords.

DomManagerDb
↓ stored procedure
Sincronización
DomainManagerDb.domain.DomainRecords
Dashboard / Consulta / Exportación
EntidadTablaUso
DomainRecorddomain.DomainRecordsCopia local consultable de dominios.
DomainImportJobdomain.DomainImportJobsHistorial de sincronizaciones e importaciones.

Campos relevantes de DomainRecord:

CampoUso
DomainName / DomainPunycodeNombre visible y nombre punycode.
TldTLD del dominio.
RegistrarRegistrador reportado por la fuente actual.
AccountCuenta asociada.
RegisteredAtUtcFecha de registro.
ExpiresAtUtcFecha de expiración.
DaysToExpireDías calculados hasta vencimiento.
Ns1, Ns2DNS principales disponibles hoy.
DnsProviderProveedor DNS inferido o reportado.
IsActiveMarca de vigencia en la copia local.
LastLoadTypeOrigen de carga: SQL o CSV.
  1. Usuario autenticado accede a /Domains/Index.
  2. Se valida permiso DomainRegistry.Domains.View.
  3. Se aplican filtros de búsqueda, TLD, registrar, estado y fechas.
  4. La consulta se ejecuta sobre DomainManagerDb.domain.DomainRecords.
  5. El estado visual se calcula desde DaysToExpire.
  6. Se renderiza tabla paginada y ordenable.
  1. Usuario accede a /Domains/Operations.
  2. Se valida permiso DomainRegistry.Domains.Sync.
  3. El servicio ejecuta dbo.usp_DomainRegistry_GetDomainsForSync en DomManagerDb.
  4. Se validan duplicados y dominios sin nombre.
  5. Se insertan nuevos dominios.
  6. Se actualizan dominios existentes.
  7. Se inactivan dominios ausentes en la sincronización SQL.
  8. Se registra job en domain.DomainImportJobs.
  1. Usuario carga archivo .csv en /Domains/Operations.
  2. Se valida permiso DomainRegistry.Domains.Import.
  3. Se valida extensión y tamaño máximo.
  4. Se detecta delimitador: ;, , o tab.
  5. Se interpreta CSV con encabezado o sin encabezado.
  6. Se insertan o actualizan registros.
  7. No se desactivan ausentes por CSV.
  8. Se registra job en domain.DomainImportJobs.
DecisiónMotivo
Copia local en DomainManagerDbEvitar carga directa sobre la base operacional.
Stored procedure como contratoAísla el origen DomManagerDb de la aplicación web.
Estados calculadosEvita persistir estados derivados de fechas.
Permisos por claimsReutiliza el modelo de AccessPlatform.
Histórico de jobsPermite trazabilidad de cargas e importaciones.
Exportación con límiteEvita sobrecarga por archivos Excel masivos.

El sistema actual almacena Ns1, Ns2 y DnsProvider, pero no implementa todavía consulta directa al registry/TLD ni histórico lateral de NS, DS o DNSSEC.