using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using LingAdmin.API.Data; using LingAdmin.API.Models; using LingAdmin.API.DTOs; using Dapr.Client; namespace LingAdmin.API.Controllers; [ApiController] [Route("api/[controller]")] public class AuditController : ControllerBase { private readonly AppDbContext _context; private readonly DaprClient _daprClient; private readonly ILogger _logger; public AuditController(AppDbContext context, DaprClient daprClient, ILogger logger) { _context = context; _daprClient = daprClient; _logger = logger; } [HttpGet] public async Task>>> GetAuditLogs() { try { var logs = await _context.AuditLogs .OrderByDescending(a => a.Timestamp) .ToListAsync(); return Ok(ApiResponse>.Success(logs)); } catch (Exception ex) { _logger.LogError(ex, "Error retrieving audit logs"); return StatusCode(500, ApiResponse>.Error("Internal server error", 500)); } } [HttpGet("{id}")] public async Task>> GetAuditLog(int id) { try { var log = await _context.AuditLogs.FindAsync(id); if (log == null) { return NotFound(ApiResponse.Error("Audit log not found", 404)); } return Ok(ApiResponse.Success(log)); } catch (Exception ex) { _logger.LogError(ex, "Error retrieving audit log {Id}", id); return StatusCode(500, ApiResponse.Error("Internal server error", 500)); } } [HttpPost] public async Task>> CreateAuditLog(AuditLog log) { try { if (log.Timestamp == default) { log.Timestamp = DateTime.UtcNow; } _context.AuditLogs.Add(log); await _context.SaveChangesAsync(); return CreatedAtAction(nameof(GetAuditLog), new { id = log.Id }, ApiResponse.Success(log)); } catch (Exception ex) { _logger.LogError(ex, "Error creating audit log"); return StatusCode(500, ApiResponse.Error("Internal server error", 500)); } } }