Feat: Papelera de Avisos

- Se añade la sección de Papelera de Avisos para los avisos eliminados que serán removidos de los registros a los 60 días del cambio de estado. Es esta sección se permite restaurar un aviso eliminado al estado "Borrador".
This commit is contained in:
2026-02-26 20:17:52 -03:00
parent df777400ab
commit 0802dae400
5 changed files with 189 additions and 17 deletions

View File

@@ -43,6 +43,12 @@ public class AdminController : ControllerBase
.AsNoTracking() // Optimización de lectura
.AsQueryable();
// Por defecto, ocultar eliminados a menos que se pida explícitamente
if (statusId != (int)AdStatusEnum.Deleted)
{
query = query.Where(a => a.StatusID != (int)AdStatusEnum.Deleted);
}
// Filtro por Texto (Marca, Modelo, Email Usuario, Nombre Usuario)
if (!string.IsNullOrEmpty(q))
{

View File

@@ -119,7 +119,7 @@ public class AdsV2Controller : ControllerBase
}
else
{
query = query.Where(a => a.UserID == userId.Value);
query = query.Where(a => a.UserID == userId.Value && a.StatusID != (int)AdStatusEnum.Deleted);
}
// --- LÓGICA DE BÚSQUEDA POR PALABRAS ---
@@ -763,6 +763,7 @@ public class AdsV2Controller : ControllerBase
var ads = await _context.Favorites
.Where(f => f.UserID == userId)
.Join(_context.Ads, f => f.AdID, a => a.AdID, (f, a) => a)
.Where(a => a.StatusID != (int)AdStatusEnum.Deleted)
.Include(a => a.Photos)
.Select(a => new
{
@@ -824,6 +825,11 @@ public class AdsV2Controller : ControllerBase
int oldStatus = ad.StatusID;
ad.StatusID = newStatus;
if (newStatus == (int)AdStatusEnum.Deleted)
{
ad.DeletedAt = DateTime.UtcNow;
}
// 📝 AUDITORÍA
var statusBrandName = (await _context.Brands.FindAsync(ad.BrandID))?.Name ?? "";
_context.AuditLogs.Add(new AuditLog

View File

@@ -74,8 +74,12 @@ public class ChatController : ControllerBase
public async Task<IActionResult> GetInbox(int userId)
{
// Obtener todas las conversaciones donde el usuario es remitente o destinatario
// Pero filtramos los que pertenecen a avisos eliminados (StatusID != 9)
var messages = await _context.ChatMessages
.Where(m => m.SenderID == userId || m.ReceiverID == userId)
.Join(_context.Ads, m => m.AdID, a => a.AdID, (m, a) => new { m, a })
.Where(x => x.a.StatusID != (int)AdStatusEnum.Deleted)
.Select(x => x.m)
.OrderByDescending(m => m.SentAt)
.ToListAsync();
@@ -119,7 +123,8 @@ public class ChatController : ControllerBase
}
var count = await _context.ChatMessages
.CountAsync(m => m.ReceiverID == userId && !m.IsRead);
.Join(_context.Ads, m => m.AdID, a => a.AdID, (m, a) => new { m, a })
.CountAsync(x => x.m.ReceiverID == userId && !x.m.IsRead && x.a.StatusID != (int)AdStatusEnum.Deleted);
return Ok(new { count });
}