75 lines
2.1 KiB
C#
75 lines
2.1 KiB
C#
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<IActionResult> 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<IActionResult> 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." });
|
|
}
|
|
}
|