Arquitectura
Alcance
Sección titulada «Alcance»IZ-DomainReport no reemplaza AccessPlatform. Lo extiende con un módulo independiente para dominios:
AccessPlatform ├── Identity └── DomainRegistryLa autenticación, usuarios, roles, permisos y 2FA pertenecen al módulo Identity. La gestión de dominios vive en AccessPlatform.DomainRegistry.
Estructura de proyectos
Sección titulada «Estructura de proyectos»src/ AccessPlatform.DomainRegistry.Domain/ AccessPlatform.DomainRegistry.Application/ AccessPlatform.DomainRegistry.Infrastructure/ AccessPlatform.Web/| Proyecto | Responsabilidad |
|---|---|
DomainRegistry.Domain | Entidades DomainRecord, DomainImportJob y permisos del módulo. |
DomainRegistry.Application | DTOs, filtros, respuestas, paginación y contrato IDomainRegistryService. |
DomainRegistry.Infrastructure | EF Core, SQL Server, sincronización, importación CSV, exportación Excel y worker. |
AccessPlatform.Web | Razor Pages /Domains/Index y /Domains/Operations. |
Modelo de datos
Sección titulada «Modelo de datos»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 procedureSincronización ↓DomainManagerDb.domain.DomainRecords ↓Dashboard / Consulta / ExportaciónEntidades del módulo
Sección titulada «Entidades del módulo»| Entidad | Tabla | Uso |
|---|---|---|
DomainRecord | domain.DomainRecords | Copia local consultable de dominios. |
DomainImportJob | domain.DomainImportJobs | Historial de sincronizaciones e importaciones. |
Campos relevantes de DomainRecord:
| Campo | Uso |
|---|---|
DomainName / DomainPunycode | Nombre visible y nombre punycode. |
Tld | TLD del dominio. |
Registrar | Registrador reportado por la fuente actual. |
Account | Cuenta asociada. |
RegisteredAtUtc | Fecha de registro. |
ExpiresAtUtc | Fecha de expiración. |
DaysToExpire | Días calculados hasta vencimiento. |
Ns1, Ns2 | DNS principales disponibles hoy. |
DnsProvider | Proveedor DNS inferido o reportado. |
IsActive | Marca de vigencia en la copia local. |
LastLoadType | Origen de carga: SQL o CSV. |
Flujo de consulta
Sección titulada «Flujo de consulta»- Usuario autenticado accede a
/Domains/Index. - Se valida permiso
DomainRegistry.Domains.View. - Se aplican filtros de búsqueda, TLD, registrar, estado y fechas.
- La consulta se ejecuta sobre
DomainManagerDb.domain.DomainRecords. - El estado visual se calcula desde
DaysToExpire. - Se renderiza tabla paginada y ordenable.
Flujo de sincronización
Sección titulada «Flujo de sincronización»- Usuario accede a
/Domains/Operations. - Se valida permiso
DomainRegistry.Domains.Sync. - El servicio ejecuta
dbo.usp_DomainRegistry_GetDomainsForSyncenDomManagerDb. - Se validan duplicados y dominios sin nombre.
- Se insertan nuevos dominios.
- Se actualizan dominios existentes.
- Se inactivan dominios ausentes en la sincronización SQL.
- Se registra job en
domain.DomainImportJobs.
Flujo de importación CSV
Sección titulada «Flujo de importación CSV»- Usuario carga archivo
.csven/Domains/Operations. - Se valida permiso
DomainRegistry.Domains.Import. - Se valida extensión y tamaño máximo.
- Se detecta delimitador:
;,,o tab. - Se interpreta CSV con encabezado o sin encabezado.
- Se insertan o actualizan registros.
- No se desactivan ausentes por CSV.
- Se registra job en
domain.DomainImportJobs.
Decisiones arquitectónicas
Sección titulada «Decisiones arquitectónicas»| Decisión | Motivo |
|---|---|
Copia local en DomainManagerDb | Evitar carga directa sobre la base operacional. |
| Stored procedure como contrato | Aísla el origen DomManagerDb de la aplicación web. |
| Estados calculados | Evita persistir estados derivados de fechas. |
| Permisos por claims | Reutiliza el modelo de AccessPlatform. |
| Histórico de jobs | Permite trazabilidad de cargas e importaciones. |
| Exportación con límite | Evita sobrecarga por archivos Excel masivos. |
Límite actual
Sección titulada «Límite actual»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.