🐛 Fix presence activity controller

This commit is contained in:
2025-11-01 18:37:31 +08:00
parent 4ad63577ba
commit a9168dcdc5

View File

@@ -1,6 +1,7 @@
using DysonNetwork.Shared.Models; using DysonNetwork.Shared.Models;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace DysonNetwork.Pass.Account; namespace DysonNetwork.Pass.Account;
@@ -10,8 +11,8 @@ namespace DysonNetwork.Pass.Account;
/// </summary> /// </summary>
[ApiController] [ApiController]
[Route("/api/activities")] [Route("/api/activities")]
[Authorize] public class PresenceActivityController(AppDatabase db, AccountEventService service)
public class PresenceActivityController(AppDatabase db, AccountEventService service) : ControllerBase : ControllerBase
{ {
/// <summary> /// <summary>
/// Retrieves all active (non-expired) presence activities for the authenticated user. /// Retrieves all active (non-expired) presence activities for the authenticated user.
@@ -22,7 +23,8 @@ public class PresenceActivityController(AppDatabase db, AccountEventService serv
[ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status401Unauthorized)]
public async Task<ActionResult<List<SnPresenceActivity>>> GetActivities() public async Task<ActionResult<List<SnPresenceActivity>>> GetActivities()
{ {
if (HttpContext.Items["CurrentUser"] is not SnAccount currentUser) return Unauthorized(); if (HttpContext.Items["CurrentUser"] is not SnAccount currentUser)
return Unauthorized();
var activities = await service.GetActiveActivities(currentUser.Id); var activities = await service.GetActiveActivities(currentUser.Id);
return Ok(activities); return Ok(activities);
} }
@@ -30,14 +32,20 @@ public class PresenceActivityController(AppDatabase db, AccountEventService serv
/// <summary> /// <summary>
/// Retrieves active presence activities for any user account (admin/debugging endpoint). /// Retrieves active presence activities for any user account (admin/debugging endpoint).
/// </summary> /// </summary>
/// <param name="accountId">The account ID to fetch activities for</param>
/// <returns>List of active presence activities</returns> /// <returns>List of active presence activities</returns>
[HttpGet("{accountId:guid}")] [HttpGet("{identifier}")]
[ProducesResponseType<List<SnPresenceActivity>>(StatusCodes.Status200OK)] [ProducesResponseType<List<SnPresenceActivity>>(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)] public async Task<ActionResult<List<SnPresenceActivity>>> GetActivitiesByAccountId(
public async Task<ActionResult<List<SnPresenceActivity>>> GetActivitiesByAccountId(Guid accountId) string identifier
)
{ {
var activities = await service.GetActiveActivities(accountId); var account = Guid.TryParse(identifier, out var identifierGuid)
? await db.Accounts.FirstOrDefaultAsync(a => a.Id == identifierGuid)
: await db.Accounts.FirstOrDefaultAsync(a => a.Name == identifier);
if (account is null)
return NotFound();
var activities = await service.GetActiveActivities(account.Id);
return Ok(activities); return Ok(activities);
} }
@@ -54,7 +62,8 @@ public class PresenceActivityController(AppDatabase db, AccountEventService serv
[FromBody] SetActivityRequest request [FromBody] SetActivityRequest request
) )
{ {
if (HttpContext.Items["CurrentUser"] is not SnAccount currentUser) return Unauthorized(); if (HttpContext.Items["CurrentUser"] is not SnAccount currentUser)
return Unauthorized();
var activity = new SnPresenceActivity var activity = new SnPresenceActivity
{ {
@@ -89,7 +98,8 @@ public class PresenceActivityController(AppDatabase db, AccountEventService serv
[FromBody] UpdateActivityRequest request [FromBody] UpdateActivityRequest request
) )
{ {
if (HttpContext.Items["CurrentUser"] is not SnAccount currentUser) return Unauthorized(); if (HttpContext.Items["CurrentUser"] is not SnAccount currentUser)
return Unauthorized();
var type = request.Type; var type = request.Type;
var title = request.Title; var title = request.Title;
@@ -106,14 +116,21 @@ public class PresenceActivityController(AppDatabase db, AccountEventService serv
currentUser.Id, currentUser.Id,
activity => activity =>
{ {
if (type.HasValue) activity.Type = type.Value; if (type.HasValue)
if (title != null) activity.Title = title; activity.Type = type.Value;
if (subtitle != null) activity.Subtitle = subtitle; if (title != null)
if (caption != null) activity.Caption = caption; activity.Title = title;
if (requestManualId != null) activity.ManualId = requestManualId; if (subtitle != null)
if (requestMeta != null) activity.Meta = requestMeta; activity.Subtitle = subtitle;
if (caption != null)
activity.Caption = caption;
if (requestManualId != null)
activity.ManualId = requestManualId;
if (requestMeta != null)
activity.Meta = requestMeta;
}, },
leaseMinutes); leaseMinutes
);
if (result == null) if (result == null)
return NotFound(); return NotFound();
@@ -126,14 +143,21 @@ public class PresenceActivityController(AppDatabase db, AccountEventService serv
activityGuid, activityGuid,
activity => activity =>
{ {
if (type.HasValue) activity.Type = type.Value; if (type.HasValue)
if (title != null) activity.Title = title; activity.Type = type.Value;
if (subtitle != null) activity.Subtitle = subtitle; if (title != null)
if (caption != null) activity.Caption = caption; activity.Title = title;
if (requestManualId != null) activity.ManualId = requestManualId; if (subtitle != null)
if (requestMeta != null) activity.Meta = requestMeta; activity.Subtitle = subtitle;
if (caption != null)
activity.Caption = caption;
if (requestManualId != null)
activity.ManualId = requestManualId;
if (requestMeta != null)
activity.Meta = requestMeta;
}, },
leaseMinutes); leaseMinutes
);
return Ok(result); return Ok(result);
} }
@@ -157,9 +181,11 @@ public class PresenceActivityController(AppDatabase db, AccountEventService serv
[ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<IActionResult> DeleteActivityById( public async Task<IActionResult> DeleteActivityById(
[FromQuery] string? id, [FromQuery] string? id,
[FromQuery] string? manualId) [FromQuery] string? manualId
)
{ {
if (HttpContext.Items["CurrentUser"] is not SnAccount currentUser) return Unauthorized(); if (HttpContext.Items["CurrentUser"] is not SnAccount currentUser)
return Unauthorized();
if (!string.IsNullOrWhiteSpace(manualId)) if (!string.IsNullOrWhiteSpace(manualId))
{ {