🐛 Fix presence activity controller
This commit is contained in:
@@ -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))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user