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:
@@ -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))
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user