mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-26 15:38:45 -07:00
2892cb1698
- Implemented new endpoints for retrieving account privacy settings. - Added fields for privacy preferences such as profile visibility, online status, and activity visibility. feat: Extend play menu tags functionality - Updated PlayMenuTagsRequest to include TrendingTags. - Modified SetPlayMenuTags to handle trending tags. - Enhanced logging to include trending tags. fix: Increase maximum archive size for room zip imports - Updated MaxArchiveBytes from 12GB to 25GB in RoomZipImportController. feat: Improve CDN image handling - Added local image path resolution for room images. - Implemented lazy loading of room image aliases from JSON file. feat: Enhance match player presence resolution - Updated ResolveDataBlobForPresenceAsync to consider sub-room IDs and private instance status. feat: Extend RoomEntity with new properties - Added AllowNewUsers, MinLevel, MaxPlayerCalculationMode, LoadScreensJson, PromoImagesJson, and PromoExternalContentJson fields. feat: Update database schema for new room properties - Added new columns to the Rooms table for AllowNewUsers, MinLevel, MaxPlayerCalculationMode, LoadScreensJson, PromoImagesJson, and PromoExternalContentJson. feat: Implement platform notifications controller - Created PlatformNotificationsController for managing user notification preferences. - Added endpoints for retrieving and setting notification preferences and categories.
123 lines
4.4 KiB
C#
123 lines
4.4 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using DorkNet.Server.Auth;
|
|
using DorkNet.Server.Data;
|
|
using DorkNet.Server.Data.Entities;
|
|
|
|
namespace DorkNet.Server.Controllers.PlatformNotifications;
|
|
|
|
[ApiController]
|
|
[Authorize]
|
|
public class PlatformNotificationsController(DorkNetDbContext db) : ControllerBase
|
|
{
|
|
private long Me => this.RequireCurrentPlayerId();
|
|
|
|
[HttpGet("/preferences")]
|
|
[HttpGet("/platformnotifications/preferences")]
|
|
public async Task<IActionResult> Preferences()
|
|
{
|
|
var row = await db.NotificationPrefs.FirstOrDefaultAsync(p => p.PlayerId == Me);
|
|
return Ok(ToPreferencesWire(row));
|
|
}
|
|
|
|
[HttpPut("/preferences")]
|
|
[HttpPost("/preferences")]
|
|
[HttpPut("/platformnotifications/preferences")]
|
|
[HttpPost("/platformnotifications/preferences")]
|
|
public async Task<IActionResult> SetPreferences([FromBody] PlatformNotificationPrefsRequest? body)
|
|
{
|
|
var row = await db.NotificationPrefs.FirstOrDefaultAsync(p => p.PlayerId == Me);
|
|
if (row is null)
|
|
{
|
|
row = new NotificationPrefsEntity
|
|
{
|
|
PlayerId = Me,
|
|
Platform = "platform",
|
|
};
|
|
db.NotificationPrefs.Add(row);
|
|
}
|
|
|
|
if (body is not null)
|
|
{
|
|
row.AllowAll = body.AllowAll ?? body.Enabled ?? row.AllowAll;
|
|
row.AllowMessage = body.AllowMessages ?? body.Messages ?? row.AllowMessage;
|
|
row.AllowFriendRequest = body.AllowFriendRequests ?? body.FriendRequests ?? row.AllowFriendRequest;
|
|
row.AllowEventInvite = body.AllowEventInvites ?? body.EventInvites ?? row.AllowEventInvite;
|
|
row.AllowAnnouncements = body.AllowAnnouncements ?? body.Announcements ?? row.AllowAnnouncements;
|
|
row.UpdatedAt = DateTime.UtcNow;
|
|
}
|
|
|
|
await db.SaveChangesAsync();
|
|
return Ok(ToPreferencesWire(row));
|
|
}
|
|
|
|
[HttpGet("/config/categories")]
|
|
[HttpGet("/platformnotifications/config/categories")]
|
|
[AllowAnonymous]
|
|
public IActionResult Categories()
|
|
{
|
|
var categories = new[]
|
|
{
|
|
Category(1, "messages", "Messages"),
|
|
Category(2, "friendRequests", "Friend Requests"),
|
|
Category(3, "eventInvites", "Event Invites"),
|
|
Category(4, "announcements", "Announcements"),
|
|
};
|
|
|
|
return Ok(new
|
|
{
|
|
Categories = categories,
|
|
Results = categories,
|
|
TotalResults = categories.Length,
|
|
});
|
|
}
|
|
|
|
private static object Category(int id, string key, string name) => new
|
|
{
|
|
Id = id,
|
|
CategoryId = id,
|
|
Key = key,
|
|
Name = name,
|
|
DisplayName = name,
|
|
IsEnabled = true,
|
|
Enabled = true,
|
|
DefaultEnabled = true,
|
|
};
|
|
|
|
private static object ToPreferencesWire(NotificationPrefsEntity? row) => new
|
|
{
|
|
AllowAll = row?.AllowAll ?? true,
|
|
Enabled = row?.AllowAll ?? true,
|
|
AllowMessages = row?.AllowMessage ?? true,
|
|
Messages = row?.AllowMessage ?? true,
|
|
AllowFriendRequests = row?.AllowFriendRequest ?? true,
|
|
FriendRequests = row?.AllowFriendRequest ?? true,
|
|
AllowEventInvites = row?.AllowEventInvite ?? true,
|
|
EventInvites = row?.AllowEventInvite ?? true,
|
|
AllowAnnouncements = row?.AllowAnnouncements ?? true,
|
|
Announcements = row?.AllowAnnouncements ?? true,
|
|
Categories = new[]
|
|
{
|
|
new { CategoryId = 1, Key = "messages", Enabled = row?.AllowMessage ?? true },
|
|
new { CategoryId = 2, Key = "friendRequests", Enabled = row?.AllowFriendRequest ?? true },
|
|
new { CategoryId = 3, Key = "eventInvites", Enabled = row?.AllowEventInvite ?? true },
|
|
new { CategoryId = 4, Key = "announcements", Enabled = row?.AllowAnnouncements ?? true },
|
|
},
|
|
};
|
|
|
|
public sealed class PlatformNotificationPrefsRequest
|
|
{
|
|
public bool? AllowAll { get; set; }
|
|
public bool? Enabled { get; set; }
|
|
public bool? AllowMessages { get; set; }
|
|
public bool? Messages { get; set; }
|
|
public bool? AllowFriendRequests { get; set; }
|
|
public bool? FriendRequests { get; set; }
|
|
public bool? AllowEventInvites { get; set; }
|
|
public bool? EventInvites { get; set; }
|
|
public bool? AllowAnnouncements { get; set; }
|
|
public bool? Announcements { get; set; }
|
|
}
|
|
}
|