feat(notifications): support dismissing notifications in PostIt

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Paul Schneider 2026-10-18 12:49:52 +01:00
commit cb8cf9406d
Signed by: notazof
GPG key ID: AD4B9B545FBD7D12
12 changed files with 389 additions and 181 deletions

View file

@ -95,6 +95,36 @@ namespace Yavsc.Controllers
}
return View(toShow);
}
/// <summary>
/// Web-site dismissal of a notification: persisted for signed-in users,
/// kept in the session for anonymous visitors.
/// API clients use <c>POST api/v1/dismiss/click/{id}</c> on Yavsc.Api.
/// </summary>
[HttpPost]
public async Task<IActionResult> DismissNotification(long id)
{
if (!await _dbContext.Notification.AnyAsync(n => n.Id == id))
return NotFound();
var uid = User.GetUserId();
if (uid != null)
{
if (!await _dbContext.DismissClicked.AnyAsync(d => d.UserId == uid && d.NotificationId == id))
{
_dbContext.DismissClicked.Add(new Yavsc.Models.Messaging.DismissClicked { UserId = uid, NotificationId = id });
await _dbContext.SaveChangesAsync(uid);
}
return NoContent();
}
await HttpContext.Session.LoadAsync();
var clicked = HttpContext.Session.GetString("clicked");
HttpContext.Session.SetString("clicked", clicked == null ? id.ToString() : $"{clicked}:{id}");
await HttpContext.Session.CommitAsync();
return NoContent();
}
public async Task<IActionResult> About()
{
return View("About");