
# Integración de la Biblioteca AuditLogs

## Configuración y Uso de AuditLogs

Este documento es una guia para la utilización de la biblioteca `AuditLogs` en aplicaciones .NET que requieren funcionalidades de auditoría mediante MongoDB.

### Configuración Inicial

#### 1. Configuración en `appsettings.json`

Agregue la siguiente configuración para la conexión a la base de MongoDB que usara la biblioteca, esto se pone en el archivo `appsettings.json`:

```json
"DatabaseConfigurationAudit": {
    "ConnectionString": "mongodb://usuario:contraseña@host:puerto/?authSource=base_de_datos_autenticación",
    "DatabaseName": "AuditMeddisPlanUciPanel"
}
```

#### 2. Instalación de la Biblioteca

Instale la biblioteca `AuditLogs` a través de NuGet con el siguiente comando:

```bash
dotnet add package AuditLogs
```
previamente se tuvo que haber configurado esta fuente https://smacs-nuget.epigramdev.com/v3/index.json

#### 3. Configuración en `Program.cs`

Para configurar los servicios de la biblioteca en el archivo Program.cs, se debe incluir el espacio de nombres audit_logs.Extensions y ejecutar el método AddAuditServices:

```csharp
using audit_logs.Extensions;

var builder = WebApplication.CreateBuilder(args);

// Configuración de servicios de auditoría
builder.Services.AddAuditServices(builder.Configuration);
builder.Services.AddHttpContextAccessor();
```

### Uso en Servicios

Implemente `IAuditService` en los servicios donde se requiera registrar eventos de auditoría.
El servicio de admisiones, por ejemplo, puede configurarse de la siguiente manera, donde se inyecta IAuditService y IHttpContextAccessor para registrar eventos de auditoría relacionados con las admisiones de pacientes:

#### Ejemplo en el Servicio de Admisiones

```csharp
public class AdmissionService : IAdmissionService
{
    private readonly IAuditService _auditService;
    private readonly IHttpContextAccessor _httpContextAccessor;
    // Inyección de otros servicios necesarios...

    public AdmissionService(IAuditService auditService, IHttpContextAccessor httpContextAccessor, /* otros parámetros */)
    {
        _auditService = auditService;
        _httpContextAccessor = httpContextAccessor;
        // Inicialización de otros servicios...
    }

    public async Task AdmitPatient(Patient patient)
    {
        var httpContext = _httpContextAccessor.HttpContext;
        var insertedAdmission = /* lógica para admitir al paciente */;
        
        // Registro de evento de auditoría
        await _auditService.CreateAuditLogAsync(httpContext.User, null, insertedAdmission);
    }
}

```

### Resumen

Los pasos anteriores permiten la integración de la biblioteca `AuditLogs` para la captura y registro de eventos de auditoría de manera eficiente. Es recomendable realizar pruebas exhaustivas en el entorno de desarrollo antes de desplegar en producción para asegurar la correcta configuración y funcionamiento.
