using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using MotoresArgentinosV2.Core.DTOs; using MotoresArgentinosV2.Core.Entities; using MotoresArgentinosV2.Infrastructure.Data; using Microsoft.AspNetCore.Authorization; using System.Security.Claims; namespace MotoresArgentinosV2.API.Controllers; [Authorize] [ApiController] [Route("api/[controller]")] public class ProfileController : ControllerBase { private readonly MotoresV2DbContext _context; public ProfileController(MotoresV2DbContext context) { _context = context; } [HttpGet] public async Task GetProfile() { var userId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier)?.Value ?? "0"); var user = await _context.Users .Where(u => u.UserID == userId) .Select(u => new { u.UserID, u.UserName, u.Email, u.FirstName, u.LastName, u.PhoneNumber, u.UserType, u.CreatedAt, u.IsEmailVerified }) .FirstOrDefaultAsync(); if (user == null) return NotFound(); return Ok(user); } [HttpPut] public async Task UpdateProfile([FromBody] ProfileUpdateDto dto) { var userId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier)?.Value ?? "0"); var user = await _context.Users.FindAsync(userId); if (user == null) return NotFound(); user.FirstName = dto.FirstName; user.LastName = dto.LastName; user.PhoneNumber = dto.PhoneNumber; await _context.SaveChangesAsync(); // Audit Log _context.AuditLogs.Add(new AuditLog { Action = "PROFILE_UPDATED", Entity = "User", EntityID = userId, UserID = userId, Details = "Usuario actualizó su perfil personal." }); await _context.SaveChangesAsync(); return Ok(new { message = "Perfil actualizado con éxito." }); } }