Files
the-cycle/src/Prospect.Server.Api/Services/CloudScript/Functions/SetActiveGlobalVanity.cs
T
2025-02-24 01:06:32 +02:00

53 lines
1.7 KiB
C#

using System.Text.Json;
using System.Text.Json.Serialization;
using Prospect.Server.Api.Services.Auth.Extensions;
using Prospect.Server.Api.Services.CloudScript;
using Prospect.Server.Api.Services.UserData;
public class FYSetActiveGlobalVanityRequest
{
[JsonPropertyName("activeVanity")]
public FYActiveGlobalVanity ActiveVanity { get; set; }
}
public class FYSetActiveGlobalVanityResponse
{
[JsonPropertyName("activeVanity")]
public FYActiveGlobalVanity ActiveVanity { get; set; }
}
[CloudScriptFunction("SetActiveGlobalVanity")]
public class SetActiveGlobalVanityFunction : ICloudScriptFunction<FYSetActiveGlobalVanityRequest, FYSetActiveGlobalVanityResponse>
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly UserDataService _userDataService;
public SetActiveGlobalVanityFunction(IHttpContextAccessor httpContextAccessor, UserDataService userDataService)
{
_httpContextAccessor = httpContextAccessor;
_userDataService = userDataService;
}
public async Task<FYSetActiveGlobalVanityResponse> ExecuteAsync(FYSetActiveGlobalVanityRequest request)
{
var context = _httpContextAccessor.HttpContext;
if (context == null)
{
throw new CloudScriptException("CloudScript was not called within a http request");
}
var userId = context.User.FindAuthUserId();
// TODO: Check vanities availability
await _userDataService.UpdateAsync(
userId, userId,
new Dictionary<string, string>{ ["GlobalVanity"] = JsonSerializer.Serialize(request.ActiveVanity) }
);
return new FYSetActiveGlobalVanityResponse
{
ActiveVanity = request.ActiveVanity,
};
}
}